Hacker News 中文摘要

RSS订阅

Luau——源自Lua的快速、小巧、安全、渐进类型脚本语言 -- Luau – Fast, small, safe, gradually typed scripting language derived from Lua

文章摘要

Luau是一种源自Lua的快速、小巧、安全且逐渐类型化的嵌入式脚本语言,由Roblox在2006年开始使用并逐步演化。为支持复杂游戏开发和大规模团队协作,Luau在性能、易用性和工具支持上进行了优化,并引入了渐进类型系统。Luau通过限制标准库和增强沙盒功能,确保非特权代码与特权代码的安全并行执行。尽管Luau力求与Lua 5.1向后兼容,并吸收后续版本的特性,但它并非Lua后续版本的完全超集,因其设计决策和用例有所不同。

文章总结

Luau:源自Lua的快速、小巧、安全的脚本语言

Luau(发音为/ˈlu.aʊ/)是一种快速、小巧、安全且逐步类型化的嵌入式脚本语言,源自Lua。自2006年起,Roblox开始使用Lua 5.1作为其游戏脚本语言。随着Roblox平台上游戏的复杂性增加、团队规模扩大以及内部团队编写大量代码(截至2020年超过100万行),Roblox对Lua进行了大量改进,包括提升性能、增强易用性和语言工具,并引入了逐步类型系统。

沙盒机制
Luau限制了暴露给用户的标准库集,并实现了额外的沙盒功能,以便能够同时运行无特权代码(由游戏开发者编写)和特权代码(由Roblox编写)。这使得其执行环境与常见的Lua环境有所不同。

兼容性
Luau尽可能保持与Lua 5.1的向后兼容性,同时吸收了Lua后续版本的一些特性。然而,Luau并非Lua后续版本的完全超集,因为Roblox有不同的用例和约束。所有Lua 5.1之后的特性及其在Luau中的支持状态均有详细文档记录。

语法
Luau在语法上与Lua 5.1向后兼容(所有有效的Lua 5.1代码在Luau中同样有效),但通过一系列语法扩展使语言更加熟悉和符合人体工程学。

分析工具
为了帮助开发者编写正确的代码,Luau提供了一套分析工具,包括linter和类型检查器,通常称为脚本分析。这些工具集成在luau-analyze命令行可执行文件中,用于发现常见错误。

性能
Luau运行时采用了全新的字节码、解释器和编译器,并针对性能进行了深度优化。其解释器在某些程序上可以与LuaJIT解释器竞争。此外,Luau还提供了可选的JIT编译组件,适用于x64和arm64平台,能够显著加速某些程序。Roblox持续优化运行时,并重写部分代码以进一步提高效率。


作为一门语言,Luau是Lua 5.1的完全超集。在标准库方面,部分函数被移除,部分函数被添加。当Luau嵌入到应用程序中时,脚本通常可以访问特定于应用程序的额外库功能。

Luau的设计旨在满足Roblox平台的需求,同时为开发者提供更高效、更安全的编程体验。

评论总结

评论内容总结:

  1. 对Luau的认可与兴趣

    • 一些用户通过Roblox Studio了解到Luau,并对Roblox的工程能力表示赞赏。
      引用: "I learned about Luau via my 13 years old who is looking into Roblox Studio."
    • Luau的性能表现被认为与LuaJIT相当,甚至在某些情况下更具竞争力。
      引用: "Luau interpreter can be competitive with LuaJIT interpreter depending on the program."
  2. 类型系统的讨论

    • 用户对Luau的类型系统表示兴趣,认为它为动态语言提供了静态类型检查的可能性。
      引用: "Typed Lua is something I’ve always wanted, but writing a very comprehensive type-checker and LSP for another dynamic language is pretty difficult."
    • 也有用户希望Luau能完全静态化,认为当前的渐进类型系统不够彻底。
      引用: "Coward, make it statically-typed!"
  3. 与其他语言的比较

    • 用户将Luau与Teal进行比较,两者都是Lua的静态类型方言,但Luau的实现更为复杂。
      引用: "Luau seems to be significantly more complex than Lua - I’m not sure it can still be called 'small'."
    • 也有用户提到Lua的版本兼容性问题,认为Lua 5.1仍然是主流,而Luau可能无法完全替代它。
      引用: "Lua itself is now at 5.4, but it did not keep backwards compatibility."
  4. 对Luau的批评与不足

    • 用户指出Luau的文档和社区支持不足,且其API设计存在一些问题。
      引用: "The documentation is not great, and the community is basically nonexistent."
    • 也有用户提到Luau的命名和Logo与Lua过于相似,认为这缺乏原创性。
      引用: "I think it’s pretty lame to name a language so deeply inspired by another language, a name that is also insanely close to said language."
  5. 未来发展与替代方案

    • 用户对Luau的Node.js风格运行时表示期待,认为这将扩展其应用场景。
      引用: "Something that’s REALLY interesting is that Roblox is working on a Node.js style desktop runtime for Luau."
    • 也有用户提到其他替代方案,如Bolt和Pluto,认为它们可能更适合某些需求。
      引用: "I’ve been looking for a statically typed language which could integrate well around something with a strong type system."

总结:Luau因其类型系统和性能表现受到关注,但也面临文档、社区支持和API设计等方面的批评。用户对其未来发展持观望态度,并探讨了与其他语言的比较及替代方案。