Perl6的結構

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- Perl6的結構 (http://www.webasp.net/article/8/7714.htm)
-- 作者:未知
-- 發佈日期: 2003-09-13
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的時候運行,而且同樣可以方便的將字節碼輸入到其他的虛擬機。

webasp.net