Influenced by: Perl Python OCaml
Raku (formerly Perl 6) is a gradually typed, multi-paradigm language designed by Larry Wall to be the deliberate, decades-long redesign of Perl rather than a quick patch. It is maximalist by intent: grammars and rules for parsing, junctions and lazy lists, multiple dispatch, roles, a rich operator algebra, and first-class Unicode all live in one coherent system. It is a language, not the language — it ships with mutable syntax and the motto that there should always be more than one way to do it.
What makes it distinctive
- Grammars are a first-class language construct: you write
grammar,rule, andtokendeclarations to build full parsers and DSLs, not just regexes — Raku's own parser is itself a grammar. - Junctions let one value be a superposition of several:
if $x == 1 | 3 | 5(ananyjunction) orall(@list) > 0collapse logical combinations into single expressions that auto-thread through operators. - Multiple dispatch via
multi sub/multi method, with dispatch resolved on argument types and arbitrarywhereconstraints, e.g.multi fib(Int $n where * < 2). - Lazy, potentially infinite sequences with the
...sequence operator:my @fib = 1, 1, * + * ... Inf;defines all Fibonacci numbers and computes only what you index. - Gradual typing: code runs untyped and dynamic, but you can opt into
Int,Str, subset types, and signatures incrementally for safety and dispatch without rewriting everything. - Roles and mixins for composition over inheritance —
does/butmix behavior into objects, even into single instances at runtime. - A deep, regular operator algebra: hyperoperators (
@a >>+<< @b) vectorize, the reduction metaoperator ([+] @nums) folds, and you can define your own operators with custom precedence. - Pervasive, correct Unicode: strings work on graphemes, you can write
say 3 ≤ 5andπas identifiers/operators, and regexes match emoji and diacritics out of the box. - Sigils that stay invariant (
$scalar,@array,%hash) plus twigils for scope/context, making variable role visible at a glance — a deliberate refinement of Perl's sigil system.
History
Raku began life in July 2000 as Perl 6, announced by Larry Wall at the Perl Conference after the Perl community submitted hundreds of RFCs asking for everything they wished Perl could be. Wall's response was the now-famous series of Apocalypses — design documents that worked through the requests one by one — later distilled into Exegeses by Damian Conway and the running Synopses that became the de facto specification. Crucially, Perl 6 was not meant to replace Perl 5; Wall framed it as a sister language, a clean-room reimagining freed from backwards-compatibility constraints.
The redesign was famously, almost mythically, slow. An early implementation effort targeted the Parrot virtual machine, but the language's ambition repeatedly outran its tooling. The Pugs project (Audrey Tang's Haskell-based interpreter, started 2005) proved the design was implementable and pulled functional-programming sensibilities — lazy lists, immutability, strong typing — deeper into the language. Over time the effort consolidated around Rakudo, the compiler that gives the language its eventual name.
The long-promised milestone arrived on Christmas Day, 25 December 2015, with the 6.c "Christmas" release: the first official, versioned language specification with a conforming Rakudo implementation. This is the date Raku is generally said to have "appeared." By then Rakudo ran primarily on MoarVM, a virtual machine purpose-built for Raku (with secondary backends for the JVM and, historically, JavaScript), replacing the Parrot era.
For years the name Perl 6 caused real friction: newcomers assumed it was simply the next Perl, while it was in fact a different language with different semantics, and the shared brand confused adoption for both siblings. In 2019 Elizabeth Mattijsen opened a now-celebrated issue proposing a rename. In October 2019, Larry Wall approved renaming Perl 6 to Raku — "Raku" being a nod to the Rakudo compiler (and meaning, roughly, "comfort" or "ease" in Japanese). Wall blessed the change by quoting the parable of new wine and old wineskins. The use v6 pragma stayed valid, but the language had its own identity at last.
Post-rename, Raku governs itself through a community Raku Steering Council, and Rakudo ships regular releases. The toolchain settled into a friendly shape: rakudo as the compiler, zef as the module installer, and the Raku ecosystem of community modules. New filename extensions (.raku, .rakumod, .rakutest, .rakudoc) replaced the old .pl6/.pm6 set, while legacy extensions kept working.
What distinguishes Raku's history is its refusal to compromise the design for the schedule. Wall's stated philosophy — "we decided it would be better to fix the language than fix the user" — produced a language that absorbed ideas from Perl's pragmatism, Haskell's laziness and types, Smalltalk and Ruby's object models, and the parsing-grammar tradition, and welded them into one expressive whole. It arrived late, but it arrived as a complete and unusually internally consistent design.