最近花了2天过了一遍PIL,意图对脚本语言有一个基本印象,并思考出它在游戏程序中的运用。过完PIL后,令我印象深刻的不是它的语言特性,而是这个库本身所代表的设计理念。(LUA首先是一门语言,源代码中有完成语言解释执行工作的虚拟机,并且还有C和LUA交互的库接口)
LUA库分为三个部分:核心,wrapper,add-ons。每个部分的设计和定位都十分棒。
看核心部分,由纯C构成,并且将通讯接口做到最小化。这里不得不再赞赏一下C,作为一种平坦的语言,能用相当明了的接口完成库的任务。在做一个库的设计的时候,首先就要决定把库的任务最小化,遵循KISS原则,一个库只做一件事情。由于核心本身要完成的任务很小,同时由于用C编写,所以会极为容易设计出一个紧凑而正交的接口。LUA的核心就是这个样子的,lua.h。
另一方面,并不是用C就可以设计出紧凑而正交的接口的。对于库来说,如果能把库的功能界定在很小的范围内,那么就不会有甚么问题,但是试图在一个工程中用C设计出紧凑而正交的接口完成工程,基本上很难,因为一个工程通常都不是只打算做一件事情,而是通过好些事情完成任务。
由于LUA核心部分的接口太过紧凑,太过KISS,使用的时候需要补充许多代码,这个时候,wrapper就发挥作用了。wrapper可以用C/C++编写,不再考虑接口的紧凑性,为了实现该库的简易上手可以借用任何手段。作为库的开发者,可以提供一个简单的wrapper,并且可以依靠社区的力量给该库增加各种各样的wrapper,以适用不同目的。lauxlib.h就是这样的wrapper。
add-ons是拓展一个库的功能的关键,依赖于社区的力量,可以使得你的库越来越强大。因此,库的核心部分必须要留出一个add-ons的空位,add-ons一般是基于动态链接库的方式完成。
posted on 2006-10-15 14:47
LOGOS 阅读(1599)
评论(1) 编辑 收藏 引用