LuaJIT的简介
什么是 LuaJIT?
LuaJIT 是 Lua 的一个即时编译器(Just-In-Time Compiler)实现,把 Lua 代码动态编译成机器码,执行速度比标准解释器快,同时保持与 Lua 语言的高度兼容。
LuaJIT 的主要特点
快是它最大的卖点。JIT 把 Lua 字节码编译成底层机器码,与标准解释器相比,多数情况下有几倍甚至几十倍的提升。兼容性上,LuaJIT 对齐 Lua 5.1 的绝大多数特性,对 Lua 5.2 和 5.3 只支持一部分。FFI(Foreign Function Interface)库让 Lua 脚本直接调用 C 函数、使用 C 数据结构,互操作不用再写一层扩展。垃圾回收它也有自己的一套实现,和标准 Lua 不一样,下面单独说。
LuaJIT 的主要组件
JIT 编译器在运行时把字节码编译成机器码,会识别频繁执行的代码路径并针对性优化。
FFI 库负责 Lua 与 C 的互操作,省掉了写扩展的环节,调用开销也更小。
垃圾回收器同样基于标记-清除算法(增量进行),并针对 LuaJIT 自身的对象模型做了优化。它不使用引用计数,Lua 5.4 的分代回收在 LuaJIT 2.1 中也没有对应实现。
使用 LuaJIT
安装可以从 官方网站 下载源码,也可以用包管理工具。Linux 系统下:
- 安装 LuaJIT:sh
sudo apt-get install luajit - 运行脚本:sh
luajit your_script.lua
与标准 Lua 的差异要留意:LuaJIT 与 Lua 5.1 高度兼容,但 Lua 5.2 和 5.3 的特性不是都有,迁移前先确认脚本没有踩到缺口。
LuaJIT 的应用场景
游戏开发、实时数据处理这类对性能敏感的应用用得多。嵌入式系统和资源受限的环境也合适,看中的是它执行快、内存占用低。需要和现有 C 库打交道的场景,FFI 正好派上用场。