我们认为已经达到了这些既定的目标。 Lua 是一种高度可移植的语言: Lua
运行在各类有 ANSI C 编译器的平台上,从嵌入式系统到大型机。 Lua 真的是轻
量级的: 在 Linux 上 Lua 解释器和完整的标准库总体小于 150KB
;
Lua 内核小 于
100KB 。 Lua 是高效的:对比测试表明, Lua 是脚本语言(如解释型语言和动态
类型语言) 家族里执行速度最快的。 也可以认为 Lua 是一门简洁的语言, 语法 类
似 Pascal ,语义有点像 Scheme ,当然,这只是我们自己的观点。
3. 值的内部表示
Lua 是动态类型的语言:类型是与值而不是与变量相关。 Lua 有 8 种基本 的
值类型: nil , boolean , number , string , table , function , userdata 和 thread 。 nil
类型是个标记类型,只有一种值,就是 nil 。 B oolean 类型的值有 true 和 false 两
种值。 number 类型是双精度的浮点数,对应于 C 语言中的 double ,但这不是绝
对的,可以通过重新编译 Lua 来将其重设为 float 或 long
型。 (一些游戏终端和
小型机缺乏支持 double
数据类型的硬件。 )
string 是字节数组,有一个显式的长
度,因此可以容纳任何二进制数,包括 0
。
table 是关联数组,可以通过任何( 除
了 nil ) 值来索引, 也能容纳任意值。 function 可以是 Lua 函数或根据 Lua 虚拟 机
接口函数的原型编写的 C 函数。 U serdata 实际上是一个指向用户内存块的指针,
分两种情况: heavy ,内存由 Lua 分派,并由垃圾回收机制负责处理, light ,内
存由用户分配并释放。最后是 thread 类型,它代表协程。任何类型的值都是 firs t-
class 的 : 可以将其存入全局变量、 局部变量或 table 域中, 或作为实际参数传递 给
函数,或从函数中返回值,等等。
Lua 将值表示成带标志的联合结构,即, ( t , v )对,其中 t 是个整数,代 表
值 v 的类型, v 是一个 C 语言 union 类型数据结构,它存储有实际的值。 nil 型
只有单个值。 boolean 和 number 实现为未包装的值: v 直接对应于 union 中由 t
指示的域。这意味着 union 必须有足够空间容纳一个 double 型。 string , table ,
function , thread 和 userdata 型数据通过引用来实现: v 中含有一个指向结构的 指
针,该结构实现由 t 指定的类型。这些结构共用一个头结构,头结构中含有垃 圾
回收所需的信息。结 构的剩余部分包含的信息对应于指定的数据类型。
图一显示了实现 Lua 值类型的代码片段, TObject 是实现 Lua 值类型的主 要
评论0