2010-10-01 21 views
7

經歷了幾個鏈接後,我才知道Perl會編譯並創建一箇中間字節代碼,然後解釋該字節代碼。 我的問題是該字節代碼駐留在哪裏?Perl在哪裏存儲其中間字節代碼?

和java,c一樣,我們可以在編譯後看到機器可執行的目標代碼。雖然Perl不會創建機器可執行代碼,但是應該有一些 位置用於臨時存儲字節代碼。

回答

18

編譯結果作爲操作碼樹或簡稱選項存儲在內存中。這個結構正在perl的運行時間裏執行你的程序。

您可能會發現"Compiled Code" section of perlguts有趣。它解釋了構建執行perl optree的許多細節。

也可以使用其中包含的B::C分佈和ByteLoader模塊將該選項寫入磁盤並將其重新加載到另一個perl進程中。但是,這種技術在許多程序中並不能很好地工作,所以不建議以任何方式。

+0

你碰巧知道如果解開命名空間丟棄操作代碼? – 2017-10-13 21:14:26

2

它將其作爲AST存儲在內存中。

+2

雖然有令人興奮的工作,主要由Gerard Goosen驅動,繼續爲perl提供一個抽象語法樹,但它目前還沒有。 – rafl 2010-10-01 13:22:14

+2

此外,爲什麼你需要一個字節碼AST? AST由於與_Syntax_有關,只與具有真正語法的語言有關,例如, Perl源代碼。 – MSalters 2010-10-01 13:41:45

+2

這僅適用於Perl 6.不適用於Perl 5.此外,AST不是*存儲*字節碼。這是什麼可以用來生成字節碼。 – dolmen 2010-10-01 15:35:35