Raku
編程範型 | 多重編程範式 |
---|---|
語言家族 | Perl |
設計者 | 拉里·沃爾 |
實作者 | Raku community |
釋出時間 | 2015年12月25日 |
目前版本 |
|
型態系統 | 動態、漸進式 |
作業系統 | 跨平台 |
特許條款 | GNU通用公眾特許條款 藝術特許條款 2.0 |
副檔名 | .raku, .p6, .pl6, .pm6, .pod6 [3] |
網站 | raku |
主要實作產品 | |
Rakudo | |
啟發語言 | |
Haskell[4]、JavaScript、Perl 5、Ruby、Smalltalk | |
影響語言 | |
Perl 5[5]、Haskell[5]、AntLang |
Raku,原名Perl 6,系perl程式語言家族的成員之一,通用程式語言,支援多重編程範式,漸進式類型。Raku主要設計者為拉里·沃爾。作為Perl的後繼者,在2000年開始發展,由於接續在Perl 5之後,稱為Perl 6,在2019年10月更名為Raku[6]。Raku語言在語法與Perl 5不同,被視為一種新的程式語言,但提供Perl 5的相容模式。
Raku擁有豐富的現代程式語言特徵,重新定義了正規表達式和增加函數式程式語言的特徵,成為可演化的語言。為保證Raku和Perl社區的持續穩定發展,Raku編譯器使用Raku來重寫。為保證Perl語言原有函式庫的重用,編譯器提供同Perl 5語言的相容模式。
2010年7月,Rakudo的Rakudo Star,作為主要版本的試驗品釋出。這一釋出讓人們有一個可實用的編譯器,方便編寫程式和反映需求(Perl6的規範尚未凍結,以期根據人們的使用體驗以及編譯器的實現等來增補某些特性)。
歷史
在2000年時,拉里·沃爾宣告開始開發Perl 6。最初的目標,是移除Perl因為歷史因素而保留下來的一些功能,旨在「容易的事應當容易處理,難事應當變得容易,不可能的事應當辦成」,開始面向所有人編制RFC。總共產生了361份RFC。RFC完成後,交由拉里·沃爾審閱和分類。
Raku開發使用三種開發方式。第一,通過IRC的#raku頻道。第二,Perl基金會的電子郵寄清單。第三,寄存在Git上的原始碼。
2019年10月更名為Raku。
代碼範例
Hello World
raku -e "say 'Hello, world'"
輸出一百萬以內的所有素數
raku -e 'put (^1_000_000).grep: *.is-prime'
階乘
# 递归实现
sub factorial1(Int $n --> Int) {
return $n ?? $n * factorial1($n-1) !! 1;
}
# 直接使用运算符
sub factorial2(Int $n --> Int) {
return [*] 1..$n;
}
# 惰性计算
sub factorial3(Int $n --> Int) {
my $fac := 1, { $^a * (1 + ++$) } ... *;
$fac[$n-1];
}
巨集
macro hello($what) {
quasi { say "Hello { {{{$what}}} }" };
}
和Ruby比較
一般都是認為Ruby vs. Python(可能是因為同樣採取縮排的設計),但是就一些相關的討論和訪談,Ruby vs. Perl 6(Raku)的可能性反而是最大的。[7] Ruby的創始者松本行弘(Matz)在接受O'Reilly的訪問時[8],也提到「Ruby借用了很多Perl的東西……,Python遠比Perl要少……」。從Ruby的命名也可以看出Matz遠大的企圖心:「Pearl(珍珠)是六月的誕生石[9],而Ruby是七月的誕生石,我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」[10]
Perl之父拉里·沃爾在《Larry Wall On Perl, Religion, and……》[11] 一文中表示:「很多方面上我還是很喜歡Ruby的,這是因為那些部分是從Perl借過去的。:-)」、「我還喜歡Ruby的C<*>一元星號運算子,所以我把它加到Perl 6裏面。」
但是拉里·沃爾在文中也說:「Ruby的主要問題在於它的最少驚訝原則可能讓人誤入歧途,就好像隱藏式詞法範圍。問題在於減少誰的驚訝?專家和初學者對不同的事情驚訝。從一個小程式寫成大程式的人和從開始就寫大程式的人可能對不同的事情感到驚訝。」
參考文獻
- ^ Jackson, Joab. Perl creator hints at imminent release of long-awaited Perl 6. IDG News Service. 23 July 2010 [2015-02-08]. (原始內容存檔於2014-07-31).
- ^ https://github.com/perl6/roast/blob/master/docs/announce/6.d.md#changelog; 檢索日期: 2019年8月11日.
- ^ 存档副本. [2018-12-17]. (原始內容存檔於2018-11-10).
- ^ Glossary of Terms and Jargon. Perl Foundation Perl 6 Wiki. The Perl Foundation. 2011-02-28 [2015-02-08]. (原始內容存檔於2012-01-21).
- ^ 5.0 5.1 唐鳳, a.k.a. Audrey Tang. How to Implement Perl 6 in '10. 2010-04-21 [2018-12-17]. (原始內容存檔於2018-12-18).
- ^ Perl 6 renamed to Raku. LWN.net. 15 October 2019 [16 October 2019]. (原始內容存檔於2019-10-17).
- ^ 日本的Perl社群名人——宮川達彥專訪。. [2020-01-21]. (原始內容存檔於2018-11-10).
- ^ 訪問Matz。. [2007-07-12]. (原始內容存檔於2020-04-09).
- ^ Larry Wall在命名Perl時,曾經想過使用Pearl作為名稱,但發現已經有Pearl這個語言了,於是就成為Perl。
- ^ O'Reilly訪問Matz。. [2007-07-19]. (原始內容存檔於2009-07-28).
- ^ Larry Wall On Perl, Religion, and……. [2007-07-12]. (原始內容存檔於2007-07-29).
外部連結
規格
- Synopses - The evolving summary of each Apocalypse, updated regularly(頁面存檔備份,存於互聯網檔案館),這些檔案被視為Raku正式的語言架構。
- Exegeses - Further explanation of each Apocalypse with code samples(頁面存檔備份,存於互聯網檔案館)
- Apocalypses - The first-pass drafts from Larry Wall(頁面存檔備份,存於互聯網檔案館)
- Official Raku Documentation Raku的正式說明文件。
實做
- Raku(頁面存檔備份,存於互聯網檔案館),Raku語言的主要資訊站台。
- Rakudo(頁面存檔備份,存於互聯網檔案館),目前最完整的實作(Activated)
- Perlito(頁面存檔備份,存於互聯網檔案館),以 Perl、Raku、Javascript 語言實做的 Perl / Raku Compiler
- Pugs(頁面存檔備份,存於互聯網檔案館),以Haskell實做Raku的計劃。(Deactivated)
- Parrot(頁面存檔備份,存於互聯網檔案館),Parrot的主站。
- v6.pm(頁面存檔備份,存於互聯網檔案館),包裝為 Perl 模組的,