Lua
定义
Lua是一门动态类型的脚本语言,设计目标是被嵌入到其他应用程序中运行,而不是作为独立的开发语言使用。它把过程式语法与基于关联数组的数据描述能力结合起来,同时支持过程式、面向对象、函数式和数据驱动等多种编程风格。Lua的名称来自葡萄牙语中的“月亮”,取自其前身语言Sol(意为“太阳”)的对应称呼[3]。
Lua的语言规范由参考手册形式发布,官方实现以ANSI C写成,源代码总量约3万行;5.4.6版的源码与文档压缩包约355KB。它仅内置少量原子数据类型,数组、集合、列表、记录等结构均由表这一种类型模拟[4]。
原理
Lua程序并不直接按文本逐行执行,而是先编译为字节码,再由虚拟机运行;这一编译过程对使用者通常不可见,也可以在宿主环境中预先完成,以缩短加载时间或省去编译器[5]。Lua 5的虚拟机采用寄存器架构,与多数基于栈的虚拟机不同,这种设计减少了值的复制和每条函数所需的指令数量[5]。
语言的核心数据结构是表,它是由键值对构成的异质关联数组,键不能为nil与NaN,数字键1与字符串键"1"被视为不同的键[5]。每个值都可以带有一张元表,元表中以双下划线开头的字段(如__add)规定了该值在算术运算、比较、拼接、索引等操作下的行为,这一机制被称为元方法[6]。类与继承并不属于语言的内建概念,而是通过表与元方法组合模拟出来[5]。
内存由增量式标记清扫垃圾收集器自动管理,收集器通过“暂停”和“步进倍率”两个百分比参数控制回收节奏[6]。语言还提供一等函数、闭包、正规尾调用、运行期字符串与数值的自动转换、协程以及动态模块加载等特性[4]。嵌入宿主程序时,Lua通过一套基于栈的C语言应用编程接口交换数据,宿主既可以调用脚本中的函数,也可以注册C函数供脚本使用。
发展历程
Lua诞生于1993年,其直接来源是巴西石油公司(Petrobras)的两个内部项目所使用的数据录入语言DEL和可配置报表语言SOL,这两种语言缺少控制结构,促使研究者设计一门具备完整编程能力的语言[1]。由于当时巴西对计算机软硬件实行市场保护政策,客户难以从国外采购定制软件,为Tecgraf开发工具成为现实选择[1]。语言的需求中包括可移植性,因为巴西石油公司的机器种类繁多,涵盖PC DOS、Windows、Macintosh与各类Unix系统[1]。
早期Lua的语法借鉴了Modula的控制结构、C++的局部变量声明、CLU的多重赋值与多重返回,而把表作为主要数据结构则受到LISP与Scheme的影响。在5.0版之前,Lua使用自有的、接近BSD的许可证,之后改用MIT许可证发布[7]。2007年,Lua的设计者向第三届ACM编程语言史会议提交了介绍其演进过程的论文。
2011年,该语言获得游戏开发者杂志颁发的Front Line Award奖项。Lua 5.5.0于2025年12月22日发布,距上一主要版本5.4约5年,新增了全局变量的显式声明、命名可变参数表,并把主要垃圾收集改为增量执行,大型数组的内存占用约减少60%[8][9]。同版本中for循环的控制变量被改为只读[9]。
应用
Lua最常见的用途是作为宿主程序的嵌入式脚本层,由此实现可配置性与可扩展性[2]。官方资料列举的工业案例包括Adobe的Photoshop Lightroom、巴西数字电视中间件Ginga,以及《魔兽世界》等游戏。在游戏领域,它被描述为主要使用的脚本语言。
除C与C++外,Lua也被用于扩展以Java、C#、Smalltalk、Fortran、Ada、Erlang乃至Perl、Ruby编写的程序。它可以运行在各类Unix与Windows系统、运行Android与iOS的移动设备、ARM等嵌入式处理器以及IBM大型机上。游戏之外,它还被用于数据库插件、入侵检测系统等场景[10]。
作为独立实现,LuaJIT以即时编译方式执行Lua代码,用于需要更高运行速度的场合。
局限
Lua的官方版本只包含精简的核心与最基本的库,网络通信、图形界面等能力并不预置,需要由宿主语言或外部扩展模块提供[2]。因此其标准库函数较少,生态规模不及Python等通用语言,通常不作为开发独立应用程序的首选[11]。
该语言是动态类型语言,类型错误往往在运行期才暴露,代码规模增大时组织与维护的难度随之上升[12]。语言层面的并发支持仅为协作式协程,标准实现不提供抢占式多线程与多核并行能力[11]。
版本之间的兼容性较弱,从5.1升级到5.2等跨越式升级需要较多改动;5.5版引入global关键字后,旧版二进制代码块与新版本亦不兼容[11][13]。C语言应用编程接口基于栈且细节繁琐,被认为是使用门槛较高的部分[11]。
参见
参考资料
- JavaScript disabled - The Evolution of Lua [引用日期2026-10-29]
- 維基百科 [引用日期2026-10-29]
- The Evolution of an Extension Language: A History of Lua [引用日期2026-10-29]
- Lua (programming language) [引用日期2026-10-29]
- Lua (programming language) [引用日期2026-10-29]
- Lua 5.3 Reference Manual [引用日期2026-10-29]
- Lua Programming [引用日期2026-10-29]
- Version history [引用日期2026-10-29]
- 軽量スクリプト言語「Lua 5.5」リリース [引用日期2026-10-29]
- 概述 [引用日期2026-10-29]
- 了解一下Lua,没准用得上 [引用日期2026-10-29]
- From lua-l Thu Mar 15 02:51:19 2018 [引用日期2026-10-29]
- securitylab.ru 上的网页 [引用日期2026-10-29]