Camelia, the Raku spokesbug

Feature comparison of Raku compilers

Legend

+
implemented
±
partially implemented
-
not yet implemented
?
unknown status

Why isn't Pugs listed here?

Features

Feature Rakudo MoarVM Rakudo JVM Links
Basics
Basic control structures
+
+
spec code code code code code code code code
Lexical variables
+
+
spec spec code code code code
Dynamic variables
+
+
code code
Basic types (strings, numbers)
+
+
spec spec code code code code code code
Basic file IO
+
+
spec code code code code
Basic OO
+
+
spec spec code code
Basic multi dispatch
+
+
spec code
Basic regex support
+
+
spec code
Subroutines
+
+
spec code code code code
Blocks
+
+
spec code
Pointy blocks (lambdas)
+
+
spec code code
Placeholder blocks
+
+
spec code
Special variables
+
+
spec code
eval
+
+
spec code code
Constant declarations
+
+
spec code code
State variables
+
+
spec code
Loops as list generators
+
+
spec
Labeled loops
+
+
spec
goto
spec
Classes
Classes, attributes, methods
+
+
spec code code code
Single inheritance
+
+
spec code
Multiple inheritance
+
+
spec code
Read-only accessors
+
+
spec code
Read-write accessors
+
+
spec code code
Default constructor
+
+
spec code code
Private methods
+
+
spec
Submethods
+
+
spec
Trust relationships
+
+
spec
Natively typed attributes
+
+
Delegation
+
+
spec
Roles
Roles with attributes and methods
+
+
code code
Composing roles into classes
+
+
code
Composing roles into roles
+
+
Parametric roles
+
+
code code
Types
Subset types
+
+
code code
Enums
+
+
code code
Mixins
+
+
code
Regexes
Quantifiers, alternations
+
+
code code
Match objects
+
+
code
Named and positional captures
+
+
code code
Conjunction
+
+
Longest-Token Matching
+
+
code code
Character classes
+
+
code
Unicode properties
± 1
± 1
Embedded code blocks
+
+
code
Variable interpolation
+
+
code
Grammars
+
+
code code
Categories across derived grammars
+
+
code
Double colon LTM stopper
spec
Matching streams
spec
Signatures
Positional args/params
+
+
code code
Named args/params
+
+
code code
Slurpy args/params
+
+
code code
LoL args/params
+
+
Nested signatures
+
+
code code code
is rw, is copy
+
+
code code code
Argument coercion
+
+
spec
Type captures
+
+
spec code
Built-in types and functions
Strings, split, join, case folding, substr
+
+
spec code code code
Basic numbers, arithmetic operations
+
+
spec code
Big integers
+
+
code
Complex numbers
+
+
spec code
Rat type
+
+
code code
Hashes, Pairs
+
+
spec code code
Lists, arrays, map, grep
+
+
spec code code code code
Autovivification
+
+
spec
Lazy lists, gather/take
+
+
code code code code code code
Ranges
+
+
code code code
Trigonometric
+
+
code code
Probabalistic (rand, pick, roll)
+
+
code
sprintf, .fmt
+
+
code code code
Object hashes, Sets, SetHash, MixHash, ...
+
+
code
Buf, buf, utf8
+
+
spec spec spec
NFG as default
+
spec spec
DateTime, Date
+
+
code code code code
Native operators
±
±
Compact arrays
+
+
spec
Shaped arrays/hashes
± 2
± 2
spec
ObjAt from WHICH
+
+
spec
Multi dispatch
Multi method dispatch
+
+
code
Multi sub dispatch
+
+
code code
Protos
+
+
code
Based on arity
+
+
Based on types
+
+
code code
Proper narrowness analysis
+
+
Additional constraints
+
+
code code
nextsame, nextwith, callsame, callwith
+
+
code
Overloading built-in operators
+
+
code code code
Module management
use
+
+
code
need
+
+
require
+
+
Basic module versioning
±
±
Operators
Smartmatch
+
+
spec code code code
Numeric bitops
+
+
spec code
Buffer bitops
+
+
code
Junctive
+
+
spec
Chaining
+
+
spec
File tests
+
+
code code code
List infixes
+
+
code
Sequence
+
+
code code code code code code code
Flipflop
+
+
Interpolating word list
+
+
Logic cascade (andthen, orelse)
+
+
Meta operators
Reduction
+
+
code code code code
Triangle
+
+
code code
Assignment
+
+
code code code
Negation
+
+
Reverse
+
+
code
Zip
+
+
code code code code code
Cross
+
+
code code code code code
Hyper
+
+
code code code code code code
Syntax flexibility
Defining new operators
+
+
code code code code code
Precedence, thunkiness, and associativity of new operators
+
+
Basic macros
± 3
± 3
code
Macro hygiene
±
±
Delayed declarations
Concurrency
Basic threads
+
+
Synchronization
+
+
start blocks
+
+
Promises
+
+
Channels
+
+
Supplies
+
±
Parallelized hypers and junctions
code
Feed operators
± 4
± 4
code
Phasers
BEGIN/CHECK/INIT/END
+
+
code
CATCH
+
+
code code
ENTER/LEAVE
+
+
FIRST/NEXT/LAST
+
+
PRE/POST
+
+
Misc
Junctions, autothreading
+
+
spec code code code
Priming (aka 'currying')
+
+
spec code
Whatever-priming
+
+
spec code code
REPL
+
+
code
MAIN
+
+
spec code code
run, qx
+
+
spec spec code
Environment vars
+
+
spec code
PROCESS, GLOBAL, CALLER, DYNAMIC
+
+
spec
CORE, SETTING, UNIT, OUTER, MY, OUR, CLIENT
+
+
spec
DESTROY
+
Meta-Object Programming
Introspection
+
+
code code
Adding methods
+
+
Role composition
+
+
Overriding dispatch
+
+
Lexing and Parsing
Multiline Comments
+
+
spec
Embedded Comments
+
+
spec
Bracketing Characters
+
+
spec
User-selected Brackets
+
+
spec
Heredocs
+
+
spec
Unspaces
+
+
spec
Pod
+
+
spec
Indirect method calls
+
+
spec

Footnotes

  1. no set operations yet
  2. no partial views, no hashes
  3. pending redesign in the language
  4. don't automatically multi-thread yet

Please note that this feature matrix generally represents the state of the latest development versions of the compilers, not that of the latest release.


This page is generated by process.pl from template.html and features.json, all of which can be found in the raku/features repository. The canonical location for this page is at http://raku.org/compilers/features and is updated at least hourly.

If you find any information here lacking or inaccurate, please fix it in the repository mentioned above. If you don't have commit access yet, please ask on the #raku IRC channel.

The data to generate this page was last updated Wed Nov 15 15:51:27 2023 GMT; The page itself was updated Wed Nov 15 16:04:49 2023 GMT