Chinaunix首页 | 论坛 | 博客
  • 博客访问: 683984
  • 博文数量: 132
  • 博客积分: 10060
  • 博客等级: 上将
  • 技术积分: 1732
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-21 12:35
个人简介

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-08-15 09:42:43

关于Lua 5.1的变更

* 从版本5.0到5.1的变化
  -------------------------------
  语言:
  + 新模块系统。
  + 赋予for的控制变量新的语义。
  + 赋予setn/getn新的语义。
  + 赋予可变参数新的语法/语义。
  + 新型长字符串和注释。
  + 新“取模”操作符(‘%’)
  + 新取长操作符#t
  + 元表用于所有类型
  API:
  + 新函数:lua_createtable、lua_get(set)field、lua_push(to)integer。
  + 用户提供内存分配器(lua_open变成lua_newstate)。
  + luaopen_*函数必须通过Lua调用。
  实现:
  + 凭借luaconf.h的新的配置方案。
  + 增量垃圾收集。
  + 在词法分析器中更好地处理行尾。
  + 完全可重入的解析器(新Lua函数“load”)
  + 更好地支持64位机器。
  + 对Mac OS X提供本地loadlib支持。
  + 标准分发包放在唯一一个库中(lualib.a被合并入lua.a)

* 从版本4.0到5.0的变化
  -------------------------------
  语言:
  + 词法域。
  + Lua协程。
  + 标准库被打包在表中。
  + 元表取代标签,元表中的元方法取代标签方法。
  + 适当的尾调用。
  + 每个函数可拥有自己的全局表,它可被共享。
  + 新__newindex元方法,当向表中插入新键时调用。
  + 新的块注释:--[[ ... ]]。
  + 新的一般形式的for。
  + 新弱引用(weak)表。
  + 新布尔类型。
  + 新语法“局部函数”。
  + (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:
  + 代码单元(chunk)通过lua_load载入;新luaL_loadfile和luaL_loadbuffer。
  + 引入轻量级用户数据,一个不带元表的简单的“void*”。
  + 新错误处理协议:核心不再输出错误消息;所有错误被报告到栈上的调用者。
  + 用于宿主清理的新lua_atpanic。
  + 新的、信号安全的(signal-safe)hook方案。
  实现:
  + 新许可证:MIT。
  + 新的、更快、基于注册的虚拟机。
  + 支持外部多线程和协同例程。
  + 新的且一致的错误消息格式。
  + 核心不再需要“stdio.h”(除了sprintf将数字转换为字符串单个用法)。
  + 如果存在环境变两LUA_INIT,lua.c处理它。它可为要运行的文件“@filename”或代码单元自身。
  + 在lua.c中支持用户扩展。给出了命令行编辑作为示例实现。
  + 新动态加载库,在一些平台上缺省是可用的。
  + 安全的垃圾收集器元方法。
  + 为完整性目的的预编译字节码检查。
  + 完全调整的字符串。
  + string.find中的位置捕获。
  + read('*l')可读取嵌入的0(embedded zero)。

* 从版本3.2到4.0的变化
  -------------------------------
  语言:
  + 新的“break”和“for”语句(数字的和for表)。
  + 对全局的统一处理:全局存储在一个Lua表中。
  + 改进的错误消息。
  + 不再使用“$debug”:全速*和*完整的调试信息。
  + 新读取形式:read(N)用于后续的N字节。
  + 不赞成使用一般的读取模式。(利用-DCOMPAT_READPATTERNS则仍然可用。)
  + 对于最后的函数,所有返回值作为参数传递(利用-DLUA_COMPAT_ARGRET则旧式的语义仍然可用)
  + 不赞成使用用于表的垃圾收集标签方法。
  + 对于排序只有一个标签方法。
  API:
  + 新API:完全可重入、更简单且更高效。
  + 新调试API。
  实现:
  + 比以往更快:更纯净的虚拟机和新散列算法。
  + 非递归的垃圾收集器算法。
  + 减少带很多字符串的程序的内存占用。
  + 改进度内存分配错误的处理。
  + 改进对16位机器的支持(我们希望)。
  + 代码可不加修改第通过ANSI C和C++编译。
  + 使用strtoul转换基数非10的数字。
  + 在Lua中新的-f选项以支持#!脚本。
  + luac可以联合文本和二进制。

* 从版本3.1到3.2的变化
  -------------------------------
  + 重定向Lua核心中的所有输出到_ERRORMESSAGE和_ALERT。
  + 提高常量和每个函数中的全局变量的数量限制(从2^16到2^24)。
  + 调试信息(lua_debug和hook)移到lua_state中,并提供了新API函数获取和设置该信息。
  + 新调试库在Lua中提供完整的调试访问。
  + 新的表函数“foreachi”、“sort”、“tinsert”、“tremove”、“getn”。
  + 新的io函数“flush”、“seek”。

* 从版本3.0到3.1的变化
  -------------------------------
  + 新特性:带闭包的匿名函数(通过“upvalue”)。
  + 新语法:
    - 代码单元中的局部变量。
    - 带DO block END的更好的作用域控制。
    - 构造器也可写成:{ 记录部分; 列表部分 }。
    - 函数调用和左值的更一般形式的语法,例如:
      f(x).y=1
      o:f(x,y):g(z)
      f"string"是f("string")的语法糖
  + 字符串可包含任意二进制数据(例如,嵌入的0(embedded zeros))。
  + 重新组织和清理主要代码;降低模块依赖性。
  + 常量和全局变量的总数没有任何限制。
  + 支持多全局上下文。
  + 更好的语法错误消息。
  + 新的遍历函数“foreach”和“foreachvar”。
  + 数字缺省是双精度浮点数。很容易改为使用单精度浮点数或长整型。
  + 完整的调试信息存储在预编译的代码单元中(chunk)。
  + 当交互地运行时,示例解释器会提示用户,并且也可优雅地处理control-C中断。

* 从版本2.5到3.0的变化
  -------------------------------
  + 新概念:“标签方法”。
    标签方法取代fallback作为扩展Lua的语义的元机制。然而fallback具有全局的本性,
    标签方法作用于具有相同标签的对象(比如一些表的分组)。
    使用fallback的现存代码应该无需修改即可运行。
  + 新的、一般形式的构造器{[exp] = exp, ... }语法。
  + 在函数中提供对处理数量可变的参数的支持(vararg)。
  + 支持条件编译($if ... $else ... $end)。
  + API中更纯净的语义简化宿主代码。
  + 更好地支持编写库(auxlib.h)。
  + 标准库中更好的类型检查和错误消息。
  + luac也能逆转储(undump)。

* 从版本2.4到2.5的变化
  -------------------------------
  + 基于模式匹配的io和string库;为了兼容性,旧式库仍然可用
  + dofile和dostring可返回值(通过返回语句)
  + 更好地支持16和64位机器
  + 文档扩容,带更多例子

* 从版本2.2到2.4的变化
  -------------------------------
  + 外部编译器创建可移植的二进制文件可更快地加载
  + 调试和profiling的接口
  + 新的“getglobal”fallback
  + 新函数用于处理对Lua对象的引用
  + 标准库中的新函数
  + 每个字符串只存储一份拷贝
  + 文档扩容,带更多例子

* 从版本2.1到2.2的变化
  -------------------------------
  + 可用“左值”作为名字声明函数
  + 函数的垃圾收集
  + 为管道提供支持

* 从版本1.1到2.1的变化
  -------------------------------
  + 面向对象支持
  + fallbacks
  + 简化表语法
  + 很多内部改进

(变更结束)

阅读(1602) | 评论(0) | 转发(0) |
0

上一篇:LuaBinaries

下一篇:etc/自述文件

给主人留下些什么吧!~~