Read · Lineage

Most Languages Reinvented What Perl 6 Designed

What other languages took from the Perl 6 design after 2000, what they reinvented on their own, and what came to both from an older source — each verdict taken from the adopting language’s own records.

Perl 6 specified most of its signature features between Larry Wall's July 2000 announcement and Apocalypse 12 in April 2004, often years before C#, Swift, Kotlin, Rust, Julia or modern Python shipped look-alikes, yet outside the Perl family the adopting languages' own design records document only five borrowings, and all but one were partial: Swift 4 took Perl 6's rule that the closing delimiter's indentation sets a multi-line string's margin — proposed on swift-evolution in 2016 as Perl 6's rule by two future co-authors of SE-0168 and accepted in April 2017 without credit, the one Perl 6 design decision to ship intact in a major non-Perl language; Ruby took the -> lambda arrow (committed July 2005, shipped in 1.9.0 in December 2007) but not pointy-block semantics; PHP 8.3 aligned string increment with Raku's behaviour (RFC accepted 25–0 in July 2023); Apple's Swift string lead planned in 2018 to take whitespace-insensitive patterns, interpolation and ratcheting from Perl 6, then shipped PCRE-style literals in Swift 5.7 (2022); and JavaScript's Joose reached the Perl 6 object model only through Perl 5's Moose. Perl 5 is the one real importer — //, say, state, given/when, ~~, \h/\v, two backtracking verbs, Moose, Regexp::Grammars and the design of the 5.38 class feature all trace to Perl 6, and use feature itself began in 2002 as a use perl6ish pragma for them — and its smartmatch, copied from a specification that kept moving, drew an apology from Larry Wall two weeks after 5.10.0 shipped, was declared a failed experiment in 2023 and survives only behind feature flags. Nearly every other overlap examined, across roughly thirty languages, is either independent reinvention (indentation-stripping heredocs outside Swift and Perl 5, half-open ranges, implicit lambda parameters, keyword-only arguments, CLIs generated from signatures, optional typing) or descent from an ancestor Perl 6 shared (the 2003 Traits paper, CLOS and Dylan, APL and NumPy, CLU and Icon generators, Unix pipes, Ada subtypes, Unicode UAX #29, C# async and Rx). Several famous Perl 6 features were themselves imports: junctions and switch began as Damian Conway's Perl 5 modules in August 2000, roles came from the Traits paper, and Supplies came from Rx. The cause is timing and citation habit: Perl 6 was first on paper but had no stable release until December 2015, so designers cited the languages that shipped — Python, C#, Haskell, Perl 5 — and in other communities' archives Perl 6 appears more often as a cautionary tale about breaking compatibility than as a source, often in the words of those communities' own leaders. A November 2026 full-text search of the Swift, Rust, Kotlin, C#, Scala and Dart proposal archives and the JEPs found Raku only as prior art — most visibly in C#'s chained-comparison proposal, approved in April 2026 — and never as the stated source of a shipped feature. A second pass over design forums, mailing lists, twenty more design repositories and seventeen issue trackers found the Swift heredoc credit in the swift-evolution thread rather than in the proposal, core-team members in Swift, Rust, Go and D arguing from Perl 6 with no further shipped result, and two transmissions below the language level, in a Python regex library and a Rust grammar tool. Raku's most distinctive ideas — junctions, hyper-operators, Whatever-currying, NFG synthetic graphemes, grammars as classes and slangs — have no documented adopter outside the Perl family, and Swift, F# and Julia core members have rejected junctions or NFG in writing.

Every claim links its primary source. A numbered marker after a link means the page says what that source says: look under the paragraph or table, in “What the sources say”. There each source is given in our words, or as a quotation where its exact wording has been added.

The chapters

  1. 1Perl 6 led on paper by years but shipped a decade lateWhen Perl 6 proposed, specified and implemented each idea: the RFCs of 2000, the Apocalypses to 2004, Pugs in 2005, no stable release until 2015. Also the verdict scale used on every page.
  2. 2Only five borrowings escaped the Perl family, and only the heredoc rule shipped intactThe five adoptions outside the Perl family whose own records name Perl 6: Swift’s heredoc rule, Ruby’s ->, PHP’s string increment, Swift regex at the design stage, and Joose by way of Moose.
  3. 3Near-misses outnumber borrowings seven to oneThirty-odd records in which another language’s designers raised Perl 6 and passed: who proposed what, and what shipped instead.
  4. 4Perl 5 imported the most, credited it in threads rather than release notes, and regretted smartmatchThe one real importer: say, state, given/when, //, the feature pragma and Moose, credited in perl5-porters threads rather than release notes, and smartmatch, the import it regretted.
  5. 5Convergent reinvention explains the syntax look-alikesLook-alikes whose documented origin is elsewhere: heredoc dedent, half-open ranges, implicit lambda parameters, keyword-only arguments, CLIs from signatures, null-coalescing.
  6. 6Common ancestors explain the deep overlaps, and several flowed into Perl 6Where both sides descend from an older source (the Traits paper, CLOS, APL, CLU generators, Unix pipes, Rx), what Perl 6 itself imported, and what nobody adopted.
  7. 7Perl 6 traveled further as people, a VM and a warningInfluence through people and infrastructure: Pugs and the Haskell community, Parrot in virtual-machine research, and Perl 6 as other languages’ cautionary tale.
  8. 8ConclusionWhat separates the few ideas that crossed from the many that did not.
  9. 9How this was researchedWhat was searched (proposal archives, forums, mailing lists, issue trackers, 228 JEPs) and what is still unsearched.