Raku
Raku,原名Perl 6,系perl程式語言家族的成員之一,通用程序设计语言,支持多重编程范式,渐进式类型。Raku主要設計者為拉里·沃尔。作為Perl的後繼者,在2000年開始發展,由于接續在Perl 5之後,舊名Perl 6,在2019年10月更名为Raku[5]。Raku语言在语法與Perl 5不同,被视为一种新的程式語言,尽管其计划提供Perl 5的兼容模式。
Raku吉祥物Camelia[1] | |
多重编程范式 | |
语言家族 | Perl |
設計者 | 拉里·沃尔 |
實作者 | Raku community |
2015年12月25日 | |
穩定版本 | v6.d “Diwali”
(2018年11月5日
) |
型態系統 | 動態、漸進式 |
作業系統 | 跨平台 |
許可證 | GNU通用公共许可证 艺术许可协议 2.0 |
文件扩展名 | .raku, .p6, .pl6, .pm6, .pod6 [2] |
網站 | raku |
主要實作產品 | |
Rakudo | |
啟發語言 | |
Haskell[3]、JavaScript、Perl 5、Ruby、Smalltalk | |
影響語言 | |
Perl 5[4]、Haskell[4]、AntLang |
Raku拥有丰富的现代程序语言特征,拉里·沃尔计划用重新定义正規表達式和增加函數式程式語言的特征,使之成为可演化的语言。为保证Raku和Perl社区的持续稳定发展,Raku编译器使用Raku来重写。为保证Perl语言原有函式庫的重用,编译器计划提供同Perl 5语言的兼容模式。
由于Raku语言的语法特征和要求,Raku编译器实现非常复杂,同时,自由軟體社群的资源相对贫乏。因此,Raku编译器的开发显得相当缓慢。
2010年7月,Rakudo的Rakudo Star,作为主要版本的试验品发布。这一发布的目的是为了让人们有一个可基本实用的编译器,方便编写程序和反映需求(Perl6的规范尚未冻结,以期根据人们的使用体验以及编译器的实现等来增补某些特性)。
歷史
在2000年時,拉里·沃尔宣告開始開發Perl 6。最初的目標,是移除Perl因為歷史因素而保留下來的一些功能。
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)的可能性反而是最大的。CPAN上排名第一名,同時也是Perl 6的開發者的唐鳳(Audrey)就這麼說過:「Ruby就是『沒有到處打廣告的Perl 6』」[6]。Ruby的創始者松本行弘(Matz)在接受O'Reilly的訪問時[7],也提到「Ruby借用了很多Perl的東西……,Python遠比Perl要少……」。從Ruby的命名也可以看出Matz遠大的企圖心:「Pearl(珍珠)是六月的誕生石[8],而Ruby是七月的誕生石,我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」[9]
Perl之父拉里·沃尔在《Larry Wall On Perl, Religion, and……》[10] 一文中表示:「很多方面上我還是很喜歡Ruby的,這是因為那些部分是從Perl借過去的。:-)」、「我還喜歡Ruby的C<*>一元星號操作符,所以我把它加到Perl 6里面。」
但是拉里·沃爾在文中也說:「Ruby的主要問題在於它的最少驚訝原則可能讓人誤入歧途,就好像隱藏式詞法範圍。問題在於減少誰的驚訝?專家和初學者對不同的事情驚訝。從一個小程序寫成大程序的人和從開始就寫大程序的人可能對不同的事情感到驚訝。」
参考文献
- Jackson, Joab. . IDG News Service. 23 July 2010 [2015-02-08].
- . [2018-12-17]. (原始内容存档于2018-11-10).
- . Perl Foundation Perl 6 Wiki. The Perl Foundation. 2011-02-28 [2015-02-08]. (原始内容存档于2012-01-21).
- 唐鳳, a.k.a. Audrey Tang. . 2010-04-21 [2018-12-17]. (原始内容存档于2018-12-18).
- . LWN.net. 15 October 2019 [16 October 2019]. (原始内容存档于2019-10-17).
- . [2020-01-21]. (原始内容存档于2018-11-10).
- . [2007-07-12]. (原始内容存档于2020-04-09).
- Larry Wall在命名Perl时,曾经想过使用Pearl作为名称,但发现已经有Pearl这个语言了,于是就成为Perl。
- . [2007-07-19]. (原始内容存档于2009-07-28).
- . [2007-07-12]. (原始内容存档于2007-07-29).