云云​(留言 | 贡献)
创建页面,内容为“ Lua(发音:/ˈluːə/,葡萄牙语意为"月亮")是一种轻量级、多范型的脚本编程语言,由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro, PUC-Rio)的Roberto Ierusalimschy、Waldemar Celes与Luiz Henrique de Figueiredo于1993年设计开发。<ref name=":0">[https://www.lua.org/about.html About Lua]</ref><ref name=":1">[https://en.wikipedia.org/wiki/Lua_(programming_language) Lua (pr…”
 
云云​(留言 | 贡献)
完全重写
 
第1行: 第1行:
 
Lua(葡萄牙语原意为“月亮”)是一门轻量级、高效、可嵌入的脚本语言,由 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 于1993年在巴西里约热内卢天主教大学(PUC-Rio)的[[计算机]]图形技术组(Tecgraf)设计开发<ref name=":0">[https://www.lua.org/doc/hopl.pdf Ierusalimschy, R.; de Figueiredo, L. H.; Celes, W. "The Evolution of Lua". ACM HOPL III, 2007]</ref>。Lua 支持过程式、面向对象、函数式、[[数据]]驱动等多种[[编程]]范式,采用动态类型,以 ANSI C 实现,具有自动内存管理和基于寄存器的虚拟机,遵循 [[MIT 许可证]]发布<ref name=":1">[https://www.lua.org/manual/5.4/manual.html Lua 5.4 参考手册. lua.org]</ref><ref name=":2">[https://en.wikipedia.org/wiki/Lua Lua (programming language). Wikipedia]</ref>。其设计目标是作为宿主应用程序的扩展与脚本语言,以小巧、快速、可移植和易于嵌入著称,目前广泛应用于游戏开发、嵌入式系统及各类[[软件]]的脚本扩展<ref name=":0" />。
 
   
Lua(发音:/ˈluːə/,葡萄牙语意为"月亮")是一种轻量级、多范型的脚本编程语言,由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro, PUC-Rio)的Roberto Ierusalimschy、Waldemar Celes与Luiz Henrique de Figueiredo于1993年设计开发。<ref name=":0">[https://www.lua.org/about.html About Lua]</ref><ref name=":1">[https://en.wikipedia.org/wiki/Lua_(programming_language) Lua (programming language) - Wikipedia]</ref> 该语言以可嵌入性、简洁语法与高效执行著称,核心解释器以ANSI C编写,遵循MIT许可证发布,具备跨平台能力。<ref name=":0" /><ref name=":1" /> Lua被广泛应用于游戏开发、嵌入式系统、Web服务器及数据库脚本等领域,其设计哲学强调通过少量核心机制提供强大的扩展能力。<ref name=":1" />


{| style="float:right; width:22em; margin:0 0 1em 1em; border:1px solid #a2a9b1; background:#f8f9fa; padding:0.5em; font-size:90%;"
{{Infobox
! colspan="2" style="text-align:center; font-size:120%; background:#e6e6e6;" | Lua
|title        = Lua
|-
|image        =  
! [[编程]]范型
|caption      =
| 多范型:过程式、函数式、面向对象、[[数据]]驱动、反射
 
|-
|label1  = 设计者
! 设计者
|data1  = Roberto Ierusalimschy<br>Waldemar Celes<br>Luiz Henrique de Figueiredo
| Roberto Ierusalimschy<br/>Waldemar Celes<br/>Luiz Henrique de Figueiredo
|label2  = 首次发布
|-
|data2  = 1993年
! 首次出现
|label3  = 发源地
| 1993年
|data3  = 巴西里约热内卢天主教大学(Tecgraf)
|-
|label4  = 编程范式
! 稳定版本
|data4  = 多范式(过程式、面向对象、函数式等)
| 5.4.7(2024年7月11日)
|label5  = 类型系统
|-
|data5  = 动态类型、强类型
! 类型系统
|label6  = 实现语言
| 动态类型、强类型、[[鸭]]子类型
|data6  = ANSI C
|-
|label7  = 许可证
! 实现语言
|data7  = MIT
| ANSI C
|label8  = 文件扩展名
|-
|data8  = .lua
! [[操作系统]]
|label9  = 官方网站
| [[跨平台]]
|data9  = [https://www.lua.org lua.org]
|-
}}
! 许可证
| [[MIT]] License
|-
! 文件扩展名
| .lua
|-
! 官方网站
| www.lua.org
|-
! 主要实现
| Lua、LuaJIT
|-
! 受影响语言
| [[C++]]、CLU、Modula、Scheme、SNOBOL
|-
! 影响语言
| [[Java]]Script、Julia、Ruby、Squirrel、MoonScript
|}


== 历史 ==
== 历史 ==


=== 起源 ===
Lua 诞生于1993年的 Tecgraf。当时该实验室为巴西石油公司等客户开发交互式图形软件,由于巴西在1977年至1992年间实行针对计算机软硬件的"市场保留"贸易保护政策,客户无法从国外购置定制软件,Tecgraf 因此自行开发了多种基础工具<ref name=":0" />。其中两门早期语言——数据录入语言 DEL([[data]]-entry language)与简单对象语言 SOL(Simple Object Language)——逐渐超出原有用途,其[[用户]]需要更完整的控制流与过程式编程能力。1993年年中,三位设计者决定将两者合并为一门更强大的通用语言,Lua 由此诞生<ref name=":0" />。
Lua诞生于1993年,其开发工作始于巴西里约热内卢天主教大学(PUC-Rio)的[[计算机]]图形技术组(Tecgraf)。<ref name=":2">[https://www.codeporting.ai/language/lua/ Programming Language Lua - CodePorting]</ref> 该项目的三位主要创始人——Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo——最初旨在创建一种可嵌入的扩展语言,以满足日益增长的[[软件]]定制化需求。<ref name=":1" /> Lua的设计直接受到了此前为巴西石油公司(Petrobras)开发的SOL(Simple Object Language)和DEL(Data-Entry Language)两种语言的影响。<ref name=":3">[https://articles.opexflow.com/en/programming/lua.htm Lua programming, trading robots and scripts for trading]</ref>
 
=== 版本演进 ===
Lua 1.0于1993年正式发布,确立了其作为轻量级嵌入式脚本语言的定位。<ref name=":2" /> 随后的2.x与3.x系列逐步引入了元表、改进的垃圾回收等机制,持续增强语言的扩展能力。<ref name=":1" /> Lua 5.0(2003年)带来了基于寄存器的虚拟机等重大[[架构]]变革。<ref name=":1" /> 2006年发布的Lua 5.1引入了标准化的模块加载机制,成为长期广泛应用的版本。<ref name=":2" /> Lua 5.3(2015年)增加了独立的整数类型和位运算支持。<ref name=":2" /> 2020年发布的Lua 5.4引入了代际垃圾回收(generational garbage collection)、待关闭变量(to-be-closed variables)和常量变量等特性。<ref name=":4">[https://github.com/Tencent/xLua/issues/827 Lua 5.4 Main Changes - GitHub]</ref> 截至2024年7月,最新稳定版本为Lua 5.4.7。<ref name=":5">[https://github.com/lua/lua Lua Official Repository - GitHub]</ref>


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


=== 轻量与可嵌入性 ===
此后 Lua 经历了持续而稳健的演进:Lua 2.1(1995年)引入 fallback 机制,Lua 3.0(1997年)以 tag method 取代之,Lua 5.0(2003年)引入元表(metatable)与寄存器式虚拟机,Lua 5.1(2006年)完善了模块与垃圾回收机制<ref name=":0" />。Lua 是发展中国家中唯一获得[[全球]]影响力的程序设计语言<ref name=":0" />。
Lua的核心设计目标之一是极小化运行时体积与资源占用,使其能够在内存和[[存储]]受限的嵌入式环境中高效运行。<ref name=":0" /> 语言通过简洁的C API与宿主程序交互,允许开发者将Lua脚本引擎无缝集成至以C、C++或其他语言编写的应用程序中。<ref name=":1" />


=== 数据类型与表 ===
== 特性 ==
Lua采用动态类型系统,基础数据类型包括nil、boolean、number、string、function、userdata、thread和table。<ref name=":0" /> 其中,表(table)是Lua唯一的核心数据结构,兼具数组、哈希表和对象的能力,通过元表机制可实现运算符重载、面向对象编程等高级特性。<ref name=":1" />


=== 多范式支持 ===
Lua 被设计为一门可嵌入其他应用程序的扩展语言。它没有主程序的概念,通常作为库嵌入宿主程序中:宿主程序可以执行 Lua 代码、读写 Lua 变量、注册供 Lua 调用的 C 函数,从而在同一语法框架内定制语言行为<ref name=":1" />。Lua 以简洁的过程式语法结合基于关联数组的强大数据描述结构,核心数据结构仅有一种——表(table),它同时承担数组、哈希表乃至对象的角色,配合元表可实现面向对象编程<ref name=":0" />。
Lua支持多种编程范式:过程式编程通过函数和控制结构实现;函数式编程借助一等公民函数(first-class functions)和闭包(closures)完成;面向对象特性则通过表和元表模拟实现,而非内置类与继承机制。<ref name=":0" /><ref name=":1" /> 此外,Lua的协程(coroutine)机制提供了协作式多任务处理能力。<ref name=":1" />


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


=== 电子游戏 ===
== 应用 ==
Lua在游戏产业中占据重要地位。2003年GameDev.net的调查显示Lua是当时最受欢迎的游戏脚本语言。<ref name=":1" /> 2012年1月,Lua荣获《Game Developer》杂志颁发的2011年前线奖(Front Line Award)编程工具类奖项。<ref name=":1" /> 该语言被用于《魔兽世界》(World of Warcraft)、《愤怒的小鸟》(Angry Birds)、《文明V》(Civilization V)、《孤岛危机》(Crysis)等知名游戏的脚本系统,同时也是Roblox平台的官方[[编程语言]]。<ref name=":1" /><ref name=":6">[https://outsidergaming.com/what-is-official-programming-language-used-roblox/ Unveiling the Power of Lua: The Official Programming Language Used in Roblox]</ref>


=== 系统软件与嵌入式 ===
Lua 在游戏开发领域应用尤为广泛。大量知名游戏与平台使用 Lua 作为脚本语言,包括《魔兽世界》(World of Warcraft)、《Dota 2》、《Crysis》、《Garry's Mod》,以及 Roblox(后者在其基础上发展出方言 Luau)等<ref name=":2" />。在非游戏领域,[[Redis]]、[[nginx]](通过 OpenResty)、Adobe Lightroom、Wireshark、Neovim 等软件也采用 Lua 进行扩展或脚本编写,其中 Adobe Lightroom 超过四成的代码由 Lua 编写<ref name=":0" />。
凭借极小的运行时体积,Lua被广泛应用于嵌入式系统和固件开发。同时,它也作为扩展语言集成于[[Redis]][[数据库]]、LuaTeX排版系统、[[Nginx]] Web[[服务器]]及VLC媒体播放器等软件中。<ref name=":1" /><ref name=":7">[https://www.turing.com/blog/lua-programming-language-beginners-guide A Beginner's Guide to Lua Programming Language | Turing]</ref>


=== Web与网络服务 ===
== 实现与衍生 ==
在Web服务器领域,Lua通过Nginx及Apache的mod_lua模块提供了高性能的服务器端脚本能力。<ref name=":1" /> 此外,LuaTeX排版系统使用Lua替代传统的TeX宏语言,实现了更灵活的文档处理。<ref name=":1" />


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


=== 官方实现 ===
== 版本 ==
Lua的参考实现由官方团队维护,以纯ANSI C编写,确保了高度的可移植性。源代码开放,遵循[[MIT许可证]],允许自由用于商业和非商业项目。<ref name=":0" />


=== 第三方实现 ===
Lua 5.0 起采用 MIT 许可证,此前的版本使用类似 BSD 的许可证<ref name=":0" />。2006年发布的 Lua 5.1 是历史上应用最广的版本之一,LuaJIT 及众多嵌入式应用均基于该版本。Lua 5.4(2020年发布)引入了分代垃圾回收、整数类型等改进<ref name=":1" />。2025年12月发布的 Lua 5.5.0 在性能、内存占用及全局变量处理方面继续改进,同时保持与既有 Lua 代码的兼容性<ref name=":3">[https://www.birjob.com/blog/lua-5-5-luajit-luau-dialect-split-2026 Lua in 2026: Why Lua 5.5, LuaJIT, and Luau Are Three Different Languages Now]</ref>。
LuaJIT是Lua 5.1的第三方即时编译(JIT)实现,它将Lua字节码动态编译为机器码,显著提升了执行性能,在需要高性能脚本解决方案的场景中广泛应用。<ref name=":1" />


== 参考文献 ==
== 参考文献 ==
<references />
<references />