摘要
源碼進入解釋器,解釋器產生一個語法樹(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的時候運行,而且同樣可以方便的將字節碼輸入到其他的虛擬機。