2026.17 Release #192

On behalf of the Rakudo development team, I’m happy to announce the April 2026 release of Rakudo #192 – also known as 2026.04. Rakudo is an implementation of the Raku language [says Will Coleda]

New in 2026.04:

Improvements:

  • Make method not found suggestions a bit smarter [3b1201c]
  • Overhaul QuantHash infrastructure [5bceb7c]
  • Add a worry for using the unimplemented TEMP phaser [3b8b6d6]
  • Make .comb accept Cool values for limit [d04cb70]
  • Check for literal value in signature with .return(-rw) [9dfe3e7]
  • Add some sanity checking on Grammar.parse [92ead2b]
  • Add item to error message stating expected param traits [f1c1846]

Fixes:

  • Fix SETTING:: prefix having literal single quotes on Windows, resolving several issues with the optimizer on Windows [1e93528][d8aeb7e]
  • Properly support coercive types on parameterized Set(Hash) [ab6efca]
  • Gate nested-name collision fix on 6.e; emulate legacy on 6.d but add deprecation warnings [3e02de0][febd90e][dfaf7c8][b7f7778][6e6cd5e][4b06516][4ee541b][2d92f01][dc5e945]
  • bytecode validation error fix [8051244]
  • utf8-c8 fix [9dcbc23]
  • Fix .index(@needles) [1d991f9]
  • Use IMPL-MAYBE-CURRY in ApplyInfix.PERFORM-BEGIN – DRY [181cbbc]
  • Fix silent no-op for $.foo = … on non-rw attributes [00a4188]
  • Make sure exits-ok shows the description if given [b18dd71]
  • Fix type smiley enforcement on anonymous params in list assignment, Enforce type constraints on anon typed params in RakuAST list assignment, Enforce type smileys on anon typed params in old frontend list assignment [f7b814e]
  • Fix spurious sigspace warning for rx:s// in RakuAST frontend [26155d3]
  • Fix Set(Hash).new(foo) for coercive type parameterizations [2fe33db]

Additions:

  • Add support for %*SUB-MAIN-OPTS [4cbb955]
  • Make semantics of div / mod Int only in 6.e [245d072]
  • Don’t search for .pm files starting in 6.e [03f90b6]
  • Add :without-backtrace named argument to die() [577a04a]

RakuAST:

  • Many improvements towards parity with original compiler [b776b44][9a8b94d][04c98c0][cfe7e43][a21eeb1][75bb957][0228f61]

The following people contributed to this release:

Elizabeth Mattijsen, Nick Logan, Will Coleda, Richard Hainsworth,
David Schultz, Timo Paulssen, Wenzel P. P. Peppmeyer, Zoltan Ness,
habere-et-dispertire

Anton’s Corner

Anton (Antononcube) explains Chatnik bringing your favorite LLMs into the Unix shell:

Chatnik: LLM Host in the Shell — Part 1: First Examples & Design Principles

“Chatnik” is a Raku package that provides Command Line Interface (CLI) scripts for conversing with multiple, persistent Large Language Model (LLM) personas. Files of the host Operating System (OS) are used to maintain persistence.

Most importantly, “Chatnik” does not try to entrench users in its own user experience (loop) for interaction with LLMs. Instead, it brings customizable LLM invocations and conversations into the Unix shell — making them composable, integratable, and scriptable with existing workflows.

In other words, the tag line “LLM Host in the Shell” should be understood as “LLMs, not as an app — but as a Unix shell primitive.”

Here are the most notable “Chatnik” features:

  • Provides UNIX shell pipelining for LLM interactions
  • Maintains a database of LLM chat objects
  • Connects to multiple models across different LLM providers
  • Offers access to a large repository of prompts
  • Enables convenient retrieval of interaction history
  • Includes management tools for the LLM chat object database
  • Preprocesses prompts using a simple domain-specific language (DSL)
  • Supports loading user-defined LLM personas from JSON files

Anton’s Corner

Anton (Oks) has been working on Rosetta Code and has conjured up a list of 51 unimplemented Raku coding tasks. If you are the sort of coder who likes a challenge, please do pick one up and write it. Get your name in the Rosetta “hall of fame”. [Please let the weekly know so that we can keep abreast of activity. -Ed]

TPRC Submit your Talk

Don’t Miss the Perl and Raku Conference 2026 in Greenville, SC
SAVE THE DATES! Friday through Sunday, June 26-28

Registration is open: https://tprc.us/tprc-2026-gsp

Weekly Challenge

Weekly Challenge #371 is available for your amazement.

Raku Tips ‘n Tricks

This week, I have been tweaking Weekly::Tools … this is a private Raku module that I use to cut out some of the cut ‘n paste needed to edit the Weekly. The work in progress is to have a single source of the truth to convert usernames to peoples’ real names – in this case I needed to combine two Hashes.

I already had one Hash %a set up as a Hash of Lists since often multiple usernames are associated withe the same human. And I needed to combine another single-value Hash %b.

#normalized canonical data
my %a = (
    'real name' => <nick1 nick2>,
    'john doe' => ['johnny', 'johno'],
);
my %b = (
    'dave whom' => 'davie',
);

my %c = combine(%a, %b);

Here is the required output as rendered by the lovely Raku Data::Dump::Tree module:

{3} @0
├ dave whom => davie.Str
├ john doe => [2] @1
│ ├ 0 = johnny.Str
│ └ 1 = johno.Str
└ real name => (2) @2
  ├ 0 = nick1.Str
  └ 1 = nick2.Str

And here is the code that did the job (largely inspired by Hash::Merge):

multi sub combine(Hash \a, \b --> Hash()) {
    (a.keys  b.keys).keys
        .map: -> $k {
        $k =>
            (a{$k}:exists) &&
            (b{$k}:exists)
                ?? combine(a{$k}, b{$k})
                !! a{$k// b{$k}
    }
}
multi sub combine(\a, \b --> Array()) {
    (|a, |b).unique
}

This code shows off a cool set of Raku features:

  • multi sub to handle the case that a is a Hash, or not
  • sigiless names \a, \b that can hold Hash, Array, Scalar
  • coercion of the return value via --> Array()
  • set union of Hash keys
  • ternary ?? !! if else
  • recursion for any Hash structure (a & b must be similar)
  • support for Scalar “for free”

The trickiest bit was realising that a{$k}:exists && b{$k}:exists (without parens) tries to make the :exists adverb apply to the && operator.

Your contribution is welcome, please make a gist and share via the #raku channel on IRC or Discord.

Questions About Raku

This week, one “hairy question” from Timo Paulssen:

So I have a question about #C and I guess indirectly about #clang since clang is the compiler that has both musttail and the preserve_none attribute / calling convention that are used together for the purpose I’m looking at;

the thing I’m trying to do is translate #MoarVM’s interpreter loop from a compile-time switchable “loop with a switch in it” and “function with computed GOTO inside it” to also have a variant where each little opcode implementation becomes its own function, they all have the same call signature, and going from one to another uses a return goto (that’s probably what a future C standard will call it; for now you can get it with [[clang::musttail]]).

Comments About Raku

New Raku Modules

Updated Raku Modules

Winding down

Congrats to the core team for continuing their release drumbeat. Great to see the RakuAST mineshaft is getting a little deeper each time.

Please keep staying safe and healthy, and keep up the good work! Even after week 65 of hopefully only 209.

~librasteve

Leave a comment