鸚鵡虛擬機器/鸚鵡程式設計
外觀
< 鸚鵡虛擬機器
鸚鵡虛擬機器(PVM)可以使用多種語言、指令碼和技術進行程式設計。這種多功能性一開始可能會讓人感到困惑。以下是一些使用鸚鵡程式設計的方法
- 鸚鵡組合語言 (PASM)。這是為鸚鵡程式設計的最低人類可讀方式,與傳統的組合語言非常相似。
- 鸚鵡中間表示 (PIR)。這是一種比 PASM 更易於程式設計的高階語言,並且使用得更為普遍。
- 不完全的 Perl (NQP)。這是一個 Perl 6 語言的簡化部分實現,用於引導。它比 PIR 更高階,擁有 Perl 6 的許多功能和能力。目前,NQP 尚未完全實現,必須單獨編譯成位元組碼才能在 Parrot 上執行。
- 自定義語言。使用鸚鵡編譯器工具(PCT),可以輕鬆地在 Parrot 上實現新的動態語言。一旦為某種語言建立瞭解析器和庫,就可以使用該語言為 Parrot 進行程式設計。許多常見的程式語言,包括 Perl 6、Python 和 JavaScript (ECMAScript),正在 Parrot 上實現。我們將在後面的部分討論更多語言。
如上所述,有多種不同的方法可以為 Parrot 程式設計。然而,不同的程式設計方法需要不同的步驟。在這裡,我們將非常簡要地概述一些為 Parrot 程式設計的方法。
- PASM 和 PIR
- 用 PASM 或 PIR 編寫的程式,例如
Foo.pasm或Bar.pir,可以透過以下兩種方式之一執行。它們可以直接透過鍵入(在大多數 Windows 和 Unix/Linux 系統上)進行解釋
./parrot Foo.pasm
- 或
./parrot Bar.pir
- 這將以直譯器模式執行 Parrot。但是,我們可以使用以下標誌將這些程式編譯成 Parrot 位元組碼 (PBC)
./parrot -o Foo.pbc Foo.pir ./parrot -o Bar.pbc Bar.pir
- 當然,您可以隨意命名輸出檔案。一旦你擁有一個 PBC 檔案,你可以這樣執行它
./parrot Foo.pbc
- NQP
- NQP 必須使用 NQP 編譯器編譯成 PIR。它位於compilers/nqpParrot 儲存庫的目錄
- 高階語言
- 要在比 NQP 或 PIR 更高階的語言中為 Parrot 程式設計,例如 Perl 6、Python 或 Ruby,首先必須有一個可用的編譯器。例如,要執行檔案
Foo.pl(“.pl” 是 Perl 程式的副檔名),您將鍵入
./parrot languages/perl6/perl6.pbc Foo.pl
- 這會在 Parrot 上執行 Perl 6 編譯器,並將檔名
Foo.pl傳遞給編譯器。要將檔案輸出為 PIR 或 PBC,您將使用--target=選項指定輸出格式。
我們將在本書中經常使用的一個術語是“虛擬機器”,簡稱 VM。現在有必要討論一下 VM 到底是什麼。
在談論虛擬機器之前,讓我們先考慮一下實際的計算機硬體。在普通的計算機系統(本機)中,有一個微處理器負責接收指令並執行必要的操作。這些指令是用高階語言編寫的,並編譯成處理器使用的二進位制機器程式碼。問題在於不同型別的處理器使用不同的機器程式碼,為了使程式在不同的平臺上執行,需要為每個平臺重新編譯它。
與普通的計算機處理器不同,虛擬機器是用軟體而不是硬體構建的。虛擬機器是用高階語言編寫的,並像往常一樣編譯成機器程式碼。然而,在虛擬機器上執行的程式編譯成位元組碼而不是機器程式碼。這個位元組碼執行在虛擬機器之上,虛擬機器將其轉換成處理器指令。
以下表格總結了虛擬機器和本機之間一些重要的區別
| 本機 | 虛擬機器 | |
|---|---|---|
| 實現 | 硬體 | 軟體 |
| 執行速度 | 快 | 慢 |
| 本機機器程式碼程式設計 | 必須將每個程式編譯成本機機器程式碼 | 只需將虛擬機器編譯成本機機器程式碼,其他所有內容都轉換為位元組碼 |
| 可移植性 | 每個程式都必須在每個新的硬體平臺上重新編譯 | 程式只需編譯成位元組碼一次,就可以在安裝了 VM 的任何地方執行 |
| 可擴充套件性 | 不可能 | 虛擬機器可以隨著時間的推移進行改進、擴充套件、修補和新增 |