Raku (programming language): Difference between revisions

Content deleted Content added
m History: Fix link fragment for 'State of the Onion'
Rescuing 6 sources and tagging 0 as dead.) #IABot (v2.0.9.5
 
Line 35:
{{Blockquote|text=In Perl 6, we decided it would be better to fix the language than fix the user.|author=Larry Wall<ref>{{cite book|title=Masterminds of Programming: Conversations with the Creators of Major Programming Languages|first1=Federico|last1=Biancuzzi|first2=Shane|last2=Warden|year=2009|publisher="O'Reilly Media, Inc." |isbn=978-0596515171|url=https://books.google.com/books?id=yB1WwURwBUQC&q=%22In%20Perl%206%2C%20we%20decided%20it%20would%20be%20better%20to%20fix%20the%20language%20than%20fix%20the%20user%22}}</ref>}}
 
The Raku design process was first announced on 19 July 2000, on the fourth day of that year's [[O'Reilly Open Source Convention|Perl Conference]],<ref>{{cite web |title=Report from the Perl Conference |url=http://www.perl.com/pub/a/2000/08/tpc4.html |author=Kline, Joe |date=2000-08-21}}</ref> by [[Larry Wall]] in his ''[[Perl#Community|State of the Onion]] 2000'' talk.<ref>{{cite web |title=State of the Onion 2000 |last1=Wall |first1=Larry |author1-link=Larry Wall |publisher=O'Reilly Network |url=http://www.perl.com/pub/a/2000/10/23/soto2000.html |year=2000}}</ref> At that time, the primary goals were to remove "historical warts" from the language; "easy things should stay easy, hard things should get easier, and impossible things should get hard"; and a general cleanup of the internal design and [[application programming interface]]s (APIs). The process began with a series of [[Request for Comments]] (RFCs). This process was open to all contributors, and left no aspect of the language closed to change.<ref>{{cite web |title=About Perl 6 RFCs |author=The Perl Foundation |url=https://raku.org/archive/rfc/meta/ |year=2000 |access-date=16 May 2020 |archive-date=26 July 2021 |archive-url=https://web.archive.org/web/20210726035820/https://raku.org/archive/rfc/meta/ |url-status=dead }}</ref>
 
Once the RFC process was complete, Wall reviewed and classified each of the 361 requests received. He then began the process of writing several "Apocalypses", using [[wikt:apocalypsis#English|the original meaning of the term]], "revealing".<ref name="apoc1">{{cite web |url=https://www.perl.com/pub/2001/04/02/wall.html/ |title=Apocalypse 1: The Ugly, the Bad, and the Good |last1=Wall |first1=Larry |author1-link=Larry Wall |date=2001-04-02}}</ref> While the original goal was to write one Apocalypse for each chapter of ''[[Programming Perl]]'', it became obvious that, as each Apocalypse was written, previous Apocalypses were being invalidated by later changes. For this reason, a set of Synopses was published, each one relating the contents of an Apocalypse, but with any subsequent changes reflected in updates. Today, the Raku specification is managed through the "roast" testing suite,<ref>{{cite web |title=Raku test suite |website=[[GitHub]] |url=https://github.com/Raku/roast |year=2019}}</ref> while the Synopses are kept as a historical reference.<ref name="syn">{{cite web |last1=Wall |first1=Larry |author1-link=Larry Wall |author2=The Perl 6 designers |title= Perl 6 Design Documents| url=https://design.raku.org/ |year=2015}}</ref>
 
There is also a series of [[wikt:exegesis#English|Exegeses]] written by [[Damian Conway]] that explain the content of each Apocalypse in terms of practical usage. Each Exegesis consists of code examples along with a discussion of the usage and implications of the examples.<ref name="exegeses">{{cite web |url=https://raku.org/archive/doc/exegesis.html |title=Exegeses |author=The Perl Foundation |year=2001 |access-date=16 May 2020 |archive-date=26 July 2021 |archive-url=https://web.archive.org/web/20210726035822/https://raku.org/archive/doc/exegesis.html |url-status=dead }}</ref>
 
There are three primary methods of communication used in the development of Raku today. The first is the Raku [[Internet Relay Chat]] (IRC) channel on [[Libera Chat]]. The second is a set of [[mailing list]]s.<ref name="lists">{{cite web |title=Raku Community |author=The Raku Programming Language |url=https://raku.org/archive/lists/ |year=2022 |access-date=16 May 2020 |archive-date=12 August 2020 |archive-url=https://web.archive.org/web/20200812025211/https://raku.org/archive/lists/ |url-status=dead }}</ref> The third is the [[Git (software)|Git]] [[source code repository]] hosted at [[GitHub]].<ref>{{cite web |title=Raku |website=GitHub |url=https://github.com/raku | access-date=2022-08-19}}</ref>
 
===Initial goals and implications===
Line 82:
[[Pugs (compiler)|Pugs]] was an initial implementation of Perl 6 written in [[Haskell]], led by [[Audrey Tang]]. Pugs used to be the most advanced implementation of Perl 6, but since mid 2007, it is mostly dormant (with updates made only to track the current version of the [[Glasgow Haskell Compiler]] (GHC)). As of November 2014, Pugs was not being maintained.<ref>{{cite web|url=http://perl6.org/compilers/features|title=Feature comparison of Perl 6 compilers|archive-url=https://web.archive.org/web/20190207035658/https://perl6.org/compilers/features|archive-date=7 February 2019|url-status=dead}}</ref>
 
In 2007, v6-MiniPerl6 ("mp6") and its reimplementation, v6-KindaPerl6 ("kp6") were written as a means to bootstrap the Perl-6.0.0 STD, using Perl 5. The STD is a full grammar for Perl 6 and is written in Perl 6. In theory, anything capable of parsing the STD and generating executable code is a suitable bootstrapping system for Perl 6. kp6 is currently compiled by mp6 and can work with multiple backends.<ref name="STD">{{cite web |url=https://github.com/perl6/std/blob/master/STD.pm6 |title=Perl 6 STD |last1=Wall |first1=Larry |author1-link=Larry Wall| website=[[GitHub]] |year=2007|display-authors=etal}}</ref><ref>{{cite web |url=http://darcs.pugscode.org/v6/v6-KindaPerl6/docs/FAQ.pod |title=mp6/kp6 FAQ |year=2006 |publisher=Perl 6 development team |access-date=2 April 2007 |archive-date=28 September 2007 |archive-url=https://web.archive.org/web/20070928200017/http://darcs.pugscode.org/v6/v6-KindaPerl6/docs/FAQ.pod |url-status=dead }}</ref> mp6 and kp6 are not full Perl 6 implementations and are designed only to implement the minimum featureset required to bootstrap a full Perl 6 compiler.
 
Yapsi was a Perl 6 compiler and runtime written in Perl 6. As a result, it required an existing Perl 6 interpreter, such as one of the Rakudo Star releases, to run.<ref>{{cite web |url=https://github.com/masak/yapsi/blob/master/README |title=Yapsi README |website=[[GitHub]] |year=2011}}</ref>
Line 291:
Raku provides a superset of Perl features with respect to regexes, folding them into a larger framework called "[[Raku rules|rules]]" which provide the capabilities of [[Context-sensitive language|context-sensitive]] [[parsing]] formalisms (such as the [[syntactic predicate]]s of [[parsing expression grammar]]s and [[ANTLR]]), as well as acting as a [[Closure (computer science)|closure]] with respect to their [[Scope (programming)|lexical scope]].<ref>{{cite web | url=https://design.raku.org/S05.html | title=Synopsis 5: Regexes and Rules | author=Wall, Larry | date=2009-05-20 }}</ref> Rules are introduced with the <code>rule</code> keyword which has a usage quite similar to subroutine definition. Anonymous rules can also be introduced with the <code>regex</code> (or <code>rx</code>) keyword, or they can simply be used inline as regexps were in Perl via the <code>m</code> (matching) or <code>s</code> (substitute) operators.
 
In ''Apocalypse 5'', Larry Wall enumerated 20 problems with "current regex culture". Among these were that Perl's regexes were "too compact and 'cute'", had "too much reliance on too few metacharacters", "little support for named captures", "little support for grammars", and "poor integration with 'real' language".<ref>{{cite web | url=https://raku.org/archive/doc/design/apo/A05.html | title=Apocalypse 5: Pattern Matching | author=Wall, Larry | date=2002-06-04 | access-date=16 May 2020 | archive-date=22 August 2021 | archive-url=https://web.archive.org/web/20210822004436/https://raku.org/archive/doc/design/apo/A05.html | url-status=dead }}</ref>
 
===Syntactic simplification===<!-- This section is linked from [[Ellipsis]] -->
Line 471:
* {{cite book |last=Walters |first=Scott |url=http://www.apress.com/us/book/9781590593950 |title=Perl 6 Now: The Core Ideas Illustrated with Perl 5 |publisher=Expert's Voice in Open Source |date=2004-12-15 |isbn=978-1-59059-395-0}}
Also, a book dedicated to one of the first Perl 6 virtual machines, Parrot, was published in 2009.
* {{cite book |last1=Randal |first1=Allison |last2=Whitworth |first2=Andrew |url=http://onyxneon.com/books/pir/index.html |title=Parrot Developer's Guide: Pir |publisher=Onyx Neon Press |date=2009-06-15 |isbn=978-0-9779201-2-9 |archive-date=18 October 2016 |access-date=24 July 2017 |archive-url=https://web.archive.org/web/20161018020706/http://www.onyxneon.com/books/pir/index.html |url-status=dead }}
 
=== Books published after Perl 6 version 1.0 (known as version 6.c) ===