Where Raku++ excels

Places where Raku++ accepts and runs code the reference implementation does not — constructs Rakudo rejects, at compile time or at run time, or leaves unimplemented. Examples run live in your browser wherever the browser engine supports the feature.

Variables & sigils

Shaped arrays @a[i;j]

Indexing a shaped array with fewer subscripts than it has dimensions takes a partial view — here, a whole row. Raku++ returns it. Rakudo compiles the same code but throws at runtime ("Partially dimensioned views of shaped arrays not yet implemented. Sorry."), so this is a Raku++ extension.

my @a[2;3] = (1,2,3),(4,5,6);
say @a[1];      # Raku++: [4 5 6]   ·   Rakudo: not yet implemented

The official suite tests exactly this and Rakudo fudges it out — in S09-multidim/indexing.t:

#?rakudo todo "partially dimensioned NYI"
lives-ok { @arr[*;0] }, 'Partially dimensioned view lives';

The #?rakudo todo directive marks a test Rakudo itself cannot yet pass. Raku++ runs it — @arr[*;0] returns the column view.

Types, classes & roles

Native pointers — NativeCall Pointer

A pointer's number is an integer address, and addresses are ordered, as they are in C. Raku++ lets a Pointer be a Real, so <, <=, >, >=, <=>, %, mod and %% work on it directly. Rakudo's Pointer defines .Numeric and .Int but no .Real, so each of those operators dies there ("Cannot resolve caller Real"), even though $p + 8, $p == $q and $p cmp $q all answer.

use NativeCall;
my $buf = Pointer.new(4096);
my $end = Pointer.new(4096 + 64);
say $buf < $end;      # Raku++: True   ·   Rakudo: dies
say $buf <=> $end;    # Raku++: Less   ·   Rakudo: dies
say $buf %% 16;       # Raku++: True   ·   Rakudo: dies

Code that must run on both engines compares the addresses instead: +$buf < +$end.

Regexes & grammars

Conjunction & capture aliases

The @<name>=(…) array alias has a hash-valued sibling, %<name>=(…), which collects each matched substring as a key (reached through $<name>). Rakudo reserves %-sigil variables in regex syntax and rejects the construct at compile time ("The use of hash variables in regexes is reserved"), so this one is Raku++-only.

if "a1b2c3" ~~ / [ %<seen>=(<:L>) \d ]+ / {
    say $<seen>.keys.sort;   # Raku++: (a b c)   ·   Rakudo: won't compile
}

The official suite has a whole 116-test file for hash aliases — S05-capture/hash.t (spec reference L<S05/Hash aliasing>):

ok("  a b\tc" ~~ m/%<chars>=( \s+ \S+ )/, 'Named unrepeated hash capture');
ok($/<chars>{'  a'}:exists, 'One key captured');

Current Rakudo no longer compiles the %<…>=(…) syntax ("The use of hash variables in regexes is reserved"), so it cannot run that file at all. Raku++ does.