Rakudo compiler, Release #197 (2026.09)

2026-09-28

On behalf of the Rakudo development team, I’m happy to announce the September 2026 release of Rakudo #197. 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.

The 2026.09 release marks a major step towards a Rakudo release with language level 6.e. It makes the RakuAST implementation of the Raku grammar and actions the default. This milestone highlights the work of approximately 5000 commits since 2020.

Great care was taken for this migration to be as painless and unnoticeable as possible, both from a feature and performance point of view.

In the unlikely event that a problem is found with this release, please report it (as always) via github.

This milestone is a key step in the roadmap to releasing Raku language level 6.e, which will occur in a future release. To test your code in advance, add use v6.e.PREVIEW; to your code, or set the RAKU_LANGUAGE_LEVEL environment variable to "v6.e.PREVIEW".

The following people contributed to this release:

Nick Logan, Elizabeth Mattijsen, Will Coleda, Daniel Green, Patrick Böker, habere-et-dispertire, Andrew Shitov, Richard Hainsworth

New in 2026.09:

A huge number of RakuAST fixes and improvements, driven in part by repeated testing of the entire ecosystem against RakuAST. This release makes RakuAST the default.

  • Improvements:

    • Fold the plus reduction over bare values
    • Cache interpolated regex compilations by pattern source
    • Share the revision gate mixin across gated routines
    • Code coverage instrumentation filtering
    • Bump mimalloc dependency to v3.5.0
    • Serialize precomputed grammar NFAs in their VM form
    • Sort, slip and split without work the answer does not need
    • Remove one %*ENV lookup from startup
    • Move setting $*SCHEDULER to much later in the setting
    • Make setting up $*SCHEDULER not vivify %*ENV
    • Take the Slip raw where SlippyIterator recognizes Empty
    • Use more precise return type
    • Let a block reference resolve to its own compilation frame
    • Recompute block quantifier limits after a cursor restart
    • Give each repetition of a bounded quantifier its own NFA state
    • Drop the cached match when backtracking trims captures
    • Match the initializer symbol before rejecting a signature declaration
    • Match the lookahead greedily in the LTM before-assertion test
    • Allow anything that can coerce to an IO::Path in $*CWD, $*TMPDIR
    • Streamline setting core dynamic vars
    • Check the object types declared on parameters
    • Give character class methods a declarative prefix
    • Sort a multi candidate typed with Mu after every other type
    • Make quote parsing linear in the number of escapes
    • Assign to a new Array or Hash element from its own callsite
    • Only use new Rat.raku rendering in 6.e+
    • Keep the Array BIND-POS fast path small enough to inline
    • R:I.IS-ISOLATED-MATCH does not need boolification
    • Measure a case-folded interpolation match against the target
    • Rebuild a flattened method table that came from deserialization
  • Fixes:

    • Quote dependency specification matchers in .raku
    • Accept metamodel types as declared types and as roles to compose
    • Fix for get empty args in Windows build
    • Use NQP's own home for the build dir runner
    • Stop rejecting valid attribute and is default defaults at compile time
    • Answer reductions over endless sequences
    • Key precompilation stores to the setting they bind to
    • Answer reductions over a Range of Ints from its endpoints
    • Make the 6.e sprintf produce C compatible output
    • Share unit lexicals between BEGIN code and the mainline
    • Make Signature.new and Parameter.new match what the compiler builds
    • Scope the language revision to the compilation unit
    • Keep a unit lexical container out of a dependent's serialization
    • Let make attach to a capture's own match in its code block
    • Honor zerowidth and negate on regex group nodes
    • Fix ignoremark and escape handling in character classes
    • Flush the regex position before subrule arguments and limits blocks run
    • Take apart only an index or coercion on the right of but and does
    • Settle a channel's closed promise even when the marker is in flight
    • Compare routine identity instead of addresses in the qualified call test
    • Stop the declarative prefix at a sequential alternation
    • Backtrack into interpolated regex alternatives
    • Look ahead greedily for a bare rational or complex literal
    • Stop :s substitution copying marks into the replacement
    • Serialization context fix
    • Remove thread blocking while reading
    • Keep the reference a two operand conditional yields
    • Support older GCCs with zmij fix
    • Object repossession fix from MoarVM
    • Fix indentation snafu in dynvar initialization logic
    • Fix empty args in Windows script runner/rakudo binary
    • Coverage slot fix
  • Additions:

    • Refuse a regex or branch made up of modifiers alone from 6.e
    • Throw for a hash used as a regex assertion
  • Internal:

    • Clean up all generated build artifacts on make clean
    • Some more implementation-detail marking
    • Make Raku.legacy completely lazy
    • Slightly change checking for deprecations in END processing
    • Make frontend detection and switching in tests less fragile
    • Reduce number of dynvar lookups when testing
    • Initial overview of changes since 6.d

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), or the Discord.

Additionally, we invite you to make a donation to The Raku Foundation to sponsor Raku development: https://raku.foundation/Donations.

The next release of Rakudo (#198), is tentatively scheduled for 2026-10-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.