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的創始人——松本幸宏(まつもとゆきひろ/,Matz)在接受O'Reilly采訪時也提到“Ruby從Perl借鑒了很多...從紅寶石的命名也可以看出馬茨的遠大誌向:“珍珠是六月的誕生石[3],而紅寶石是七月的誕生石。我認為Ruby這個名字作為Perl之後的壹種語言的名字確實很合適。"
Perl之父拉裏·沃爾在文章《拉裏·沃爾論Perl、宗教和……》中說[5]:“我在很多方面還是喜歡Ruby的,因為那些部分都是借用Perl的。:-)”“我也喜歡Ruby的C
但拉裏·沃爾也在文章中說:“Ruby的主要問題是,它的最小驚奇原則可能會把人引入歧途,就像隱藏的詞法範圍壹樣。問題是減少誰的驚喜?專家和初學者對不同的事情感到驚訝。從小程序寫大程序的人和從頭寫大程序的人,可能會對不同的東西感到驚訝。”
Perl6的結構
摘要
源代碼進入解釋器,解釋器生成語法樹。
語法樹進入編譯器,編譯器產生字節碼。
字節碼進入優化器,優化器生成更多(更好)的字節碼。
然後運行時處理傳入的字節碼(它可能運行它,但也可能將其轉換成Java字節碼,或者。Net字節碼,或者Alpha可執行文件,或者編碼的DNA序列)。
源代碼
+ - +
|解析器|
+ - +
語法樹
+ - +
|編譯器|
+ - +
字節碼
+ - +
|字節碼優化器|
+ - +
更好的字節碼
+ - +
|運行時間|
+ - +
計劃
解釋器將允許妳改變這些規則。規則集定義了主要的語言(Perl、C、Python、Java等。),並且可以為其他語言編寫新的規則(比如沒有$ @%)的Perl。
運行時引擎將是基於寄存器的虛擬機,而perl5的虛擬機將是基於堆棧的。
重寫Perl的主要原因之壹是修復混亂的XS(XS指的是用C/C++子程序擴展Perl)。除了用於執行Perl的函數,Perl5沒有用於擴展的API,因此擴展Perl需要大量繁瑣的工作。Dan和Larry的目標是盡可能簡單地使用C擴展(Brian Ingerson出色的Perl5內聯模塊為此指出了壹些方向)。每個利用過XS的人都在等待他的死亡。
Perl5是這樣設計的,有c就能運行,最近壹些虛擬機(JVM,。NET)都取代了C,因此,我們會看到自己的虛擬機不僅可以在有C的時候運行,還可以方便地將字節碼輸入到其他虛擬機中。