Revision as of 19:47, 4 June 2024 editAnomieBOT (talk | contribs)Bots6,580,670 edits Rescuing orphaned refs ("syn01" from rev 1227055593)← Previous edit | Revision as of 07:02, 18 August 2024 edit undoJerryobject (talk | contribs)Extended confirmed users15,438 edits Template:Use dmy dates move up to proper place. Template:Infobox programming language, WP:REFerence WP:CITation parameters: adds, fills, author > last + first, update-standardize. Cut needless whitespace character spaces: standardize, aid work via small screens. WP:LINKs: update-standardizes, needless WP:PIPEs > WP:NOPIPEs. WP:COPYEDITs WP:EoS: clarify, WP:TERSE. MOS:FIRSTABBReviation define before WP:ABBR in parentheses. MOS:COMMENT add.Next edit → | ||
Line 1: | Line 1: | ||
{{ |
{{Short description|Programming language derived from Perl}} | ||
⚫ | {{Use dmy dates|date=October 2018}} | ||
{{Infobox programming language | {{Infobox programming language | ||
| title |
| title= | ||
| name = Raku | | name = Raku | ||
| logo = |
| logo = Camelia.svg | ||
| logo size = 250px | | logo size = 250px | ||
| logo alt = Camelia, the Raku mascot | | logo alt = Camelia, the Raku mascot | ||
| logo caption = Camelia, the Raku mascot<ref name="camelia" |
| logo caption = Camelia, the Raku mascot<ref name="camelia"/> | ||
| paradigm = ] | | paradigm = ] | ||
| family = ] | | family = ] | ||
Line 12: | Line 13: | ||
| developer = Raku community | | developer = Raku community | ||
| latest release version = 6.d 'Diwali'<ref>{{cite web |title=Announce: Raku Perl 6 'Diwali' 6.d Language Specification Release |publisher=Zoffix Znet |website=blogs.perl.org |date=2018-11-05 |url=http://blogs.perl.org/users/zoffix_znet/2018/11/announce-raku-perl-6-diwali-6d-language-specification-release.html |access-date=2022-08-19}}</ref> | | latest release version = 6.d 'Diwali'<ref>{{cite web |title=Announce: Raku Perl 6 'Diwali' 6.d Language Specification Release |publisher=Zoffix Znet |website=blogs.perl.org |date=2018-11-05 |url=http://blogs.perl.org/users/zoffix_znet/2018/11/announce-raku-perl-6-diwali-6d-language-specification-release.html |access-date=2022-08-19}}</ref> | ||
| latest release date |
| latest release date={{Start date and age|2020|10|24|df=yes}} | ||
| latest preview version = | | latest preview version = | ||
| latest preview date |
| latest preview date= | ||
| year = {{Start date and age |
| year = {{Start date and age|2015|12|25|df=yes}} | ||
| typing = ], ] | | typing = ], ] | ||
| scope = | | scope = | ||
| implementations = ] | | implementations = ] | ||
| dialects = | | dialects = | ||
| influenced by = ], ], ], ],<ref>{{cite web|url=http://www.perlfoundation.org/perl6/index.cgi?glossary_of_terms_and_jargon|title=Glossary of Terms and Jargon|date=2011-02-28|work=Perl Foundation Perl 6 Wiki|publisher=]|access-date=2015-02-08|archive-url=https://web.archive.org/web/20120121145808/http://www.perlfoundation.org/perl6/index.cgi?glossary_of_terms_and_jargon|archive-date=21 January 2012|url-status=dead}}</ref> ] | | influenced by = ], ], ], ],<ref>{{cite web|url=http://www.perlfoundation.org/perl6/index.cgi?glossary_of_terms_and_jargon|title=Glossary of Terms and Jargon|date=2011-02-28|work=Perl Foundation Perl 6 Wiki|publisher=]|access-date=2015-02-08|archive-url=https://web.archive.org/web/20120121145808/http://www.perlfoundation.org/perl6/index.cgi?glossary_of_terms_and_jargon|archive-date=21 January 2012|url-status=dead}}</ref> ] | ||
| influenced = ],<ref name="Tang2010">{{cite web|url=http://pugs.blogs.com/pugs/2010/04/how-to-implement-perl-6-in-10.html|title=How to Implement Perl 6 in '10|date=2010-04-21|author=唐鳳, a.k.a. ]}}</ref> ],<ref name="Tang2010" |
| influenced = ],<ref name="Tang2010">{{cite web|url=http://pugs.blogs.com/pugs/2010/04/how-to-implement-perl-6-in-10.html|title=How to Implement Perl 6 in '10|date=2010-04-21|author=唐鳳, a.k.a. ]}}</ref> ],<ref name="Tang2010"/> AntLang | ||
| platform = | | platform = | ||
| operating system = ] | | operating system = ] | ||
| license = ] or ] | | license = ] or ] | ||
| file extensions = .raku, .rakumod, .rakudoc, .t, .rakutest<ref>{{Cite web|title=Modules|website=docs.raku.org |url=https://docs.raku.org/language/modules#Basic_structure|access-date=2022-08-19}}</ref> | | file extensions = .raku, .rakumod, .rakudoc, .t, .rakutest<ref>{{Cite web|title=Modules|website=docs.raku.org |url=https://docs.raku.org/language/modules#Basic_structure|access-date=2022-08-19}}</ref> | ||
| website |
| website={{URL|raku.org}} | ||
}} | }} | ||
'''Raku''' is a member of the ] family of ]s.<ref>{{cite web | |
'''Raku''' is a member of the ] family of ]s.<ref>{{cite web |url=http://www.perl.org/about.html |title=About Perl |access-date=2020-06-11 |publisher=perl.org |quote="Perl" is a family of languages, "Raku" (formerly known as "Perl 6") is part of the family, but it is a separate language which has its own development team. Its existence has no significant impact on the continuing development of "Perl".}}</ref> Formerly named '''Perl 6''', it was renamed in October 2019.<ref name="renamed">{{cite web|url=https://lwn.net/Articles/802329/|title=Perl 6 renamed to Raku|publisher=]|date=15 October 2019|access-date=16 October 2019}}</ref><ref>{{cite web|url=https://news.perlfoundation.org/post/tpf-response-raku-rename|title=TPF response to Raku rename|date=29 October 2019}}</ref> Raku introduces elements of many modern and historical languages. Compatibility with Perl was not a goal, though a ] is part of the specification. The design process for Raku began in 2000. | ||
==History== | ==History== | ||
{{Quotation|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>}} | {{Quotation|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 ],<ref>{{cite web | |
The Raku design process was first announced on 19 July 2000, on the fourth day of that year's ],<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 ] in his ''] 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 ]s (APIs). The process began with a series of ] (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}}</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 ], "revealing".<ref name="apoc1">{{cite web | |
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 ], "revealing".<ref name="apoc1">{{cite web |url=https://raku.org/archive/doc/design/apo/A01.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 '']'', 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=] |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 ] written by ] 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 | |
There is also a series of ] written by ] 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}}</ref> | ||
There are three primary methods of communication used in the development of Raku today. The first is the raku ] on ]. The second is a set of ]s.<ref name="lists">{{cite web | |
There are three primary methods of communication used in the development of Raku today. The first is the raku ] (IRC) channel on ]. The second is a set of ]s.<ref name="lists">{{cite web |title=Raku Community |author=The Raku Programming Language |url=https://raku.org/archive/lists/ |year=2022}}</ref> The third is the ] ] hosted at ].<ref>{{cite web |title=Raku |website=GitHub |url=https://github.com/raku | access-date=2022-08-19}}</ref> | ||
===Initial goals and implications=== | ===Initial goals and implications=== | ||
Line 50: | Line 51: | ||
] | ] | ||
The language's ] is "Camelia, the Raku bug".<ref name="camelia">{{cite web | The language's ] is "Camelia, the Raku bug".<ref name="camelia">{{cite web | ||
|url=http://www.infoworld.com/d/open-source/perl-creator-hints-imminent-release-long-awaited-perl-6-445 | |||
|title=Perl creator hints at imminent release of long-awaited Perl 6 | |||
|first=Joab | |||
|last=Jackson | |||
|publisher=IDG News Service | |||
|date=23 July 2010 | |||
|access-date=2015-02-08 | |||
}}</ref> | }}</ref> | ||
Her name is a nod to the camel mascot associated with ], and her form, in the pun-loving tradition of the Perl community, is a play on "]". Spiral designs embedded in her butterfly-like wings resemble the characters "P6", the favored nickname for Perl 6, and off-center eye placement is an intentional pun on "Wall-eyed".<ref name="camelia-eyes">{{cite web | Her name is a nod to the camel mascot associated with ], and her form, in the pun-loving tradition of the Perl community, is a play on "]". Spiral designs embedded in her butterfly-like wings resemble the characters "P6", the favored nickname for Perl 6, and off-center eye placement is an intentional pun on "Wall-eyed".<ref name="camelia-eyes">{{cite web | ||
|url=https://irclog.perlgeek.de/perl6/2016-01-15#i_11894111 | |||
|title=Larry Wall in IRC chat log | |||
|date=15 January 2016 | |||
|access-date=2017-11-10 | |||
}}</ref> | }}</ref> | ||
One of the goals behind the lively and colorful design of the logo was to discourage misogyny in the community and for it to be an opportunity for those of "masculine persuasion" to show their sensitive side.<ref name="camelia-purpose">{{cite web | One of the goals behind the lively and colorful design of the logo was to discourage misogyny in the community and for it to be an opportunity for those of "masculine persuasion" to show their sensitive side.<ref name="camelia-purpose">{{cite web | ||
|url=https://github.com/perl6/mu/blob/aaa173d49c8ba681628739e96ed28fdb921211ec/misc/camelia.txt#L78-L80 | |||
|title=Archived "Logo considerations" email from Larry Wall | |||
|website=] | |||
|date=24 March 2009 | |date=24 March 2009 | ||
|access-date=2017-11-10 | |||
}}</ref> | }}</ref> | ||
==Implementations== | ==Implementations== | ||
{{As of|2017}}, only the ] implementation is under active development. No implementation will be designated as the official Raku implementation; rather, "Raku is anything that passes the official test suite."<ref name="syn01">{{cite web | |
{{As of|2017}}, only the ] implementation is under active development. No implementation will be designated as the official Raku implementation; rather, "Raku is anything that passes the official test suite."<ref name="syn01">{{cite web |url=https://design.raku.org/S01.html |title=Synopsis 1: Overview |last1=Wall |first1=Larry |author1-link=Larry Wall |date=2004-08-10}}</ref> | ||
Rakudo Perl 6<ref>{{cite web|url=https://github.com/rakudo/rakudo/ |title=rakudo/rakudo - GitHub |publisher=Github.com |access-date=2013-09-21}}</ref><ref>{{cite web | |
Rakudo Perl 6<ref>{{cite web|url=https://github.com/rakudo/rakudo/ |title=rakudo/rakudo - GitHub |publisher=Github.com |access-date=2013-09-21}}</ref><ref>{{cite web |url=http://use.perl.org/~pmichaud/journal/35400 |title=The compiler formerly known as 'perl6' |author=Michaud, Patrick |date=2008-01-16 |url-status=dead | archive-url=https://web.archive.org/web/20120218080103/http://use.perl.org/~pmichaud/journal/35400 | archive-date=2012-02-18}}</ref> targets a number of virtual machines, such as ], the ], and ]. MoarVM is a ] built especially for Rakudo<ref>{{cite web |last=Worthington |first=Jonathan |title=MoarVM: A virtual machine for NQP and Rakudo |url=http://6guts.wordpress.com/2013/05/31/moarvm-a-virtual-machine-for-nqp-and-rakudo/ |work=6guts |date=31 May 2013 |access-date=24 July 2013}}</ref> and the NQP Compiler Toolchain.<ref>{{Cite web |url=https://github.com/Raku/nqp |title=NQP - Not Quite Perl at github |website=] |date=2022-05-29 | access-date=2022-05-29}}</ref> There is a layer between Raku and the virtual machines named Not Quite Perl 6 (NQP), which implements ] for parsing Raku, and an ] and backend-specific ]. Large portions of Rakudo are written in Raku, or in its subset NQP. Rakudo is not a completely ], nor are there concrete plans at this point to make Rakudo a ]. | ||
===Historical implementations=== | ===Historical implementations=== | ||
] was an initial implementation of Perl 6 written in ]. 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 ]). |
] was an initial implementation of Perl 6 written in ], led by ]. 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 ] (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 | |
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=] |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}}</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 |
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=] |year=2011}}</ref> | ||
Niecza, another major Perl 6 implementation effort, focused on optimization and efficient implementation research. It targets the ].<ref name="nieczareadme">{{cite web | Niecza, another major Perl 6 implementation effort, focused on optimization and efficient implementation research. It targets the ].<ref name="nieczareadme">{{cite web | ||
|url=https://github.com/sorear/niecza/blob/master/README.pod | |||
|title=Niecza README.pod | |||
|last=O'Rear | |||
|first=Stefan | |||
|website=] | |||
| |
|date=29 November 2011 | ||
| access-date=2012-01-12 | |||
}}</ref> | }}</ref> | ||
==Module system== | ==Module system== | ||
The Raku specification requests that ] be identified by name, version, and authority.<ref>{{cite web | |
The Raku specification requests that ] be identified by name, version, and authority.<ref>{{cite web |url=https://design.raku.org/S11.html |title=Synopsis 11: Modules |last1=Wall |first1=Larry |author1-link=Larry Wall |year=2004}}</ref> It is possible to load only a specific version of a module, or even two modules of the same name that differ in version or authority. As a convenience, ] to a short name is provided. | ||
], the Perl module distribution system, does not yet handle Raku modules. Instead a prototype module system is in use.<ref>{{cite web|url=https://modules.raku.org/ |title=Perl 6 Modules Directory |publisher=Modules.raku.org |access-date=2020-05-17}}</ref> | ], the Perl module distribution system, does not yet handle Raku modules. Instead a prototype module system is in use.<ref>{{cite web|url=https://modules.raku.org/ |title=Perl 6 Modules Directory |publisher=Modules.raku.org |access-date=2020-05-17}}</ref> | ||
Line 103: | Line 104: | ||
=== Books published before Perl 6 version 1.0 (known as version 6.c) === | === Books published before Perl 6 version 1.0 (known as version 6.c) === | ||
* {{cite book | |
* {{cite book |last=Randal |first=Allison |last2=Sugalski |first2=Dan |last3=Tötsch |first3=Leopold |title=Perl 6 Essentials |edition=1st |publisher=O'Reilly Media |date=2003 |isbn=978-0-596-00499-6}} | ||
* {{cite book | |
* {{cite book |last=Randal |first=Allison |last2=Sugalski |first2=Dan |last3=Tötsch |first3=Leopold |url=http://shop.oreilly.com/product/9780596007379.do |title=Perl 6 and Parrot Essentials |edition=2nd |publisher=O'Reilly Media |date=2004 |isbn=978-0-596-00737-9}} | ||
* {{cite book | |
* {{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. | Also, a book dedicated to one of the first Perl 6 virtual machines, Parrot, was published in 2009. | ||
* {{cite book | |
* {{cite book |last=Randal |first=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}} | ||
=== Books published after Perl 6 version 1.0 (known as version 6.c) === | === Books published after Perl 6 version 1.0 (known as version 6.c) === | ||
* {{cite book |first=Andrew |last=Shitov |url=https://andrewshitov.com/perl6-at-a-glance/ |title=Perl 6 at a Glance |date=2017 |isbn=978-90-821568-3-6}} | * {{cite book |first=Andrew |last=Shitov |url=https://andrewshitov.com/perl6-at-a-glance/ |title=Perl 6 at a Glance |date=2017 |isbn=978-90-821568-3-6}} | ||
* {{cite book | |
* {{cite book |last=Rosenfeld |first=Laurent |last2=Downey |first2=Allen B. |title=Think Perl 6 |date=2017 |isbn=978-1-4919-8055-2 |url=http://shop.oreilly.com/product/0636920065883.do}} | ||
* {{cite book | |
* {{cite book |last=Merelo |first=J. J. |title=Learning to program with Perl 6: First Steps: Getting into programming without leaving the command line |publisher=Learning to Program with Perl |date=2017-07-09 |isbn=978-1-5217-9578-1 |url=https://github.com/JJ/perl6em/tree/master/docs}} | ||
* {{cite book | |
* {{cite book |last=Lenz |first=Moritz |title=Perl 6 Fundamentals |publisher=Apress |date=2017-07-27 |isbn=978-1-4842-2898-2 |url=https://www.apress.com/us/book/9781484228982}} | ||
* {{cite book | |
* {{cite book |last=Shitov |first=Andrew |title=Perl 6 Deep Dive |date=2017-09-07 |isbn=978-1-78728-204-9 |url=https://www.packtpub.com/application-development/perl-6-deep-dive}} | ||
* {{cite book | |
* {{cite book |last=Shitov |first=Andrew |url=https://andrewshitov.com/using-perl6/ |title=Using Perl 6 |date=2017 |isbn=978-90-821568-1-2}} | ||
* {{cite book |first=Gabor |last=Szabo |date=3 December 2017 |url=https://leanpub.com/bailador |title=Web Application Development in Perl 6 |publisher=Author}} | * {{cite book |first=Gabor |last=Szabo |date=3 December 2017 |url=https://leanpub.com/bailador |title=Web Application Development in Perl 6 |publisher=Author}} | ||
* {{cite book | |
* {{cite book |last=Lenz |first=Moritz |url=https://www.apress.com/us/book/9781484232279 |title=Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing |publisher=Apress |date=2017-12-04 |isbn=978-1-4842-3228-6}} | ||
* {{cite book | |
* {{cite book |last=Foy |first=Brian D. |title=Learning Perl 6 |publisher=O'Reilly Media |date=2018 |isbn=978-1-4919-7768-2 |url=http://shop.oreilly.com/product/0636920062776.do}} | ||
=== Books published with the new Raku name === | === Books published with the new Raku name === | ||
* {{cite book | |
* {{cite book |last=Shitov |first=Andrew |url=https://andrewshitov.com/2019/10/13/using-raku-the-free-book/ |title=Using Raku: 100 Programming Challenges Solved in the Raku Programming Language |edition=2nd |date=2019-10-13 |isbn=978-90-821568-8-1}} | ||
* {{cite book | |
* {{cite book |last=Shitov |first=Andrew |url=https://andrewshitov.com/2019/10/18/raku-one-liners-a-free-book/ |title=Raku One-Liners: Getting the Most of Raku's Expressive Syntax for Your Daily Routines |date=2019-10-18 |isbn=978-90-821568-9-8}} | ||
* {{cite book | |
* {{cite book |last=Lenz |first=Moritz |url=https://link.springer.com/book/10.1007/978-1-4842-6109-5 |title=Raku Fundamentals: A Primer with Examples, Projects, and Case Studies |publisher=Apress |date=2020-09-06 |isbn=978-1-4842-6108-8}} | ||
==References== | ==References== | ||
{{Reflist |
{{Reflist}} | ||
==External links== | ==External links== | ||
Line 133: | Line 134: | ||
{{Perl|state=collapsed}} | {{Perl|state=collapsed}} | ||
⚫ | {{Use dmy dates|date=October 2018}} | ||
] | ] | ||
] | ] | ||
] | ] | ||
⚫ | ] | ||
] | ] | ||
] | ] | ||
Line 145: | Line 144: | ||
] | ] | ||
] | ] | ||
<!-- Hidden categories below --> | |||
⚫ | ] |
Revision as of 07:02, 18 August 2024
Programming language derived from Perl
Camelia, the Raku mascot | |
Paradigm | Multi-paradigm |
---|---|
Family | Perl |
Designed by | Larry Wall |
Developer | Raku community |
First appeared | 25 December 2015; 9 years ago (2015-12-25) |
Stable release | 6.d 'Diwali' / 24 October 2020; 4 years ago (2020-10-24) |
Typing discipline | Dynamic, gradual |
OS | Cross-platform |
License | GNU General Public or Artistic 2 |
Filename extensions | .raku, .rakumod, .rakudoc, .t, .rakutest |
Website | raku |
Major implementations | |
Rakudo | |
Influenced by | |
Perl, Ruby, Smalltalk, Haskell, JavaScript | |
Influenced | |
Perl, Haskell, AntLang |
Raku is a member of the Perl family of programming languages. Formerly named Perl 6, it was renamed in October 2019. Raku introduces elements of many modern and historical languages. Compatibility with Perl was not a goal, though a compatibility mode is part of the specification. The design process for Raku began in 2000.
History
In Perl 6, we decided it would be better to fix the language than fix the user.
— Larry Wall
The Raku design process was first announced on 19 July 2000, on the fourth day of that year's Perl Conference, by Larry Wall in his State of the Onion 2000 talk. 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 interfaces (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.
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 the original meaning of the term, "revealing". 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, while the Synopses are kept as a historical reference.
There is also a series of 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.
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 lists. The third is the Git source code repository hosted at GitHub.
Initial goals and implications
The major goal Wall suggested in his initial speech was the removal of historical warts. These included the confusion surrounding sigil usage for containers, the ambiguity between the select
functions, and the syntactic impact of bareword filehandles. There were many other problems that Perl programmers had discussed fixing for years, and these were explicitly addressed by Wall in his speech.
An implication of these goals was that Perl 6 would not have backward compatibility with the existing Perl codebase. This meant that some code which was correctly interpreted by a Perl 5 compiler would not be accepted by a Perl 6 compiler. Since backward compatibility is a common goal when enhancing software, the breaking changes in Perl 6 had to be stated explicitly. The distinction between Perl 5 and Perl 6 became so large that eventually Perl 6 was renamed Raku.
Mascot
The language's mascot is "Camelia, the Raku bug". Her name is a nod to the camel mascot associated with Perl, and her form, in the pun-loving tradition of the Perl community, is a play on "software bug". Spiral designs embedded in her butterfly-like wings resemble the characters "P6", the favored nickname for Perl 6, and off-center eye placement is an intentional pun on "Wall-eyed".
One of the goals behind the lively and colorful design of the logo was to discourage misogyny in the community and for it to be an opportunity for those of "masculine persuasion" to show their sensitive side.
Implementations
As of 2017, only the Rakudo implementation is under active development. No implementation will be designated as the official Raku implementation; rather, "Raku is anything that passes the official test suite."
Rakudo Perl 6 targets a number of virtual machines, such as MoarVM, the Java Virtual Machine, and JavaScript. MoarVM is a virtual machine built especially for Rakudo and the NQP Compiler Toolchain. There is a layer between Raku and the virtual machines named Not Quite Perl 6 (NQP), which implements Raku rules for parsing Raku, and an abstract syntax tree and backend-specific code generation. Large portions of Rakudo are written in Raku, or in its subset NQP. Rakudo is not a completely self-hosting implementation, nor are there concrete plans at this point to make Rakudo a bootstrapping compiler.
Historical implementations
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.
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. 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.
Niecza, another major Perl 6 implementation effort, focused on optimization and efficient implementation research. It targets the Common Language Infrastructure.
Module system
The Raku specification requests that modules be identified by name, version, and authority. It is possible to load only a specific version of a module, or even two modules of the same name that differ in version or authority. As a convenience, aliasing to a short name is provided.
CPAN, the Perl module distribution system, does not yet handle Raku modules. Instead a prototype module system is in use.
Books
Books published before Perl 6 version 1.0 (known as version 6.c)
- Randal, Allison; Sugalski, Dan; Tötsch, Leopold (2003). Perl 6 Essentials (1st ed.). O'Reilly Media. ISBN 978-0-596-00499-6.
- Randal, Allison; Sugalski, Dan; Tötsch, Leopold (2004). Perl 6 and Parrot Essentials (2nd ed.). O'Reilly Media. ISBN 978-0-596-00737-9.
- Walters, Scott (15 December 2004). Perl 6 Now: The Core Ideas Illustrated with Perl 5. Expert's Voice in Open Source. ISBN 978-1-59059-395-0.
Also, a book dedicated to one of the first Perl 6 virtual machines, Parrot, was published in 2009.
- Randal, Allison; Whitworth, Andrew (15 June 2009). Parrot Developer's Guide: Pir. Onyx Neon Press. ISBN 978-0-9779201-2-9.
Books published after Perl 6 version 1.0 (known as version 6.c)
- Shitov, Andrew (2017). Perl 6 at a Glance. ISBN 978-90-821568-3-6.
- Rosenfeld, Laurent; Downey, Allen B. (2017). Think Perl 6. ISBN 978-1-4919-8055-2.
- Merelo, J. J. (9 July 2017). Learning to program with Perl 6: First Steps: Getting into programming without leaving the command line. Learning to Program with Perl. ISBN 978-1-5217-9578-1.
- Lenz, Moritz (27 July 2017). Perl 6 Fundamentals. Apress. ISBN 978-1-4842-2898-2.
- Shitov, Andrew (7 September 2017). Perl 6 Deep Dive. ISBN 978-1-78728-204-9.
- Shitov, Andrew (2017). Using Perl 6. ISBN 978-90-821568-1-2.
- Szabo, Gabor (3 December 2017). Web Application Development in Perl 6. Author.
- Lenz, Moritz (4 December 2017). Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing. Apress. ISBN 978-1-4842-3228-6.
- Foy, Brian D. (2018). Learning Perl 6. O'Reilly Media. ISBN 978-1-4919-7768-2.
Books published with the new Raku name
- Shitov, Andrew (13 October 2019). Using Raku: 100 Programming Challenges Solved in the Raku Programming Language (2nd ed.). ISBN 978-90-821568-8-1.
- Shitov, Andrew (18 October 2019). Raku One-Liners: Getting the Most of Raku's Expressive Syntax for Your Daily Routines. ISBN 978-90-821568-9-8.
- Lenz, Moritz (6 September 2020). Raku Fundamentals: A Primer with Examples, Projects, and Case Studies. Apress. ISBN 978-1-4842-6108-8.
References
- ^ Jackson, Joab (23 July 2010). "Perl creator hints at imminent release of long-awaited Perl 6". IDG News Service. Retrieved 8 February 2015.
- "Announce: Raku Perl 6 'Diwali' 6.d Language Specification Release". blogs.perl.org. Zoffix Znet. 5 November 2018. Retrieved 19 August 2022.
- "Modules". docs.raku.org. Retrieved 19 August 2022.
- "Glossary of Terms and Jargon". Perl Foundation Perl 6 Wiki. The Perl Foundation. 28 February 2011. Archived from the original on 21 January 2012. Retrieved 8 February 2015.
- ^ 唐鳳, a.k.a. Audrey Tang (21 April 2010). "How to Implement Perl 6 in '10".
- "About Perl". perl.org. Retrieved 11 June 2020.
"Perl" is a family of languages, "Raku" (formerly known as "Perl 6") is part of the family, but it is a separate language which has its own development team. Its existence has no significant impact on the continuing development of "Perl".
- "Perl 6 renamed to Raku". LWN.net. 15 October 2019. Retrieved 16 October 2019.
- "TPF response to Raku rename". 29 October 2019.
- Biancuzzi, Federico; Warden, Shane (2009). Masterminds of Programming: Conversations with the Creators of Major Programming Languages. "O'Reilly Media, Inc.". ISBN 978-0596515171.
- Kline, Joe (21 August 2000). "Report from the Perl Conference".
- Wall, Larry (2000). "State of the Onion 2000". O'Reilly Network.
- The Perl Foundation (2000). "About Perl 6 RFCs".
- Wall, Larry (2 April 2001). "Apocalypse 1: The Ugly, the Bad, and the Good".
- "Raku test suite". GitHub. 2019.
- Wall, Larry; The Perl 6 designers (2015). "Perl 6 Design Documents".
{{cite web}}
: CS1 maint: numeric names: authors list (link) - The Perl Foundation (2001). "Exegeses".
- The Raku Programming Language (2022). "Raku Community".
- "Raku". GitHub. Retrieved 19 August 2022.
- "Larry Wall in IRC chat log". 15 January 2016. Retrieved 10 November 2017.
- "Archived "Logo considerations" email from Larry Wall". GitHub. 24 March 2009. Retrieved 10 November 2017.
- Wall, Larry (10 August 2004). "Synopsis 1: Overview".
- "rakudo/rakudo - GitHub". Github.com. Retrieved 21 September 2013.
- Michaud, Patrick (16 January 2008). "The compiler formerly known as 'perl6'". Archived from the original on 18 February 2012.
- Worthington, Jonathan (31 May 2013). "MoarVM: A virtual machine for NQP and Rakudo". 6guts. Retrieved 24 July 2013.
- "NQP - Not Quite Perl at github". GitHub. 29 May 2022. Retrieved 29 May 2022.
- "Feature comparison of Perl 6 compilers". Archived from the original on 7 February 2019.
- Wall, Larry; et al. (2007). "Perl 6 STD". GitHub.
- "mp6/kp6 FAQ". Perl 6 development team. 2006.
- "Yapsi README". GitHub. 2011.
- O'Rear, Stefan (29 November 2011). "Niecza README.pod". GitHub. Retrieved 12 January 2012.
- Wall, Larry (2004). "Synopsis 11: Modules".
- "Perl 6 Modules Directory". Modules.raku.org. Retrieved 17 May 2020.
External links
Perl | |
---|---|
Things | |
Frameworks | |
Software | |
Related | |
Books | |
People | |