跳轉到內容

Raku 程式設計/實現

來自華夏公益教科書,開放世界的開放書籍
Pugs
是第一個或多或少功能完整的 Raku 實現。它是由 Audrey Tang 使用 Haskell 語言編寫的。現在它主要具有歷史意義。
Niecza
一個使用 .net 框架實現的 Raku。
Rakudo
Raku 的領先高階實現。它是自託管的,這意味著它主要用 Raku 和 Raku 的子語言 nqp 編寫。它針對多個程序虛擬機器:Parrot、JVM、MoarVM,以及不久的將來可能還有其他一些(JavaScript、Lua 等)。

截至 2014 年 4 月,在 MoarVM 上執行的 Rakudo 是最有希望的實現。它完全是免費的開源軟體,使用專門為 Raku 設計的 VM。


Pugs 和 Parrot

[編輯 | 編輯原始碼]

經過一段時間的語言設計後,是時候開始建立新語言的實現了。為了避免 Perl 的問題,最初的組織者決定在後端執行引擎和前端語言解析器之間建立更好的分離。經過多次討論,Parrot 虛擬機器 專案啟動,目的是為像 Raku 這樣的動態語言建立一個虛擬機器。Parrot 迅速發展,不再依賴 Raku,而是選擇成為所有動態語言的虛擬機器。由於 Raku 規模龐大且雄心勃勃,任何能夠支援它的虛擬機器也能夠很好地支援許多其他動態語言。

Perl 駭客 Audrey Tang 使用 Haskell 程式語言編寫了一個 Raku 的參考實現。這個實現被稱為 Pugs,它作為語言設計師開發的許多想法的測試平臺。來自 Pugs 團隊的反饋幫助塑造了語言設計,而語言設計的變化導致了 Pugs 的修改。這是一種有用且有益的關係,尤其是在當時沒有其他實現處於如此高的開發狀態的情況下。

STD.pm、STD_blue 和 ELF

[編輯 | 編輯原始碼]

Raku 的“官方”語法將用 Raku 本身編寫。這是因為 Raku 被設計成擁有當時任何現有語言中最先進的語法引擎之一。對於如此先進的語言,沒有比它本身更好的語法實現選擇。STD.pm 被建立為標準的 Raku 語法,並且在各種實現出現衝突時仍然被引用。

STD_red 是使用 Ruby 程式語言實現的 Raku 語法。STD_blue 是一個用 Perl 編寫的、更新的 STD.pm 編譯器。

ELF 是一個引導式的 Raku 實現,它使用 STD_blue 將 Raku 程式碼編譯成 Perl 程式碼以供執行。

然而,當 Audrey Tang 離開 Pugs 專案後,它的開發降至最低。它仍然對測試和參考有用,但 Pugs 不再是曾經的活躍開發平臺。但是,Parrot 從那時起有了長足的發展,並最終準備好開始支援高階語言的編譯器。一個名為“Rakudo”的 Raku 專案啟動,並開始迅速發展。Rakudo 專案的一部分是 Patrick Michaud 建立的高階解析器工具,稱為 PCT(“Parrot 編譯器工具”)。PCT 是一種類似於低階 Flex 和 Bison 工具的解析器生成工具。然而,PCT 使用 Raku 語言的一個子集來編寫解析器,而不是使用 C 或 C++。這意味著 Rakudo 正在成為自託管:Rakudo 編譯器本身部分用 Raku 編寫。

有關 Rakudo 的更多資訊,請訪問 http://www.rakudo.org

華夏公益教科書