Lua 目錄 > Lua 附加套件 > Lua
實作
Lua 有數個重新實作的版本。這是因為 Lua 非常簡潔。
Lua 編譯器和直譯器的重新實作:(依目標/主機平台排序)
- ANSI C/Lua 位元組碼
- [Lua](5.1/5.2/5.3)- 將 Lua 原始碼編譯為標準 Lua 位元組碼。Lua VM 會直譯 Lua 位元組碼。使用 ANSI C 實作。這是 Lua 的標準參考實作。非常強大。
- x86、x64、ARM、PPC、MIPS
- [LuaJIT](5.1)- Lua 5.1 的即時(JIT)編譯器。效能好很多 [1]。
- [LJX](5.1/5.2/5.3)- LuaJIT 2.1-beta2 實驗性分支,新增 Lua 5.2(例如表格的 __gc、_ENV)和 5.3(位元運算子)的原生語言語意。包括版本之間的跨相容性。
- LLVM(JIT)
- LlvmLua(5.1)- 將 Lua 位元組碼轉換為 LLVM IR 碼。同時支援 JIT 和靜態編譯。僅限於 LLVM 支援的 CPU。使用 C/C++ 實作。
- Lua
- [Yueliang](5.1/5.0)- 將 Lua 原始碼編譯為標準 Lua 位元組碼。使用 Lua 實作。這是個無腦移植,但它也包含對剖析/詞法分析器的更多原生樣式移植(可選擇)。
- [FiOne](5.1)- 在 Lua 中實作的 Lua 5.1 VM。實作 VM 直譯器,但對資料類型和標準函式庫函式再利用主機 Lua 環境。清單上最快的 Lua 位元組碼直譯器。需要 bit 和/或 bit32 函式庫才能作用。修正了閉包和其他操作碼的幾個臭蟲。
- [LuLu](5.1)- 在 Lua 中實作的 Lua 5.1 VM。實作 VM 直譯器和慣用函式庫,但對資料類型和標準函式庫函式再利用主機 Lua 環境。閉包中含有 nil 引數時會有臭蟲。
- [LBI](5.1)- 在 Lua 中實作的 Lua 5.1 VM。實作 VM 直譯器,但對資料類型和標準函式庫函式再利用主機 Lua 環境。閉包中含有 nil 引數時會有臭蟲。不會清除閉包堆疊,導致行為異常。
- [FiThree](5.3)- 在 Lua 中實作的 Lua 5.3 VM。實作 VM 直譯器,但對資料類型和標準函式庫函式再利用主機 Lua 環境。需要 bit 和/或 bit32 函式庫才能作用。
- [Metalua](5.1)- 編譯 Lua 的超集,支援 Lisp 風格巨集和語法延伸,轉譯為標準 Lua 位元組碼。使用 Lua 實作(含一些 C)。剖析器(原始碼-> AST 轉譯器)可分開再利用,透過 gg 剖析器轉譯器(使用 Lua 實作)在 Lua 中實作,而此轉譯器部分建構在 Yueliang 的基礎上。
- 請參閱 LuaCompilerInLua、LuaInterpreterInLua、StringLibraryInLua
- Java
- [Kahlua][25] (5.1) - 實作於 Java J2ME (CLDC 1.1) 中的 Lua (子集) 虛擬機器和編譯器。實作於 Java 中,也可以執行於 J2SE 和 J2EE 中。VM 解釋標準 Lua 位元組碼。使用 Java 的垃圾回收[2]。與一般 Lua [相異處]。編譯器源於 LuaJ。
- [Mochalua] (5.1) - 移植至 Java J2ME CLDC 1.1 的 Lua 虛擬機器、函式庫及 API [26]。VM 解釋標準 Lua 位元組碼。
- [LuaJ] (5.1、5.2) - 輕巧、適用於 Java 的 Lua 解譯器,適用於 J2ME 和 J2SE,包含 basic、string、table、package、math、coroutine 套件的函式庫、可選編譯器、luajava 繫結,以及 [JSR-223] 可選腳本引擎繫結。[LuaJ 首頁]
- [Rembulan] (5.3) - 為 JVM 實作 Lua 5.3 的淨室實作,具備最低程度的相依性 (需 JDK 7+)。編譯成 Java 位元組碼。實作輕量級的協同常式,允許執行時間限制。
- [LuaJava] (5.1) - LuaJava? 是用於 Java 的腳本工具,基於 JNI (使用 Lua 5.1.1 二進位檔)。
- [JNLua] (5.1、5.2) - 將 Lua C 程式碼整合至 Java 中,使用 Java 原生 API (JNI)。[JSR-223] 可選腳本引擎繫結。
- [Jill] (5.1) - Lua 語言的 Java 實作。原本為商業合約下的產品,現已開放原始碼。VM、編譯器、API 和函式庫執行於 JME CLDC 1.1。VM 解釋標準 Lua 位元組碼。函式庫的存在依 CLDC 的支援程度而定 (不含 io.*,而 math.* 較精簡)。也能夠於 JSE 上執行。33 個類別。
- [hklib] (5.3) - Java 中的 Lua 解譯器實作,有強健的 Lua-Java 橋接,以及多樣的 Lua 環境自訂功能,但沒有除錯或套件函式庫。也包含一個簡單的 Java 函式庫。任何函式庫都可以很容易地使用 Java 實作並載入 Lua 環境中。
- 較舊版本:[JLua] [jua]
- .NET
- [LuaCLR] - (5.1) 將 Lua 原始碼編譯成 .NET CLR。實作於 Lua 中。
- [Lua2IL] 注意:連結於 14/10/13 失效- (5.0) 將 Lua 5.0 位元組碼轉換成 .NET CLR (IL 指令)。這是 LuaCLR 的前身。[3] (更正:轉譯器用什麼實作?)
- [Nua] (5.1) - 編譯 Lua 原始碼至 .NET 動態語言執行時期 (DLR)。使用 C# 實作。[4]
- [XNua] 注意事項:連結失效 2013/10/14 - (5.1)。編譯 Lua 原始碼至 .NET 位元組碼 (特別是 Xbox 360)。使用 C# 實作。使用 .NET 的垃圾回收機制[5],並有其他相異點/限制[6]。
- [Kopi Lua] - (5.1) 將 Lua 原始碼(編譯器、VM、GC、函式庫等)從頭到尾移植至 C# 的程式碼。位元組碼和 C 版本相容。
- [SharpLua] - 一套以 Lua 5.1.5 為基礎,並使用 C# 實作的 Lua 解譯器。
- [AluminumLua] - 「一款以 C# 編寫的快速、輕量的 Lua 程式腳本引擎。」
- [Quorra] - 旨於在 .NET/Mono 中提供與 Lua 完整的運作功能和相容性。
- [UniLua] - (5.2) 一套純 C# 實作的 Lua 5.2,專注於與 Unity3D 的相容性。
- [NLua] - (5.1.5/5.2.2) 將 C# 實作與原生繫結相結合,相容於 .NET/iOS/Android/WinPhone?。
- [NeoLua] - NeoLua?,一種為動態語言執行時期 (DLR) 所設計的 Lua 5.2 實作。
- [Moon#] - Moon#,一款使用 C# 編寫、供 .NET 3.5/Mono 2.6 及後續版本使用的 Lua 5.2 實作。
- [LunaRoad] - Lua C API(v5.1、5.2、5.3 等)供 .NET 使用;代表了一種彈性的平台,可與 Lua 一同執行工作。提供 Lua 介面、Lambda 運算式、以及用於在執行期間自動產生新的 API 層的動態功能等等。活躍於 2016 年。
-
- Parrot VM
- C API
- LuaToCee (5.1) - 將 Lua 原始碼轉換為 C API 呼叫。使用 Lua 實作(基於使用 Lua 實作的 Metalua 的剖析器)。
- [luac2c] (5.1) - 將 Lua 位元組碼轉換為 C API 呼叫。使用 Lua 實作。
- Java
Script
- Action
Script - Java
Script 的變體包含在 Flash 中。
- [flua] (5.0) 注意:連結在 14/10/13 消失 - Action
Script 中的 Lua 5.0 VM。VM 解釋標準 Lua 位元組碼。以 Action
Script 實作。 - [lua-alchemy][Lua under Alchemy][29] (5.1) - 以 Action
Script (Java
Script 的 Flash 變體) 實作的標準 Lua 5.1 編譯器和 VM,在 .swc 檔案中含有內嵌的 AVM2 位元組碼。此 .swc 是使用 Alchemy[10][11] 從標準 Lua 來源機器翻譯而來,Alchemy 是 LLVM[12] 的後端。(因此,這不是手動重新實作而是有趣的機器翻譯。) [範例:Phyzios] - [lua.js] - 直接將 Lua 程式碼轉換為 ECMAscript 或 Action
Script。
- Leonardo VM
- OCaml
- [Lua-ML] (2.5) - Lua 2.5 解譯器。以 Objective Caml 實作。
- Erlang
- Go
僅重新實作 Lua 詞法分析器或解析器 (沒有程式碼產生器或 VM)
與標準 Lua 連結
Lua 中實作的其他程式語言
基於 Lua 的程式語言
這些程式語言基於 Lua 實作(例如經過調整的 VM)。
Lua 測試套件
對於用於檢查 Lua 實作正確性的測試套件,請參閱 單元測試。
請參閱
近期變更 · 喜好設定
編輯 · 歷史
最後編輯於 2023 年 8 月 15 日凌晨 11:23 GMT (diff)