Chapter 1 of 9
Perl 6 led on paper by years but shipped a decade late
Any priority claim depends on which of three Perl 6 dates one uses. The proposal layer is the 361 RFCs submitted between 1 August and late September 2000, after Larry Wall announced the redesign at the State of the Onion on 19 July 2000 (RFC index; Wikipedia: Raku1). The specification layer is Wall's Apocalypses, Damian Conway's Exegeses and the Synopses; only A1–A6 (April 2001 – March 2003) and A12 (16 April 2004) were ever written, and the Synopses began with S05 in June 2002 and were maintained until about 2015 (A122; S053). The implementation layer starts with Pugs, Audrey Tang's Haskell interpreter, first released on 7 February 2005: it ran junctions and chained comparisons in its first release and had multis, signatures, rules via PGE, reduce, hyper-operators and gather/take by late May (Pugs ChangeLog4). Rakudo was named in January 2008, released independently of Parrot from February 2009, shipped Rakudo Star on 29 July 2010 and the first stable language version, 6.c, on 25 December 2015, followed by 6.d in November 2018 (Michaud5; TPF: Rakudo Star; Rakudo 2015.12; Rakudo 2018.11). As of Rakudo 2026.09 (28 September 2026) RakuAST is the default frontend, but 6.e is still a preview (Rakudo 2026.096).
What the sources say 6
Wikipedia article Raku (programming language) source ↗
Its infobox lists Perl, Haskell and AntLang as languages Raku influenced, citing Audrey Tang's 2010 post for the first two; the body makes no such claim.
Larry Wall, Perl 6 language designer Apocalypse 12, perl.com source ↗
Adopts the Traits paper's case for separating object management from code reuse and cites only that paper, but lets roles carry state, rejects renaming or excluding conflicting methods, and allows runtime mixins.
Synopsis 5 (Larry Wall, Damian Conway, Patrick Michaud and others), Perl 6 design document S05-regex.pod, Raku/old-design-docs repository source ↗
States that the after assertion performs lookbehind by matching a reversed syntax tree leftward, and forbids lookbehind on any pattern that is not reversible.
Audrey Tang (then Autrijus), creator of Pugs, and the Pugs developers Pugs ChangeLog, releases 6.0.0 to 6.2.4 source ↗
Lists chained comparisons and junctions in the first release, 6.0.0, then multimethod dispatch and parameter binding within a week, PGE-based rules in 6.2.3, and reduction, hyper forms and gather/take in 6.2.4.
Patrick Michaud, lead developer of the Perl 6 compiler on Parrot Michaud's blog post on the compiler's new name, as copied in the CCR Remaster collection (which rewrites Perl 6 as Raku) source ↗
Announces Rakudo Perl, Rakudo for short, as the name of the Perl 6 compiler on Parrot, quoting Damian Conway's proposal, and reserves Perl 6 for the language specification itself.
Rakudo development team Announcement of Rakudo compiler release #197 (2026.09) source ↗
Announces that release 197 switches Rakudo to its RakuAST-based grammar and actions by default, calls this a milestone on the way to language level 6.e, and says 6.e itself will come later.
Two caveats matter for anyone weighing priority claims. First, Apocalypse decisions were often reversed: A3 (October 2001) defined binary ~~ as logical XOR and A4 (January 2002) spelled smartmatch =~; Larry Wall floated ~~ for smartmatch on perl6-language on 24 October 2002, among several spellings, once ~ had become string concatenation, the list's weekly summary counted it as settled on 1 November, and A6 (March 2003) was the first Apocalypse to use it (A37; A48; msg116329; msg1211610; A611). The earliest mention in the design record — an Apocalypse, or the perl6-language decision that preceded it — is the fair date for when an idea was first specified, but the final semantics usually come from later Synopsis edits. Second, a block of features commonly treated as Perl 6 originals arrived late enough to be contemporaries of their look-alikes elsewhere, or later than them:
What the sources say 5
Larry Wall, Perl 6 language designer Apocalypse 3, Operators, on perl.com source ↗
Defines binary ~~ as a logical exclusive-or operator and gives hyper operators a caret prefix, so @a ^* @b multiplies two arrays element by element.
Larry Wall, Perl 6 language designer Apocalypse 4, Syntax, on perl.com source ↗
Adopts given and when in place of switch and case, and presents its table of match rules as the definition of how Perl 6's =~ operator behaves.
Larry Wall, Perl 6 language designer perl6-language mailing list, Re: perl6 operator precedence table (msg11632) source ↗
Argues smart matching merits a weightier operator and suggests ~~ for it, while also floating === and several other spellings and saying that for now he prefers the English word like.
Piers Cawley, writer of the weekly Perl 6 Summary perl6-language mailing list, Perl 6 Summary for the week ending 27 Oct 2002 (msg12116) source ↗
Reports, among operator choices that look settled, that ~~ replaces =~ to avoid confusion with the string-append ~=, while !~ stays as it was.
Larry Wall, Perl 6 language designer Apocalypse 6, Subroutines, on perl.com source ↗
Uses ~~ for smart matching, in an example that tests the caller's context through the want function.
| Feature | First in the spec | First implemented |
|---|---|---|
Whatever star | 21 September 2006 (b22582e12) | Rakudo 2009-04, method calls on * build closures (Rakudo ChangeLog13) |
WhateverCode | 25 August 2009 (357be1114) | the 2009-04 star closures above predate the name |
:D/:U smileys | in S12 by 26 June 2009 (04840a315) | Rakudo 2011.09 (Rakudo ChangeLog13) |
sub MAIN, USAGE | S06, 10 August 2006, in one commit by Larry Wall (svn r10804) (msg2579516; 4a841a817) | Rakudo basic MAIN 11 November 2008 (41d13f818); full MAIN/USAGE in 2010.06 |
| NFG grapheme strings | name enters S02 30 January 2009 (dc6f02a19) | MoarVM/Rakudo, 24 April 2015 (6guts20) |
Decimal literals as Rat | 22 October 2009 (f431adc21) | Rakudo's first Rat 30 August 2009, Int/Int → Rat the next day (9fff15822; 39c3f4b23); Pugs had a rational value type by 19 February 2005 (a8389eb24); literal default not pinned |
| Promise, Channel, Supply | S17 rewrite, 3 November 2013, whose Subscribables were renamed Supply the next day (0b1176525) | Rakudo 2013.07 (JVM) to 2015.09 (react/whenever) |
What the sources say 14
Larry Wall, Perl 6 language designer Raku/old-design-docs commit b22582e (Pugs svn r13527), Functions.pod source ↗
Adds a generalized pick to the built-in functions document, with signatures that take a Whatever argument so that passing a star returns every element in random order.
Rakudo development team Rakudo docs/ChangeLog, releases 2009-04 (#16) and 2011.09 source ↗
Notes in the 2009-04 release that a method call on the Whatever star now builds a closure, and lists :D and :U type modifiers among the additions in 2011.09.
Larry Wall, Perl 6 language designer Raku/old-design-docs commit 357be11 (Pugs svn r28058), S02 source ↗
Names WhateverCode as the type of the closures a star term builds, replacing Code:($), and HyperWhateverCode for the double-star form, so multiple dispatch can tell them from Whatever.
Larry Wall, Perl 6 language designer Raku/old-design-docs commit 04840a3 (Pugs svn r27265), S12 among others source ↗
Besides header clean-ups across the Synopses, adds a conjectural S12 section deriving Int:A, Int:U and Int:D from a type name to accept any, only undefined or only defined values.
Larry Wall, Perl 6 language designer perl6-language mailing list, svn commit mail for r10804 (msg25795) source ↗
Mails the S06 change that introduces MAIN: called only when the file is run directly, with arguments bound by signature, multi dispatch over candidates, and USAGE or a generated message on failure.
Larry Wall, Perl 6 language designer Raku/mu (Pugs svn mirror) commit 4a841a8, svn.perl.org r10804, S06 and S02 source ↗
Commits the first definition of MAIN subs to S06, mapping command-line switches to named parameters, with multi MAIN candidates and a USAGE fallback, and credits Aaron Crane for a typo fix.
Jonathan Worthington, Rakudo developer Rakudo commit 41d13f8 (Parrot languages/perl6, r32554) source ↗
Adds rudimentary support for a MAIN sub as the program's entry point, which at this stage hands every command-line argument over as a positional.
Larry Wall, Perl 6 language designer Raku/old-design-docs commit dc6f02a (Pugs svn r25122), S02 source ↗
Adds a sentence to S02 saying Perl handles Unicode text in NFG by default, treating each grapheme, diacritics and all, as a single character.
Jonathan Worthington, MoarVM and Rakudo developer 6guts blog, This week: the big NFG switch on, and many fixes source ↗
Reports that since 24 April 2015 every string Rakudo handles on the MoarVM backend is grapheme-based, with an example whose chars count is 1 while its NFC codepoint count is 2.
Larry Wall, Perl 6 language designer Raku/old-design-docs commit f431adc (Pugs svn r28881), S02 source ↗
Adds to S02 that decimal literals without an exponent are kept as Rat, with examples showing 1.23456 as a Rat and 6.02e23 as a Num.
Patrick Michaud, Rakudo lead developer Rakudo commit 9fff158, src/setting/Rat.pm source ↗
Adds a 47-line first draft of the Rat rational-number type to Rakudo's Perl 6 setting.
Solomon Foster, Rakudo contributor, with Moritz Lenz Rakudo commit 39c3f4b (RT #68898) source ↗
Makes dividing two Ints with / return a Rat and div return an Int, following the then-current S03, and adds mixed Rat and Int arithmetic.
Autrijus (Audrey) Tang, creator of Pugs Pugs svn r83 (Raku/mu commit a8389eb), src/AST.hs source ↗
Adds a Bool-to-Rat conversion to the VRat rational value type already defined in the Pugs interpreter's Haskell AST, thanking viirya.
Jonathan Worthington, Rakudo and MoarVM developer Raku/old-design-docs commit 0b11765, new file S17-concurrency-jnthn.pod source ↗
Adds a concurrency Synopsis written anew and called heretical, describing what Rakudo on the JVM already did plus planned work, with sections on schedulers, promises, channels and subscribables, for discussion.
Spec dates before April 2006 no longer rest on the Apocalypses and Exegeses alone. Raku/old-design-docs begins with an April 2006 mirror and the canonical November 2008 import, but the Pugs svn mirror Raku/mu preserves the complete svn.perl.org Synopsis history — 948 commits from S05 version 1 (July 2002) to the move into Pugs on 26 November 2008, with revisions before February 2005 dated by their Last Modified headers — and from 23 February 2006 every Synopsis commit was also mailed, with its diff, to perl6-language (Raku/mu; first commit; perl6-language). That record pins down several famous names and operators, most of them later than their reputation: the word junction was coined on the list on 30–31 October 2002, when Wall asked for a friendlier name than quantum superposition and took one from a list of candidates Conway offered (msg1184226; msg1192727; msg1200728); »op« replaced A3's ^op on 1 November 2002 (msg1213829); the cross metaoperator X entered S03 on 12 September 2006 and zip became Z on 21 February 2007 (088e2dc30; c76102731); and the sequence operator ..., with its arithmetic and geometric deduction, arrived in a single S03 revision on 5 October 2008 (18d314932). "≤" in the tables marks a date by which a feature was already present.
What the sources say 7
Damian Conway, Perl 6 design team perl6-language mailing list, superposition-operators thread (msg11842) source ↗
Answers Larry Wall's call for a new word for superposition by offering alternatives such as multivalue, opval, set, junction and junctive, formatted as one any() call.
Larry Wall, Perl 6 language designer perl6-language mailing list, Re: [RFC] Perl6 HyperOperator List (msg11927) source ↗
Dismisses the coined term flexprs as no clearer than superpositions and says he would rather use an ugly but clear name such as junctions, or junks for short.
Damian Conway, Perl 6 design team perl6-language mailing list, Re: [RFC] Perl6 HyperOperator List (msg12007) source ↗
Accepts Larry Wall's suggested name junctions, recalling his electrical engineering days, and commits to using the word from then on.
Larry Wall, Perl 6 language designer perl6-language mailing list (msg12138) source ↗
Proposes keeping French quotes for qw lists and writing vector multiply with inward-pointing quotes around the operator, and >>*<< as a plain-ASCII spelling, with bit shifts requalified as +>> and ~>>.
Larry Wall, Perl 6 language designer Raku/mu (Pugs svn mirror) commit 088e2dc, svn.perl.org r11969, S03 source ↗
Adds X to S03 as a fifth metaoperator that applies an operator to every pairing drawn from its lists, and as a cross-product operator by itself, with X~ and X* examples.
Larry Wall, Perl 6 language designer Raku/mu (Pugs svn mirror) commit c761027, svn.perl.org r13699, S03 source ↗
Renames the zip operator from the yen sign to Z and makes plain X the list cross operator, formerly XX, so the old string-concatenating X becomes X~X.
Larry Wall, Perl 6 language designer Raku/mu (Pugs svn mirror) commit 18d3149, svn.perl.org r14586, S03 source ↗
Adds the infix series operator (three dots) to S03, with a Fibonacci example and a rule that deduces arithmetic or geometric progressions when the right operand is the Whatever star.
The verdicts use a fixed scale. Borrowed (documented) means the adopter's own record — a PEP, RFC, KEEP, Swift Evolution text, commit message, or the designer's own statement — names Perl 6 or Raku as the source. Borrowed (circumstantial) means timing and people make a link likely but nobody says so. Considered, rejected and cited as prior art cover records that name Perl 6 without taking from it. Independent means no link is documented and the adopter credits something else or nothing. Common ancestor means both sides descend from an earlier documented source, and flowed into Perl 6 marks cases where Perl 6 was the importer. The absence of a Perl 6 mention was established by full-text search of the specific documents cited, not by an exhaustive grep of every proposal repository.