Skip to content

Latest commit

 

History

History
59 lines (34 loc) · 2.56 KB

lua_version.md

File metadata and controls

59 lines (34 loc) · 2.56 KB

lua 版本变迁

  • lua 把 value 为 nil 的键值对视为不存在, { 1,2,nil,4 } 取长度时,到底是 2 还是 4 是未定义的。
    • 像 json 这种原本依赖语言, 有可能编码出 { 1,2, null, 4 } 的数组。
    • nil 放在 table 中有删除一个 slot 的语义,也影响了 __newindex, __index 的行为。nil 和其它数据类型变得不一致,

5.1

  • 5.0 到 5.1 , 可变参数的处理上, 从利用一个叫 arg 的 table 来传递可变参数,转到了现在的 ...

    • 这是在完善语言,可变参数是一个原本就具备的语言特性,需要对应的语法机制来对应。
    • 如果用 arg 这样一个 table 绕一下,还会增加 gc 的负担。
    • ... 的不便是,不能最为 upvalue
  • Lua 5.1 增强了模块化管理,建立起一套相对完善(同时也更复杂)的模块机制。

5.2

  • Lua 5.1 到 Lua 5.2 的变化则是做减法。
    • 环境这个概念被去除了,取而代之的是 _ENV 这个特殊的 upvalue 以语法糖的形式存在。
    • 随着环境概念的消失,原本全局变量的概念其实也去掉了。
    • 5.1 引入的复杂模块化机制也随着环境的取消而被完全删除,这套机制被看作是过度设计。
  • 从完备性上考虑,5.2 增加了一组 C API ,重新实现了协程,终于去掉了 coroutine 在大部分官方库(尤其是 pcall/metamethod)中无法 yield 的限制(减少了使用特例)
  • Lua 5.2 bit32 这个基础库被引入
  • 在 5.2.0 到 5.2.1 的变更中,字符串被分裂为长字符串和短字符串两类 。

5.3

  • 最大的改变是增加了 number 的子类型:整数的内部表达。 有了原生的 64bit 整数的支持。
    • 由于有了整型的支持,逻辑位操作、移位操作、取模等都有了原生的支持。
    • 通过对整型的支持,把文本串视为整数序列,支持 utf8 字符串也变成了官方支持。
    • 另外,还整合了二进制数据块的打包解包模块 lpack 。
  • 这些都可以看成是围绕整型支持的周边完善。而 C API 方面更是加强了整数在 C 和 Lua 间的交互能力。