Lua 5.5 Beta 版本发布,新特性包括(但不限于)
- 允许使用 global 关键字声明当前 scope 内可作为全局变量使用的名字,实际属于编译期检查
X = 1 -- Ok, global by default
do
global Y -- voids implicit initial declaration
Y = 1 -- Ok, Y declared as global
X = 1 -- ERROR, X not declared
end
X = 2 -- Ok, global by default again
应该可以一定程度上缓解不小心创建多余的全局变量的情况。我觉得这是 Lua 5.5 最大的更改之一
- 引入了 table.create 方法,在创建表时可以提供 hint 要求解释器预分配空间。
- 允许通过 lua_pushexternalstring() 在 Lua 解释器直接引用外部创建的字符串对象,对长数据块能够消除一次分配/拷贝消耗
还有部分对现有特性的更改/提升,
- for 循环的控制变量不再可以在循环体内被更改,此前的 Lua 版本修改控制变量会产生未定义行为,Lua 5.5 直接将控制变量标记为了只读
- 允许垃圾回收的老年代收集过程增量完成而无需暂停世界
- 优化了有较大数组部分的表的内存消耗
Reference: https://www.lua.org/work/doc/#changes
Reference: https://www.lua.org/work/doc/manual.html#8
- 允许使用 global 关键字声明当前 scope 内可作为全局变量使用的名字,实际属于编译期检查
X = 1 -- Ok, global by default
do
global Y -- voids implicit initial declaration
Y = 1 -- Ok, Y declared as global
X = 1 -- ERROR, X not declared
end
X = 2 -- Ok, global by default again
应该可以一定程度上缓解不小心创建多余的全局变量的情况。我觉得这是 Lua 5.5 最大的更改之一
- 引入了 table.create 方法,在创建表时可以提供 hint 要求解释器预分配空间。
- 允许通过 lua_pushexternalstring() 在 Lua 解释器直接引用外部创建的字符串对象,对长数据块能够消除一次分配/拷贝消耗
还有部分对现有特性的更改/提升,
- for 循环的控制变量不再可以在循环体内被更改,此前的 Lua 版本修改控制变量会产生未定义行为,Lua 5.5 直接将控制变量标记为了只读
- 允许垃圾回收的老年代收集过程增量完成而无需暂停世界
- 优化了有较大数组部分的表的内存消耗
Reference: https://www.lua.org/work/doc/#changes
Reference: https://www.lua.org/work/doc/manual.html#8