LuaDirectory > LuaAddons > 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 翻译器),可以单独重用,用 Lua 通过 gg 解析器翻译器(用 Lua 实现)实现,该翻译器部分基于 Yueliang。
- 另请参阅 LuaCompilerInLua、LuaInterpreterInLua、StringLibraryInLua
- Java
- [Kahlua][25] (5.1) - 在 Java J2ME (CLDC 1.1) 中为 (Lua 的一个子集) 提供虚拟机和编译器。用 Java 实现,也运行在 J2SE 和 J2EE 上。VM 解释标准 Lua 字节码。使用 Java 的垃圾回收[2]。 [差异] 编译器从 LuaJ 分叉。
- [Mochalua] (5.1) - 移植到 Java J2ME CLDC 1.1 的 Lua 虚拟机、库和 API [26]。VM 解释标准 Lua 字节码。
- [LuaJ] (5.1, 5.2) - 为 J2ME 和 J2SE 编写的轻量级、快速的以 Java 为中心的 Lua 解释器,包括用于基本、字符串、表、包、数学、协程包的库,一个可选的编译器,luajava 绑定,以及 [JSR-223] 可插拔脚本引擎绑定。 [LuaJ 主页]
- [Rembulan] (5.3) - 为 JVM 提供的 Lua 5.3 的全新实现,依赖项最少(需要 JDK 7+)。编译为 Java 字节码。实现轻量级协程,允许执行时间限制。
- [LuaJava] (5.1) - LuaJava? 是一个基于 JNI 的 Java 脚本工具(使用 Lua 5.1.1 二进制文件)。
- [JNLua] (5.1, 5.2) - Lua C 代码使用 Java 本地接口 (JNI) 集成到 Java 中。 [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] 注意:链接在 14/10/13 失效 - (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) Lua 5.2 的纯 C# 实现,专注于与 Unity3D 的兼容性。
- [NLua] - (5.1.5/5.2.2) C# 实现与原生绑定的混合,兼容 .NET/iOS/Android/WinPhone ?。
- [NeoLua] - NeoLua ?,用于动态语言运行时 (DLR) 的 Lua 5.2 实现。
- [Moon#] - Moon#,一个完全用 C# 编写的 Lua 5.2 实现,适用于 .NET 3.5/Mono 2.6 及更高版本。
- [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 实现(基于 Metalua 的 Lua 实现的解析器)。
- [luac2c] (5.1) - 将 Lua 字节码转换为 C API 调用。用 Lua 实现。
- Java
Script
- Action
Script - 包含在 Flash 中的 Java
Script 变体。
- [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(Flash 变体的 Java
Script)实现的标准 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)。
- PlutoScript[17]
- Agena[18][30] - 基于 Lua C 源代码,但语法差异很大
- Idle[19]
- Dao[20][31][32]
- [LuaPlus] - 基于 5.0 版本,不再维护
- Bright[21][22] - 更类似于 C 的语法,基于 Lua 4.0,不再维护
- Squirrel[23]
- [SquiLu] - Squirrel 和 Lua 的混合,试图将两者最好的部分结合起来。
- Objective Lua[24]
- Python: [tinypy] - 用 Lua 风格编写的小型 Python 子集(但不是基于 Lua 代码)。
- MetaLua - 为 Lua 带来了编译时元编程。 编译为标准 Lua 5.1 字节码。
- [Killa]: 一种基于 Lua 5.2 的脚本语言,具有类似 JavaScript? 的语法
- [Ravi] - Lua 5.3 的修改版本,具有可选的静态类型和 JIT 编译。
- [Jual] - 基于 Lua 5.3 的 VM,具有类似 JavaScript? 的语法,并且与 Lua 5.3 的字节码兼容
- [LJS] - 基于 Lua 5.3 的 VM,具有类似 JavaScript? 的语法,与 Lua 5.3 的字节码兼容;Killa、Jual 等的混合
- [LJSJIT] - 基于 LuaJIT 2.1.0-beta3 的 VM,具有类似 JavaScript? 的语法,与 Lua 5.1 的字节码兼容;Killa、Jual 等的混合
- [Luau] - 基于 Lua 5.1 的开源语言,针对 Roblox 多人游戏平台的需求进行了调整。
Lua 测试套件
有关用于检查 Lua 实现正确性的测试套件,请参见 单元测试。
另请参见
- Lua 分发版 / Lua 二进制文件 - 这些是 Lua 在不同平台上的编译或改编版本。它们与上述不同之处在于,它们不是 Lua 的完整重新实现,而是对 Lua 源代码进行了微小或没有更改。
最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2023 年 8 月 14 日下午 11:23 GMT (差异)