版本 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 加载 chunk;新的 luaL_loadfile 和 luaL_loadbuffer。
- 引入了轻量级 userdata,一个简单的 "void*",没有元表。
- 新的错误处理协议:核心不再打印错误消息;所有错误都报告给堆栈上的调用者。
- 新的 lua_atpanic 用于主机清理。
- 新的、信号安全的钩子机制。
实现
- 新许可证:MIT。
- 新的、更快的、基于寄存器的虚拟机。
- 支持外部多线程和协程。
- 新的、一致的错误消息格式。
- 核心不再需要 "stdio.h" (除了一个 sprintf 用于将数字转换为字符串)。
- lua.c 现在运行环境变量 LUA_INIT,如果存在。它可以是 "@filename" 来运行文件,或者直接是 chunk 本身。
- 支持 lua.c 中的用户扩展。提供了命令行编辑的示例实现。
- 新的动态加载库,在多个平台上默认激活。
- 安全的垃圾回收元方法。
- 预编译的字节码经过完整性检查 (安全的二进制 dostring)。
- 字符串完全对齐。
- string.find 中的位置捕获。
- read('*l') 可以读取包含嵌入零的行。
LuaFiveAlphaToBeta
RecentChanges · preferences
编辑 · 历史
最后编辑于 2004 年 1 月 30 日上午 2:47 GMT (差异)