Raku

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Raku
File:Camelia.svg
Raku吉祥物Camelia[1]
编程范型多重编程范式
语言家族Perl
设计者拉里·沃尔
实现者Raku community
发行时间2015年12月25日,​10年前​(2015-12-25
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    类型系统动态、渐进式
    操作系统跨平台
    许可证GNU通用公共许可证
    艺术许可协议 2.0
    文件扩展名.raku, .p6, .pl6, .pm6, .pod6 [2]
    网站raku.org
    主要实现产品
    Rakudo英语Rakudo Perl 6
    受影响于
    Haskell[3]JavaScriptPerl 5RubySmalltalk
    影响语言
    Perl 5[4]Haskell[4]、AntLang

    Raku,原名Perl 6,系perl编程语言家族的成员之一,通用程序设计语言,支持多重编程范式渐进式类型。Raku主要设计者为拉里·沃尔。作为Perl的后继者,在2000年开始发展,由于接续在Perl 5之后,称为Perl 6,在2019年10月更名为Raku[5]。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)的可能性反而是最大的。[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的主要问题在于它的最少惊讶原则可能让人误入歧途,就好像隐藏式词法范围。问题在于减少谁的惊讶?专家和初学者对不同的事情惊讶。从一个小程序写成大程序的人和从开始就写大程序的人可能对不同的事情感到惊讶。”

    参考文献[编辑]

    1. ^ 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). 
    2. ^ 存档副本. [2018-12-17]. (原始内容存档于2018-11-10). 
    3. ^ Glossary of Terms and Jargon. Perl Foundation Perl 6 Wiki. The Perl Foundation. 2011-02-28 [2015-02-08]. (原始内容存档于2012-01-21). 
    4. ^ 4.0 4.1 唐凤, a.k.a. Audrey Tang. How to Implement Perl 6 in '10. 2010-04-21 [2018-12-17]. (原始内容存档于2018-12-18). 
    5. ^ Perl 6 renamed to Raku. LWN.net. 15 October 2019 [16 October 2019]. (原始内容存档于2019-10-17). 
    6. ^ 日本的Perl社群名人——宮川達彥專訪。. [2020-01-21]. (原始内容存档于2018-11-10). 
    7. ^ 訪問Matz。. [2007-07-12]. (原始内容存档于2020-04-09). 
    8. ^ Larry Wall在命名Perl时,曾经想过使用Pearl作为名称,但发现已经有Pearl这个语言了,于是就成为Perl。
    9. ^ O'Reilly訪問Matz。. [2007-07-19]. (原始内容存档于2009-07-28). 
    10. ^ Larry Wall On Perl, Religion, and……. [2007-07-12]. (原始内容存档于2007-07-29). 

    外部链接[编辑]

    规格[编辑]

    实做[编辑]

    其他[编辑]