luau-lang/luau
GitHub: luau-lang/luau
Luau 是一个基于 Lua 5.1 的快速、安全的渐进式类型脚本语言,专为游戏开发和嵌入式场景设计,提供先进的类型推断和高性能运行时。
Stars: 5335 | Forks: 540
# Luau  [](https://codecov.io/gh/luau-lang/luau)
Luau (小写 u,/ˈlu.aʊ/) 是一种快速、小巧、安全、渐进类型的可嵌入式脚本语言,派生自 [Lua](https://lua.org)。
它的设计旨在向后兼容 Lua 5.1,并融合了后续 Lua 版本的[部分功能](https://luau.org/compatibility)),同时还扩展了功能集(最显著的是类型注解和最先进的类型推断系统)。Luau 很大程度上是从零开始实现的,其语言运行时是经过大幅度修改的 Lua 5.1 运行时版本,拥有完全重写的解释器以及其他[性能创新](https://luau.org/performance)。该运行时主要保留了 Lua 5.1 API,因此现有的绑定库应该大致兼容,但需要注意一些细节。
Luau 被 Roblox 游戏开发者用于编写游戏代码,也被 Roblox 工程师用于实现大部分面向用户的应用程序代码以及编辑器(Roblox Studio)的部分插件。Roblox 选择将 Luau 开源是为了促进 Roblox 社区内的协作,同时也让其他公司和社区能够从持续的语言和运行时创新中受益。最近,《Alan Wake 2》、《Farming Simulator 2025》、《Second Life》和《Warframe》等游戏也开始采用 Luau。
本仓库托管了语言实现及相关工具的源代码。语言文档可在 https://luau.org/ 获取,并接受通过[站点仓库](https://github.com/luau-lang/site)提交的贡献;语言通过 [RFC](https://github.com/luau-lang/rfcs) 进行演进,RFC 位于其专属仓库中。
# 用法
Luau 是一种可嵌入式编程语言,但默认也附带两个命令行工具:`luau` 和 `luau-analyze`。
`luau` 是一个命令行 REPL,也可以运行输入文件。请注意,REPL 在沙盒环境中运行,因此无法访问底层文件系统,但具备 `require` 模块的能力。
`luau-analyze` 是一个命令行类型检查器和 linter;给定一组输入文件,它会根据文件配置生成错误/警告,配置可以通过文件中的 `--!` 注释或 [`.luaurc`](https://rfcs.luau.org/config-luaurc) 文件进行自定义。详情请参阅我们的[类型检查](https://luau.org/typecheck)和 [linting](https://luau.org/lint) 文档。我们的社区维护着一个名为 [luau-lsp](https://github.com/JohnnyMorganz/luau-lsp) 的 `luau-analyze` 语言服务器前端,供文本编辑器使用。
# 安装
你可以通过从[最新发布版本](https://github.com/luau-lang/luau/releases)下载编译好的二进制文件来安装并运行 Luau;请注意,归档中的 `luau` 和 `luau-analyze` 二进制文件需要添加到 PATH 中,或者复制到 Linux/macOS 上的 `/usr/local/bin` 等目录中。
或者,你也可以使用以下打包发行版(请注意,这些并非由 Luau 开发团队维护):
- macOS:[安装 Homebrew](https://docs.brew.sh/Installation) 并运行 `brew install luau`
- Arch Linux:Luau 已被添加到官方 Arch Linux 软件包仓库的 extras 仓库中(参见 [``luau``](https://archlinux.org/packages/extra/x86_64/luau/)),只需使用 ``pacman`` 安装:``pacman -Syu luau``
- Alpine Linux:[启用 community 仓库](https://wiki.alpinelinux.org/w/index.php?title=Enable_Community_Repository) 并运行 `apk add luau`
- Gentoo Linux:Luau [由 Gentoo 官方打包](https://packages.gentoo.org/packages/dev-lang/luau),可以使用 `emerge dev-lang/luau` 安装。在安装之前,你可能需要先解除对该软件包的屏蔽(可以通过在 `emerge` 命令中加入 `--autounmask=y` 选项来完成)。
安装完成后,你需要运行[此处](https://luau.org/getting-started)的测试用例来验证安装是否成功。
## 构建
在所有平台上,你可以使用 CMake 运行以下命令从源代码构建 Luau 二进制文件:
```
mkdir cmake && cd cmake
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build . --target Luau.Repl.CLI --config RelWithDebInfo
cmake --build . --target Luau.Analyze.CLI --config RelWithDebInfo
```
或者,在 Linux 和 macOS 上,你也可以使用 `make`:
```
make config=release luau luau-analyze
```
要将 Luau 作为库集成到你的 CMake 应用程序项目中,你至少需要依赖 `Luau.Compiler` 和 `Luau.VM` 项目。然后,你需要创建一个新的 Luau 状态(使用 Lua 5.x API,例如 `lua_newstate`),将源代码编译为字节码并将其加载到 VM 中,如下所示:
```
// needs lua.h and luacode.h
size_t bytecodeSize = 0;
char* bytecode = luau_compile(source, strlen(source), NULL, &bytecodeSize);
int result = luau_load(L, chunkname, bytecode, bytecodeSize, 0);
free(bytecode);
if (result == 0)
return 1; /* return chunk main function */
```
有关使用宿主 API 的更多详细信息,目前你需要查阅 [Lua 5.x API](https://www.lua.org/manual/5.1/manual.html#3)。Luau 紧密跟踪该 API,但有一些偏差,例如需要单独编译源代码(这对于在没有编译器的情况下部署 VM 很重要),以及缺少 `__gc` 支持(请改用 `lua_newuserdatadtor`)。
为了获得许多性能改进的优势,强烈建议使用 `safeenv` 功能,该功能将各个脚本的全局表相互沙盒化,并保护内置库免受猴子补丁(monkey-patching)的影响。为此,你必须在全局状态上调用 `luaL_sandbox`,并为每个新脚本的执行线程调用 `luaL_sandboxthread`。
# 测试
Luau 有一个内部测试套件;在 CMake 构建中,它分为两个目标:`Luau.UnitTest`(用于字节码编译器和类型检查器/linter 测试)和 `Luau.Conformance`(用于 VM 测试)。单元测试是用 C++ 编写的,而一致性测试主要用 Luau 编写(见 `tests/conformance`)。
Makefile 构建将两者合并为一个目标,可以通过 `make test` 运行。
# 依赖
Luau 使用 C++ 作为其实现语言。运行时需要 C++11,而编译器和分析组件需要 C++17。使用 Microsoft Visual Studio 2017 或更高版本,或者 gcc-7 或 clang-7 或更高版本,应该可以毫无问题地构建。
除了 STL/CRT,Luau 库组件没有外部依赖。测试套件依赖于 [doctest](https://github.com/onqtam/doctest) 测试框架,而 REPL 命令行依赖于 [isocline](https://github.com/daanx/isocline)。
# 许可证
Luau 实现根据 [MIT 许可证](https://github.com/luau-lang/luau/blob/master/LICENSE.txt) 的条款分发。它基于 Lua 5.x 实现,同样采用 MIT 许可证。
当 Luau 被集成到外部项目中时,我们请求你遵守许可协议,并在面向用户的产品文档中包含 Luau 的署名。在合理的情况下,也鼓励使用 [Luau logo](https://github.com/luau-lang/site/blob/master/logo.svg) 进行署名。
标签:Bash脚本, C++, Lua, Luau, rizin, Roblox, 云安全监控, 代码分析, 凭证管理, 嵌入式脚本, 开源, 数据擦除, 渐进类型, 游戏开发, 生成式AI安全, 类型系统, 编程语言, 编译器, 脚本语言, 虚拟机, 解释器, 静态分析