跳轉到內容

鸚鵡虛擬機器/執行鸚鵡

來自華夏公益教科書,開放的世界,開放的書籍

執行鸚鵡

[編輯 | 編輯原始碼]

鸚鵡可以透過命令列以多種模式和不同的選項執行。鸚鵡可以直接處理三種形式的輸入:鸚鵡組合語言 (PASM),它是虛擬機器的一種低階人類可讀組合語言,鸚鵡中間表示 (PIR),它是 PASM 的語法覆蓋,對某些表示式具有更好的語法,以及鸚鵡位元組碼 (PBC),它是一種編譯後的二進位制輸入格式。

在正常執行期間,PIR 和 PASM 會被轉換為 PBC。只有 PBC 可以被鸚鵡直接執行。將 PIR 或 PASM 轉換為 PBC 的編譯階段需要一些時間,並且可以單獨完成。我們稍後將討論這些過程。

鸚鵡資訊

[編輯 | 編輯原始碼]

要獲取有關當前鸚鵡版本的的資訊,請鍵入

parrot -V

要獲取命令列選項及其用途的列表,請鍵入

parrot -h

我們將在本書的後面討論所有不同的命令列選項,但當出現問題時,擁有多個資源總是有好處的。

檔案型別

[編輯 | 編輯原始碼]

.pbc 結尾的檔案被視為鸚鵡位元組碼檔案,並立即執行。以 .pir.pasm 結尾的檔案分別被視為 PIR 或 PASM 原始碼檔案,並被解釋。要將 PIR 或 PASM 編譯成位元組碼,請使用 -o 開關,如下所示

parrot -o output.pbc input.pir

或者

parrot -o output.pbc input.pasm

請注意,如果我們使用 .pasm 副檔名,我們可以輸出到 PASM 而不是 PBC

parrot -o output.pasm input.pir

要即使輸出檔案沒有 .pbc 副檔名也要強制輸出 PBC,請使用 --output-pbc 開關。要生成 PBC 檔案後執行它,請使用 -r 開關。

要強制將檔案作為 PASM 執行,無論副檔名如何,請使用 -a 開關。

要強制將檔案作為 PBC 檔案執行,無論副檔名如何,請使用 -c 開關。

執行時選項

[編輯 | 編輯原始碼]

鸚鵡也可以使用許多額外的選項執行。

最佳化

[編輯 | 編輯原始碼]

最佳化可能需要時間才能執行,但會提高生成的程式的執行速度。對於簡單的程式,短而粗糙的一次性程式,廣泛的最佳化可能沒有太大意義。你花在最佳化軟體上的時間甚至會超過你執行它的時間。然而,對於經常執行的程式,或者非常大的程式,或者必須以良好的效能連續執行的程式,最佳化可能是一件有價值的事情。用最佳化編譯一個程式,並可以將輸出最佳化的位元組碼儲存到磁碟,無需再次最佳化(除非鸚鵡集成了更好的最佳化)。

鸚鵡有多種最佳化選項,具體取決於要執行的最佳化的範圍。每個選項都可以使用不同的命令列開關啟用,形式為 -Ox,其中 x 是一個表示要執行的最佳化型別的字元

標誌 描述
-O0 無最佳化,這是預設模式
-O1-O 不使用生命資訊最佳化(例如分支)
-O2 使用生命資訊最佳化
-Op 將最常使用的 I 和 N PASM 暫存器重寫為最先使用
-Ot 選擇最快的執行核心(預設使用 -O1 和 -O2)
-Oc 開啟可選/實驗性的尾呼叫最佳化

生命資訊 是一個分析步驟,其中程式碼和資料被跟蹤以確定控制流模式和區域性變數的生命週期。瞭解某些變數使用和不使用的區域,可以使暫存器得到重複使用,而不是必須分配新的暫存器。瞭解某些程式碼何時無法到達 使最佳化器能夠完全忽略它。

執行核心

[編輯 | 編輯原始碼]

執行核心是鸚鵡程式的中心迴圈,並且有幾個不同的執行核心可用,它們指定了鸚鵡的效能和功能。執行核心決定鸚鵡如何執行傳遞到直譯器中的位元組碼指令。執行核心可以執行某些任務,例如邊界檢查、測試或除錯。其他執行核心經過最佳化以非常快地執行。有關各種核心的實現細節,請參閱 src/runops_cores.c

可以透過在命令列傳遞特定的開關來啟用不同的核心。以下部分將討論各種執行核心,它們的作用、工作原理以及如何啟用它們。

基本核心

[編輯 | 編輯原始碼]

慢速核心

[編輯 | 編輯原始碼]

預設的“慢速”核心將所有操作視為單個 C 函式。每個函式都被呼叫,並返回下一條指令操作的地址。許多核心,例如跟蹤和除錯核心,都是基於慢速核心設計。

快速核心

[編輯 | 編輯原始碼]

快速核心是一個基本核心,不執行任何特殊操作,例如跟蹤、除錯或邊界檢查。

計算 goto 核心

[編輯 | 編輯原始碼]

計算 goto 是某些編譯器的一項功能,它允許 goto 指令的目標是一個包含標籤地址的變數,而不一定是直接到標籤。透過將所有標籤的地址快取到一個數組中,可以直接跳轉到必要的指令。這避免了多次子例程呼叫的開銷,並且在支援它的平臺上可以非常快。有關計算 goto 執行核心工作原理的更多資訊,請參閱生成的 src/ops/core_ops_cg.c 檔案。

Switch 核心

[編輯 | 編輯原始碼]

Switch 核心使用標準 C switchcase 結構來選擇要執行的下一個操作。在每次迭代中,都會執行一個 switch,每個 case 代表一個操作。在執行操作後,控制流跳轉回 switch 的頂部,迴圈重複。

Switch 語句,尤其是那些使用許多連續值的語句,通常會被編譯器轉換為跳轉表,這些跳轉表執行起來與計算 goto 跳轉非常相似。

變體核心

[編輯 | 編輯原始碼]

以上核心是其他專用核心的基本設計。

mod_parrot

[編輯 | 編輯原始碼]

Parrot 團隊的一些成員為 Apache Web 伺服器開發了一個擴充套件,允許使用 Parrot 來生成伺服器端內容。這項工作的結果是 mod_parrot,它可以用於使用 PIR 或 PASM 生成網站。這本身用途有限。但是,mod_parrot 允許為目標為 Parrot 的語言建立額外的模組。一個著名的此類模組,mod_perl6 是一個位元組碼模組,它執行在 mod_parrot 之上。

有關 mod_parrot 的更多資訊,請訪問其網站:http://www.parrot.org/mod_parrot


上一頁 鸚鵡虛擬機器 下一頁
Building_Parrot Parrot_Programming
華夏公益教科書