A hand-written lexer, parser, and tree-walking evaluator for real Raku — classes, roles, grammars, regexes, multi-dispatch, junctions, lazy sequences, a bignum tower, Unicode-correct strings, concurrency. It can also compile a program to a standalone native executable, and — as Raku.js — run client-side in a browser.
Hand-rolled bignum, Unicode tables, and regex engine. Builds anywhere CMake and a C++17 compiler run.
The same binary tree-walks a script or transpiles it to C++ and compiles native.
Graded test-by-test against Roast, the official Raku specification suite.
Every release is gated on the full suite with zero fully-passing-file regressions — and, since v1.5.0, on performance too. Numbers are measured on each tag, never projected; the whole suite runs in ~3½ minutes through a harness written in Raku and run by Raku++ itself.
Arbitrary-precision Int, exact Rat — 0.1+0.2-0.3 is exactly 0 — Num, Complex, allomorphs.
Multi-dispatch, BUILD/TWEAK, mixins, augment, full .^ introspection, .wrap.
Backtracking engine, Unicode classes, token/rule, .parse with action classes & make.
Type / literal / where constraints, destructuring, coercion types, callsame.
Closures, * WhateverCode, junctions, gather/take, feeds, 1,2,*+*...Inf.
User ops in all six categories with working precedence traits and meta-operators over them.
start/await, Supply/react/whenever, Channel, atomics; opt-in true parallelism.
UAX #29 (emoji ZWJ), NFC/NFD/NFKC/NFKD, UCA collation — generated UCD/UCA 17.0 tables.
rakupp prog.rakuInterpret — the default; covers the whole language.--bundle -o progStandalone binary that re-parses the source at startup.--aot -o progStandalone binary embedding the already-parsed AST.--exe -o progTranspile to C++ and compile native — anything unsupported falls back to --bundle automatically.Raku.js → WASMIn the browser — same semantics as native, client-side, no server, with an embeddable playground.--precomp-modules=on caches the parsed form of everything a program uses — use XML (10 files, 1,110 lines) goes 16.0 ms → 5.7 ms cold-to-warm. Nothing is written to disk until you ask.streq 1.5×, fib 1.4×, both narrowed by node specialization in v1.7.0 — the next slide compiles away.--exe strips the tree-walk: every benchmark lands 2.5× to 39.9× ahead of Rakudo — streq and fib, the interpreter's only two losses, now included. Anything the compiler can't lower falls back to bundling automatically.The binary + --exe compiler.
src/ compiled to WebAssembly (Emscripten).
rakujs.{js,wasm}Public playground — editor, share links, widget.
embeds the wasmBehavioural spec; examples verified live.
raku.online/spec18 lessons, every example a live editor.
raku.online/tourReal programs as a beyond-Roast test target.
differential runEverything downstream ships the same interpreter — the wasm, the sub-sites, the Homebrew tap, and the release binaries all trace back to src/. Neither the spec nor the tour hosts an engine of its own, so both inherit a new one for free the moment the playground redeploys.
Plus three interpreters for other languages, each written in Raku: JavaScript/TypeScript, Perl 5 (Raku parsing its own ancestor), and Python 3 — off-side rule included, via a CPython-style INDENT/DEDENT tokenizer — with examples byte-identical to node, perl and python3. Every one of the 24 bundled examples/ also compiles natively with --exe, byte-for-byte identical.
useRaku++ ships no package manager. It reads the same store zef already populates — install a module the normal way, then use it from Raku++ with no flags and no reinstall.
pass their own test suites — the files zef runs at install time, not a one-line API probe. 32 → 50 in one release.
JSON::Fast, XML, YAMLish, URI, File::Temp, File::Find, Terminal::ANSIColor, Digest, Encode — ranked over the ecosystem archive, version-pinned.
No module accommodations: is raw write-back, CALL-ME by name, method FALLBACK, END at process exit — all landed as interpreter fixes.
Far end of the same road: a live HTTP/1.1 200 OK over TLS — Cro's client on IO::Socket::Async::SSL, talking to the system OpenSSL through Raku++'s own NativeCall. Getting there was a chain of ~13 bugs, and nearly every one was a general correctness bug.
The full course static-site generator regenerates the entire site byte-for-byte identically to Rakudo — including the real zef-installed YAMLish module.
The site builder runs start to finish on Raku++ — a genuine data-processing application, not a curated snippet.
libffi found at run time with nothing to install, plus structs, unions, pointers, callbacks and variadics./(\d) { say $0 }/ re-fires its side effects; the fix has to defer them to the accepted path.atomicint, Channel, Supplier) are done, the thread pool and the gates are not.NativeHelpers::Blob is MoarVM-bound by design, AttrX::Mooish wants deep metamodel emulation.The cheap Roast wins are spent; moving the count now takes whole features — parse, runtime and dispatch together. Every release stays gated on no regressions, in conformance and in speed.
Prebuilt archives on every GitHub Release — macOS universal, Linux static, Windows static-CRT — plus the WebAssembly bundle. No runtime dependencies, anywhere.