Luau-一种从Lua派生的快速、小型、安全、渐进式类型的脚本语言

2020-08-05 19:27:39

Luau是一种从Lua派生的快速、小巧、安全、逐步类型化的可嵌入脚本语言。它被Roblox游戏开发人员用来编写游戏代码,也被Roblox工程师用来实现大部分面向用户的应用程序代码以及部分编辑器(Roblox Studio)作为插件。

键入Point={x:number,y:number}local p={x=1,y=2}Print(p.。X,p。Y)--打印(P.Z)导致键入错误。

大约在2006年,Roblox开始使用Lua5.1作为游戏脚本语言。多年来,我们最终大幅改进了实现和语言;为了支持Roblox平台上日益复杂的游戏、不断增长的团队规模和为应用程序/编辑器编写大量代码的大型内部团队(截至2020年,1+MLOC),我们不得不在性能、易用性和语言工具方面进行投资,并为语言引入渐进式类型系统。这一页更详细地介绍了让我们走到这一步的道路。

Luau在语法上向后兼容Lua 5.1(有效的Lua 5.1代码也是有效的Luau);但是,我们使用一组语法特性扩展了该语言,使该语言更熟悉,更符合人体工程学。这里描述了语法。

Luau限制了向用户公开的标准库集合,并实现了额外的沙箱功能,以便能够同时运行非特权代码(由我们的游戏开发人员编写)和特权代码(由我们编写)。这导致了一个与Lua中常见的执行环境不同的执行环境。这里描述了沙箱运动。

只要有可能,Luau的目标就是向后兼容Lua 5.1,同时整合更高版本的Lua的特性。然而,Luau并不是后来版本的Lua的完整超集-我们不同意Lua作者所做的一些设计决策,并且有不同的用例和约束。此处记录了5.1版之后的所有Lua功能及其在Lau中的支持状态。

为了更容易地编写正确的代码,Luau附带了一组分析工具,可以发现常见错误。它们包括一个Linter和一个类型检查器,俗称为“脚本分析”,可以从Roblox Studio或使用秘密工具使用。这里描述了皮棉通道,类型检查用户指南可以在这里找到。

作为一种语言,Luau是Lua5.1的完整超集。就标准库而言,必须从内置库中删除一些函数,并且必须添加一些函数。此外,Luau目前只能在Roblox引擎的上下文中运行,Roblox引擎公开了Roblox开发人员门户上记录的大型API界面。

除了实现解析、linting和类型检查的完全自定义前端之外,Luau运行时还提供了新的字节码、解释器和编译器,这些都经过了大量的性能调优。Luau目前没有实现实时编译,但是它的解释器在广泛的基准测试集上经常与LuaJIT解释器竞争。我们继续优化运行时,并重写部分运行时以提高效率,包括计划新的垃圾收集器和进一步的库优化,以及最终的JIT/AOT选项。虽然我们的总体目标是将程序员花在调优性能上的时间减到最少,但我们为好奇的人提供了一些有关性能特征的细节。