Luau 的开源,Lua 语言的类型检查变体

宣布开源并发布Luau编程语言的第一个独立版本,继续Lua语言的开发并向后兼容Lua 5.1。 Luau 语言主要用于将脚本引擎嵌入到应用程序中,旨在实现高性能和低资源消耗。 该项目代码是用 C++ 编写的,并在 MIT 许可证下开放。

Luau 通过类型检查功能和一些新的语法结构(例如字符串文字)扩展了 Lua。 该语言向后兼容 Lua 5.1 并部分兼容较新的版本。 支持 Lua 运行时 API,允许您将 Luau 与现有代码和绑定一起使用。 语言运行时基于经过大量修改的 Lua 运行时 5.1 代码,但解释器完全重写。 在开发过程中,使用了一些新的优化技术来实现比Lua更高的性能。

该项目由 Roblox 开发,用于该公司的游戏平台、游戏和用户应用程序的代码中,包括 Roblox Studio 编辑器。 最初,Luau是闭门开发的,但最终决定将其转为开放项目类别,进一步由社区参与共同开发。

主要特点:

  • 渐进式打字,占据动态打字和静态打字之间的中间位置。 Luau 允许您根据需要通过特殊注释指定类型信息来使用静态类型。 提供了内置类型“any”、“nil”、“boolean”、“number”、“string”和“thread”。 同时,保留了在不显式定义变量和函数类型的情况下使用动态类型的可能性。 function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == “a” end
  • 支持字符串文字(如 Lua 5.3 中所示),例如“\0x**”(十六进制数字)、“\u{**}”(Unicode 字符)和“\z”(行尾),以及能够可视化数字格式(您可以编写 1_000_000 而不是 1000000)、十六进制 (0x...) 和二进制数字 (0b......) 的文字。
  • 支持“继续”表达式,补充现有的“break”关键字,以跳转到新的循环迭代。
  • 支持复合赋值运算符(+=、-=、*=、/=、%=、^=、..=)。
  • 支持以表达式的形式使用条件“if-then-else”块,返回块执行期间计算的值。 您可以在块中指定任意数量的 elseif 表达式。 局部 maxValue = if a > b then a else b 局部符号 = if x < 0 then -1 elseif x > 0 then 1 else 0
  • 隔离模式(沙箱)的存在,允许您运行不可信的代码。 此功能可用于将您自己的代码和其他开发人员编写的代码并排组织启动,例如无法保证安全性的第三方库。
  • 标准库的限制,其中可能会产生安全问题的函数已被删除。 例如,库“io”(访问文件和启动进程)、“package”(访问文件和加载模块)、“os”(访问文件和更改环境变量的函数)、“debug”(内存不安全操作) 、“dofile”和“loadfile”(FS 访问)。
  • 提供静态代码分析、识别错误(linter)和检查类型正确使用的工具。
  • 自己的高性能解析器、字节码解释器和编译器。 Luau 目前还不支持 JIT 编译,但据称 Luau 解释器在某些情况下的性能与 LuaJIT 相当。

来源: opennet.ru

添加评论