LuaJIT 3.0 提议的语法扩展

LuaJIT 3.0 提议的语法扩展

LuaJIT 3.0 提议现代语法扩展

LuaJIT 3.0 正在提议一系列语法扩展,旨在使该语言更贴近其他现代语言中常见的编程模式。这些变化旨在减少开发者从其他语言过渡时的摩擦,并为表达常用操作提供更简洁的方式。

提议的语法变更

C 风格的逻辑与三元运算符

LuaJIT 3.0 提议为经典的 Lua 运算符引入惯用语法。这包括使用 &&|| 等符号来替换或补充基于单词的 andor。此外,正在考虑引入三元运算符 (? :),以提供一种比标准 Lua 条件表达式更简洁的替代方案。

复合赋值运算符

该提议包括增加复合赋值运算符(例如 +=, -=, *=, /=)。这些运算符允许更简洁地更新变量,这一特性在其他类 Lua 实现中已经存在,例如 Playdate 手持游戏机所使用的 Lua 版本。

位运算符对齐

虽然 Lua 5.3 在 2015 年引入了位运算符,但 LuaJIT 正在朝着纳入类似功能的方向迈进,以追赶标准 Lua 的演进,尽管它作为一种 JIT 编译实现保持着自己的发展轨迹。

社区观点与技术辩论

提议的变更在开发者社区内引发了关于语言特性与开发者便利性之间平衡的辩论。

对语言特性的担忧

一些开发者认为,引入 C 风格的语法是肤浅的,并且可能会稀释 Lua 独特的身份。批评者认为,提供多种执行相同操作的方式(TIMTOWTDI - "There Is More Than One Way To Do It")增加了复杂性,而没有解决根本的语言问题。

"What does changing and to && actually achieve? ... It's not actually fixing any problems, just making Lua no longer look like Lua."

三元运算符的替代方案

一些贡献者更倾向于 if x then y else z 的表达式风格,正如在 Luau(Lua 的一个衍生版本)中所见。支持者认为,这种方法比 x ? y : z 语法更容易阅读和嵌套,特别是在需要 elseif 的情况下。

"Lua 类似物" 的生态系统

观察者指出,Lua 的主要版本之间缺乏严格的兼容性,这促进了 "lua-alikes" 的多样化生态系统。由于该语言实现简单,各种项目都创建了带有其自身语法扩展的专门化 Lua 版本,优先考虑特定用例而非统一的库生态系统。

对实现的影响

这些语法变更给构建该语言替代实现的人带来了新的挑战。例如,致力于支持多个版本(如 Lua 5.1 到 5.5)的 Rust 基础 Lua 实现的开发者发现,LuaJIT 在语法扩展上的分歧使得实现跨版本兼容性变得更加困难。

Sources