第6章 使用Lua语言进行脚本开发
6.1 Lua语言介绍
1993年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Ja—neiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里代表美丽的月亮。事实证明它没有糟蹋这个优美的单词,Lua语言正如它名字所预示的那样成长为一门简洁、优雅且富有乐趣的语言。
Lua从一开始就是作为一门方便嵌入(其他应用程序)并可扩展的轻量级脚本语言来设计的,因此它一直遵从着简单、小巧、可移植、快速的原则,官方实现完全采用ANSI C编写,能以C程序库的形式嵌入到宿主程序中。Lua的每个版本都保持着开放源码的传统,不过各版采用的许可协议并不相同,自5.0版(最新版是5.1)开始,它采用的是著名的MIT许可协议。正由于上述特点,Lua在游戏开发、机器人控制、分布式应用、图像处理、生物信息学等各种各样的领域中得到了越来越广泛的应用。其中尤以游戏开发为最,许多著名的游戏,比如Escape from Monkey Island、World of war—craft、大话西游,都采用了Lua来配合引擎完成数据描述、配置管理和逻辑控制等任务。
作为一门过程型动态语言,Lua有着如下的特性:
(1)变量名没有类型,值才有类型,变量名在运行时可与任何类型的值绑定;
(2)语言只提供唯一一种数据结构,称为表(table),它类似key—value关联数组,可以用任何类型的值作为key和value,提供了一致且富有表达力的表构造语法,使得Lua很适合描述复杂的数据;
(3)函数也是一种类型,支持匿名函数和正则尾递归(proper tail recursion);
(4)支持词法定界(lexical scoping)和闭包(closure);
(5)提供thread类型和结构化的协程(coroutine)机制,在此基础上可方便实现协作式多任务;
(6)运行期能编译字符串形式的程序文本并载入虚拟机执行;
(7)通过元表(meta table)和元方法(meta method)提供动态元机制(dynamicmeta—mechanism),从而允许程序运行时根据需要改变或扩充语法设施的内定语义;
(8)能方便地利用表和动态元机制实现基于原型(prototype—based)的面向对象模型;
(9)从5.1版开始提供了完善的模块机制,从而更好地支持开发大型的应用程序。