跳轉到內容

Parrot 虛擬機器/高階語言互操作性

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

高階語言互操作性

[編輯 | 編輯原始碼]

Parrot 的設計不僅僅是為了 Perl6,儘管這最初是主要的推動力之一。Parrot 被設計和實現為所有動態程式語言(甚至一些靜態型別語言)的虛擬機器。最終目標是能夠將用各種語言編寫的工具和庫組合在一起,並允許開發人員使用對該專案最有意義的語言編寫專案的不同部分。

Parrot 使互操作性變得容易,但最終責任在於語言設計者確保他們的語言與其他語言良好地協同工作。

.HLL 名稱空間

[編輯 | 編輯原始碼]

共享資料

[編輯 | 編輯原始碼]

Vtables:標準介面

[編輯 | 編輯原始碼]

所有 PMC 物件都實現了標準 vtable 函式,這些函式是處理外來或奇異資料型別的首要介面。如果您從通用 LISP 收到一個 Ratio 物件,您可能不知道它的方法是什麼,或者當您從 Perl 6 使用它時,它的內部儲存結構是什麼。但是,透過呼叫標準 vtable 方法,您可以以簡單的方式與之互動。

.HLL_map PMC 對映

[編輯 | 編輯原始碼]

共享函式

[編輯 | 編輯原始碼]

多方法

[編輯 | 編輯原始碼]

與許多現代程式語言一樣,Parrot 允許函式名過載。被稱為多方法分派 (MMD),Parrot 的函式呼叫系統非常強大和靈活。在 MMD 系統中,單個名稱空間中的多個函式可以具有相同的名稱,只要它們的呼叫簽名不同即可。呼叫簽名指定函式期望的引數數量和型別以及返回值。如果我們呼叫一個函式

(a, b, c, d) = Foo(x, y, z)

Parrot 僅在 Foo 具有三個輸入和四個輸出時才呼叫它。多重分派不僅用於函式,還用於操作碼。程式(或者更可能是 HLL)可以新增與現有操作碼同名的新的操作碼,只要它使用不同的函式簽名即可。這提供了一種非常強大和靈活的方法來定製您的系統。

我們將在後面的章節中詳細介紹 MMD。

轉換介面

[編輯 | 編輯原始碼]

包含某種轉換介面的想法,這些函式將自動將來自一種 HLL 的呼叫轉換為對另一種 HLL 的適當呼叫,對一些開發人員很有吸引力。但是,這將產生很大的開發成本,因為對於 n 種語言,我們將需要 個介面來翻譯到和從所有這些介面進行翻譯。由於這種額外的複雜性成本,不建議使用介面來處理資料或函式共享。

語言開發人員可以做的最重要的事情是記錄他們的介面。記錄函式期望的資料型別以及它返回的資料型別非常重要。這樣,從不同語言使用這些庫的人就知道如何與這些函式和物件互動。

此外,文件可能會將某些函式或物件暴露為過於難以重用。這將有助於阻止開發人員使用複雜的介面。它還有助於向庫設計者揭示簡化其庫的方法。


華夏公益教科書