定義
Perl 6是電腦程式語言Perl語言的後續。
簡介
儘管提供了同Perl 5的兼容模式,由於Perl 6語言語法同Perl 5不同,因此,可以把她看作一種新的電腦程式語言。
Perl 6擁有豐富的現代語言特徵,作者計畫用重新定義正規表達式和增加函式式程式語言的特徵,使之成為可演化的語言。為保證Perl 6和Perl社區的持續穩定發展,Perl 6編譯器需要使用Perl 6來重寫,為保證Perl語言原有函式庫的重用,編譯器還計畫提供同Perl 5語言的兼容模式。
由於Perl 6語言的語法特徵和要求,Perl 6編譯器實現非常複雜,同時,開源社區的資源相對貧乏。因此,Perl 6編譯器的開發顯得相當緩慢。
和Ruby比較
一般都是認為Ruby vs. Python(可能是因為同樣採取縮排的設計),但是就一些相關的討論和訪談,Ruby vs. Perl 6的可能性反而是最大的。CPAN上排名第一名,同時也是Perl 6的開發者的唐鳳(Audrey)就這么說過:“Ruby就是‘沒有到處打廣告的Perl 6’”[1]。Ruby的創始者——松本行弘(まつもとゆきひろ/Yukihiro Matsumoto,Matz)在接受O'Reilly的訪問時[2],也提到“Ruby借用了很多Perl的東西……,Python遠比Perl要少……”。從Ruby的命名也可以看出Matz遠大的企圖心:“Pearl(珍珠)是六月的誕生石[3],而Ruby是七月的誕生石,我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。”
Perl之父拉里·沃爾(Larry Wall)在《Larry Wall On Perl, Religion, and……》[5]一文中表示:“很多方面上我還是很喜歡Ruby的,這是因為那些部分是從Perl借過去的。:-)”、“我還喜歡Ruby的C一元星號操作符,所以我把它加到Perl 6裡面。”
但是拉里·沃爾在文中也說:“Ruby的主要問題在於它的最少驚訝原則可能讓人誤入歧途,就好像隱藏式詞法範圍。問題在於減少誰的驚訝?專家和初學者對不同的事情驚訝。從一個小程式寫成大程式的人和從開始就寫大程式的人可能對不同的事情感到驚訝。”
Perl6的結構
摘要
源碼進入解釋器,解釋器產生一個語法樹(syntax tree)。
語法樹進入編譯器,編譯器產位元組碼(bytecode)。
位元組碼進入最佳化器(optimizer),最佳化器產生更多的(更好的)位元組碼。
Runtime然後來處理進入的位元組碼(可能是運行他,不過也有可能把他轉化為Java位元組碼,或.Net位元組碼,或可執行的Alpha 代碼(an alpha executable),或編碼的DNA序列)。
Source Code
+----------------+
|The Parser |
+----------------+
Syntax Tree
+-------------------+
|The Compiler |
+--------------------+
Bytecode
+---------------------------+
|Byteode Optimizer |
+---------------------------+
Better Bytecode
+------------+
|Runtime |
+------------+
計畫
解釋器將允許你改動這些規則。規則集(rule sets)定義了主要的語言(Perl, C, Python, Java, etc.),你能為其他的語言撰寫新的規則(比如,沒有$ @ %等符號的Perl)。
運行時引擎(the runtime engine)將會時一個基於暫存器的虛擬機(a register-based virtual machine),而perl5的虛擬機時基於棧的(stack-based)。
重寫(revisit)Perl的一個主要原因是要去修復混亂的XS(XS是指用C/C++子程式來擴展Perl)的方式。除了用來執行Perl的函式, Perl5沒有用於擴展的API,所以擴展Perl需要大量繁瑣的工作。Dan和Larry的目標是要使C擴展的使用儘可能的簡單(Brian Ingerson的出色的Perl5內聯模組為此指明一些方向)。所有使用過XS的人都等著他的滅亡。
Perl5被設計成這樣一種方式,那就是當有C的時候,他就能運行。近來,一些虛擬機(JVM, .NET)代替了C。所以,我們將看到,我們的自己的虛擬機不僅能在有C的時候運行,而且同樣能方便的將位元組碼輸入到其他的虛擬機。