Rakudo compiler, Release #194 (2026.06)
2026-06-27
On behalf of the Rakudo development team, I'm happy to announce the June 2026 release of Rakudo #194. Rakudo is an implementation of the Raku1 language.
The source tarball for this release is available from https://rakudo.org/files/rakudo. Precompiled archives will be available shortly.
New in 2026.06:
Improvements:
- Make Duration based on an Int rather than Real [9c322706]
- Create Array.fmt candidates with more precise handling [7cb5a193]
- Add :end named argument to .split with limit [f628473b]
- Disable macros in 6.e [e93a9dfa]
- Allow "unit sub foo" in 6.e and higher [79788ffe]
- Make smartmatch dispatch a lot DRYer [f3351476]
Fixes:
- Properly support %g in 6.e sprintf [883770dd]
- Gate @/% shadowing semantics on language revision [9044b0d0]
- Fix infinite recursion in Hash::Typed/Object INSTANTIATE-GENERIC [c08667c4][427f1f1d]
- Break self-resolution loop in GenericHOW.instantiate_generic [d845850a]
- Fix sql profiler output with too many entries in one table
- Fix datagram memory leak [931393bd]
- Make sure .assuming passes on slurpy hashes [8ec11ecc]
- gettid fix for older linux installs [5fae814f]
- Allow GC to run while decoding large buffers of utf8/c8 [20b6c745]
- Fix smallint branch of MVM_bigint_mod for values that wrap [0870b473]
- Break up large SQL profiler output strings [c46a0f13]
- Fix Array.pop, .shift on holes in arrays [415fa4b0][69b25922]
- Change all TWEAK methods to submethods [c15ee3da]
- Default object hash value type to Mu under 6.e, Any otherwise [d29b32a2]
- Fix my %h is Set|Bag|Mix = 1,2,3 [e78c5a7e][0918c055]
- Fix deprecation message on return value error message [52e1c248]
- Remove some stray .perl method calls [48ccbea7]
- Make sure precompilation stores are keyed per compiler frontend [0e412620]
- Give all package installers is-stub and defuse-stub [61cd0abc]
- Stop crash when resizing the pty of a non-started Proc::Async [1964cf38]
- Make 'has %.a is Set' work [5eee34b5]
- Make .return check the routine it actually returns from [78c9e9d4]
- Fix IS-SETTING-ONLY-U so a user ACCEPTS is not skipped [66b4e535]
Additions:
- Introduce RAKUDO_ASSUMING_DEBUG environment variable [434bb30b]
- Add native int/num method "bits" [cbc3852b]
- Add :translate-nl named arg to IO::Path.slurp [46fc8602]
RakuAST:
- Accept a Mu lhs and rhs in the test-assign metaops [3adba69e][f38ab67b]
- Add optimizer stage [a6b63d6b][e5fee93c]
- Constant fold pure infix operators [801a103e]
- Collapse a ternary with a constant condition [35249474]
- Collapse a boolean short-circuit with a constant operand [bd3c6ebb]
- initialize $*PACKAGE at compunit scope [c4f0c766]
- sync quote-lang braid from $*PACKAGE, not cursor.package, stop "Out-of-sync package detected in LANG1" warnings [23cc9ccf][7aa98f7b]
- don't cache heredoc quote-langs [6a2f89fd]
- fix compound metaop assignment Z+=, X+=, <<+=>> [300deefb][7309b807]
- propagate CannotLiteralize sentinel through every literalize multi [09e68b90][dfe8a85d]
- fix BEGIN/CHECK-time compilation of inner thunks [0fb07e5c][e0a7c542]
- drop obsolete BEGIN-thunk VMNull workarounds in tests [e6683add]
- skip the lexical &name lookup for non-capturing <.name> [79251365][66878698]
- stop using non-method packages as implicit invocant types [b7d25b88][7deef189]
- apply :D/:U smiley outside the parameterization wrapper [07642cdc][f4b2566c]
- detect duplicate
our multi methoddeclarations [907a23ac][61f6f855] - emit proper SORRY exceptions for invalid feed-operator stages [3abd2ae3][da62ae23]
- make handling of @_ and %_ DRYer [f62b5005]
- streamline Nodify lookup [abf53a60]
- accept trailing #= declarator doc on routines [f4133e98]
- move Code parse time resolver to QASTContext side table [b05721c4]
- pass compile time helpers as parameters; drop Package compile time attributes [6131002c]
- break AST references to CompUnit so CompUnit can't reach the SC [b93ee95e]
- extract
IMPL-COMPOSE-TYPEhelper onPackage[96b14bc6] - prevent bare meta-object reader from degrading Package compose [5c720427][5c36a792]
- propagate custom-args for sub signatures at BEGIN time [cb262794]
- evaluate non compile-time role parameterization args at BEGIN [886a459d]
- allow
= Nilas initializer on a typed attribute [43dda3c4] - tighten double-closure check and silence
xxsink warning [512094e2][f54ef576] - emit empty concat for modifier-only alternation branch [cb6863ab]
- allow anonymous declarations across all package kinds [f7576048]
- clean up orphan IMPL-STUB-CODE freshcoderefs at end of compile [a7911111]
- drop
:Dfrom the element type when parameterising a sigil role [5f2c8dd7] - silent-replace prior
packagedeclarator under multi-part names [f1230e5d] - declare the anonymous state variable for assign meta-operators [efd60a41]
- don't worry about the comma at a statement-level list literal [f6a89a8a]
- don't worry about a stub yada operator in sink context [64afabfc]
- don't worry about rand, , or * at statement level [e2b28821]
- route
.&fand.= &fthroughdispatch:<var>[6cd8b9a6] - keep curried
|*.fooarguments out of arglist flattening [74831cae] - propagate sink before BEGIN-time QAST emission [baa0552e]
- give
oand∘concatenation precedence [7da49b1e] - Make RAKUDO_RAKUAST=0 not activate the RakUAST logic [8695c143]
- handle custom package declarators like legacy does [890f00c7]
- re-resolve
Call::Nameat CHECK to pick up a forwardsub[97175283] - skip compile-time trial-bind for type-capture generics [dde1224e]
- ask the compiler for its QAST stage rather than probing by name [a6b63d6b]
- add a no-op optimize phase [e5fee93c][4f6b8128]
- constant-fold pure operators in the optimize phase [801a103e]
- collapse a ternary with a constant condition [35249474]
- collapse a boolean short-circuit with a constant operand [bd3c6ebb]
- remove unused attribute [5f72bad5]
- fix sub signature parameter and parametric role compile crashes [3ac484ef]
- Give onlystar bodies a source location [336e7650]
- Make some internal lookup hashes set at compile time [b0c6b1b9]
- Route string EVAL through IMPL-FIXUP and wrap nested EVAL output [6add63b2][4c984c78]
- Let nested string EVAL see the caller's lexicals [bc6a3a05][ad2bda0f]
- Some streamlining in actions [684ac0fd]
- Update stage of development [500ad6c8]
- Streamline Node.find-nodes [19bf1d90]
- Fix issue with frame list balancing on early exit of compiler [25200ba6]
- streamline begintime handling [9c88752a]
- iterate from-loop bodies in BEGIN-time initializers [103a4c33][43674690]
- capture bracketed groups as a whole [3ee9ca27][07bd5255]
- accept lexical regexes in the grammar sanity check [2c52423a][978e54b1]
- release compiler services after composition [8c2682d2]
- interpret pairs, hash composers, and contextualizers [1028ac93][7f4b8953]
- don't adopt a setting builtin's WHO when a package shadows it [7778aa78][9b162bcf]
- apply the default parameter type to post-constraint sub-signatures [b8b8874c][08237dcf]
- emit the lexical self when a self term has no resolution [bf586a66][d80e464e]
- align operator sink-warning purity with the legacy frontend [76927f58][f7a18532]
- bind $*PACKAGE to the package type object during trait application [2dadf6d1][229fcee8]
- keep inline where-constraint subsets anonymous [7d10d9a4]
- give an anon or my method in a role an unconstrained invocant [f032b889]
- don't drop a declaration when collapsing a constant conditional [7a0cdb44][37fced81]
- don't redeclare a special variable bound in a sub-signature [14eaee6d][aa5e2499]
- Resolve a package lookup or call through a runtime lexical [0a625406][3b1e53c0][20c3028c]
- Compile a non-interpretable BEGIN-time trait argument [6ce9c0b6][f25d6a24]
- Type an attribute initializer's $_ as Mu [666b5cf3][a142061e]
- Declare a regex capture lexical in a BEGIN-time argument [74ac1d89]
- Interpolate a non-string constant into a regex [56458133]
- Register a Label's meta-object in the SC at declaration [405bc25d]
- don't run a parameter type's ACCEPTS when checking multi signatures [e54e709d]
- Allow adverbs on user-defined terms [3d5d76ac]
- Also declare ::?PACKAGE at the compunit mainline (#6286) [ac637fa5]
- Don't warn that a sunk {*} is a useless use [cc0ebd65]
- Allow an anonymous package inside a role [f3c84660]
- Allow a nested-scope constant to shadow an outer one [78f36490]
- Keep every post-constraint on a parameter [44d5887e]
- Don't fatalize a flattening call argument [c9d0f81c]
- let a real routine override an imported stub [2a42263f][63dfcb57][6b88ef5e]
- build the CORE:: PseudoStash at runtime, not compile time [236ce7cf]
- add Node.SOURCE method [bca7a9ee]
- parse the
my :(...)signature literal declaration [df7ca4ae] - attach a top level variable's
willphaser to the mainline [ed28bde5] - skip arity check for feed-stage calls [9c87e104]
- Declare a block's type captures as block-local [347366d6]
- Don't iterate worries when promoting under fatal [b1e0906c]
- Skip coercion types in the duplicate-multi check [a72df512]
- Resolve an indirect
is ::Nameparent as a type [39d70c1e] - Report a leading pseudo-package cleanly instead of crashing [7b9f50a5]
- Don't compose a class whose body fails to begin [e1f9e3eb]
- Fix enum declaration with a non-string key [2e27eab6]
- Initialize attribute defaults that are type objects at construction [d4c57494]
Internal:
- Remove cases of Mu.POPULATE being called during setting compilation [ffecffda]
- Remove antiflap protection from the release [216c855e]
- Convert pre-compiled to precompiled [d8609a46]
- Todo problematic nativecall tests for moar+clang+dyncall [6a2787ef][d24a0121]
- Keep operator wraps from leaking outside their test [266e714f][d2f6b794]
The following people contributed to this release:
Nick Logan, Elizabeth Mattijsen, Will Coleda, Timo Paulssen, Daniel Green, Patrick Böker, comborico1611, raiph, rir
This release implements 6.c and 6.d versions of the Raku specification.
6.c version of the language is available if you use the use v6.c
version pragma, otherwise 6.d is the default.
Upcoming releases in 2026 will include new functionality that is not part of 6.c or 6.d specifications, available with a lexically scoped pragma. Our goal is to ensure that anything that is tested as part of 6.c and 6.d specifications will continue to work unchanged. There may be incremental spec releases this year as well.
If you would like to contribute or get more information, visit https://raku.org, https://rakudo.org/community, or join us on IRC (#raku on Libera), the Discord, or the [email protected] mailing list.
Additionally, we invite you to make a donation to The Raku Foundation to sponsor Raku development: https://rakufoundation.org/donate (put “Raku Core Development Fund” in the ‘Purpose’ text field)
The next release of Rakudo (#195), is tentatively scheduled for 2026-07-24.
The development team appreciates feedback! If you’re using Rakudo, do get back to us. Questions, comments, suggestions for improvements, cool discoveries, incredible hacks, or any other feedback are welcome through the channels listed above.
See https://raku.org/ ↩
