从版本 4.0 到 5.0 的变化
(来自发行版中的 HISTORY 文件)
语言
- 词法作用域。
- Lua 协程。
- 标准库现在打包在表中。
- 标签被元表取代,标签方法被元方法取代,存储在元表中。
- 真正的尾调用。
- 每个函数都可以有自己的全局表,可以共享。
- 新的 __newindex 元方法,在将新键插入表时调用。
- 新的块注释:--[[ ... ]]。
- 新的泛型 for 循环。
- 新的弱表。
- 新的布尔类型。
- 新的语法 "local function"。
- (f()) 返回 f 返回的第一个值。
- {f()} 用 f 返回的所有值填充一个表。
- \n 在 [[\n 中被忽略。
- 修复了 and-or 的优先级。
- 更通用的函数定义语法(例如 function a.x.y:f()...end)。
- 更通用的函数调用语法(例如 (print or write)(9))。
- 新的函数(time/date、tmpfile、unpack、require、load* 等)。
API
- 使用 lua_load 加载代码块;新的 luaL_loadfile 和 luaL_loadbuffer。
- 引入了轻量级用户数据,一个简单的 "void*",没有元表。
- 新的错误处理协议:核心不再打印错误消息;所有错误都报告给调用者堆栈。
- 新的 lua_atpanic 用于主机清理。
- 新的、信号安全的、钩子方案。
实现
- 新的许可证:MIT。
- 新的、更快的、基于寄存器的虚拟机。
- 支持外部多线程和协程。
- 新的、一致的错误消息格式。
- 核心不再需要 "stdio.h" 来做任何事情(除了将数字转换为字符串的 sprintf 的单次使用)。
- lua.c 现在运行环境变量 LUA_INIT(如果存在)。它可以是 "@filename",运行一个文件,或者代码块本身。
- 支持 lua.c 中的用户扩展。给出了命令行编辑的示例实现。
- 新的动态加载库,在几个平台上默认启用。
- 安全的垃圾收集器元方法。
- 预编译的字节码经过完整性检查(安全的二进制 dostring)。
- 字符串完全对齐。
- 在 string.find 中捕获位置。
- read('*l') 可以读取包含嵌入零的字符串。
LuaFiveAlphaToBeta
最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2004 年 1 月 30 日上午 8:47 GMT (差异)