跳转到内容

Lua

轻之舟百科,让知识轻装启航

Lua(葡萄牙语原意为“月亮”)是一门轻量级、高效、可嵌入的脚本语言,由 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 于1993年在巴西里约热内卢天主教大学(PUC-Rio)的计算机图形技术组(Tecgraf)设计开发[1]。Lua 支持过程式、面向对象、函数式、数据驱动等多种编程范式,采用动态类型,以 ANSI C 实现,具有自动内存管理和基于寄存器的虚拟机,遵循 MIT 许可证发布[2][3]。其设计目标是作为宿主应用程序的扩展与脚本语言,以小巧、快速、可移植和易于嵌入著称,目前广泛应用于游戏开发、嵌入式系统及各类软件的脚本扩展[1]。

Lua
设计者Roberto Ierusalimschy
Waldemar Celes
Luiz Henrique de Figueiredo
首次发布1993年
发源地巴西里约热内卢天主教大学(Tecgraf)
编程范式多范式(过程式、面向对象、函数式等)
类型系统动态类型、强类型
实现语言ANSI C
许可证MIT
文件扩展名.lua
官方网站lua.org

Lua 诞生于1993年的 Tecgraf。当时该实验室为巴西石油公司等客户开发交互式图形软件,由于巴西在1977年至1992年间实行针对计算机软硬件的"市场保留"贸易保护政策,客户无法从国外购置定制软件,Tecgraf 因此自行开发了多种基础工具[1]。其中两门早期语言——数据录入语言 DEL(data-entry language)与简单对象语言 SOL(Simple Object Language)——逐渐超出原有用途,其用户需要更完整的控制流与过程式编程能力。1993年年中,三位设计者决定将两者合并为一门更强大的通用语言,Lua 由此诞生[1]。

Lua 之名来自葡萄牙语"月亮"(lua)。它延续了前代语言 SOL 的命名思路——SOL 意为"太阳",Tecgraf 的同事 Carlos Henrique Levy 建议以"月亮"(Lua)作为 SOL 后继语言的名称,这一双关在命名当天即被确定下来[1]。1993年7月,Waldemar Celes 完成了第一个实现,Lua 1.0 于1993年7月28日正式发布[1]。

此后 Lua 经历了持续而稳健的演进:Lua 2.1(1995年)引入 fallback 机制,Lua 3.0(1997年)以 tag method 取代之,Lua 5.0(2003年)引入元表(metatable)与寄存器式虚拟机,Lua 5.1(2006年)完善了模块与垃圾回收机制[1]。Lua 是发展中国家中唯一获得全球影响力的程序设计语言[1]。

Lua 被设计为一门可嵌入其他应用程序的扩展语言。它没有主程序的概念,通常作为库嵌入宿主程序中:宿主程序可以执行 Lua 代码、读写 Lua 变量、注册供 Lua 调用的 C 函数,从而在同一语法框架内定制语言行为[2]。Lua 以简洁的过程式语法结合基于关联数组的强大数据描述结构,核心数据结构仅有一种——表(table),它同时承担数组、哈希表乃至对象的角色,配合元表可实现面向对象编程[1]。

Lua 的官方实现刻意保持极小:Lua 5.1 的全部源码约17,000行 C 代码,包含全部标准库的独立解释器仅约143KB,可编译运行于几乎所有平台[1]。语言设计遵循"提供机制而非政策"(mechanisms, not policy)的原则,不强制任何对象或类模型,而由程序员依据应用需要自行构建[1]。Lua 的语法受到 Modula、CLU、C++、SNOBOL、AWK、Scheme 等语言的影响,具备词法闭包、协程(coroutine)和多返回值等特性[3]。

Lua 在游戏开发领域应用尤为广泛。大量知名游戏与平台使用 Lua 作为脚本语言,包括《魔兽世界》(World of Warcraft)、《Dota 2》、《Crysis》、《Garry's Mod》,以及 Roblox(后者在其基础上发展出方言 Luau)等[3]。在非游戏领域,Redis、nginx(通过 OpenResty)、Adobe Lightroom、Wireshark、Neovim 等软件也采用 Lua 进行扩展或脚本编写,其中 Adobe Lightroom 超过四成的代码由 Lua 编写[1]。

实现与衍生

[编辑 | 编辑源代码]

除 PUC-Rio 官方实现外,Lua 还存在多个重要实现与方言。LuaJIT 是最著名的第三方实现,采用即时编译(JIT)技术提供接近本地代码的执行性能;LuaVela、MoonSharp 等实现各有侧重[3]。Roblox 开发的 Luau 是 Lua 5.1 的渐进式方言,用于其平台的游戏创作[3]。此外,Lua 的语法与思想还影响了 Io、Julia、Ring、Squirrel 等语言[3]。

Lua 5.0 起采用 MIT 许可证,此前的版本使用类似 BSD 的许可证[1]。2006年发布的 Lua 5.1 是历史上应用最广的版本之一,LuaJIT 及众多嵌入式应用均基于该版本。Lua 5.4(2020年发布)引入了分代垃圾回收、整数类型等改进[2]。2025年12月发布的 Lua 5.5.0 在性能、内存占用及全局变量处理方面继续改进,同时保持与既有 Lua 代码的兼容性[4]。

参考文献

[编辑 | 编辑源代码]