
Lua为什么在游戏编程领域被广泛运用?
用过Lua的都知道,Lua无论在与C/C++数据传递,还是在封装都很方便,API非常简单。同时Lua的许可证和紧凑性(把lib编译进程序即可),都十分利于集成。这些都是Python和V8不能比的。同时,Lua编程学习难度极低。Python虽然容易学,但不简单;JavaScript学习难度不够低。实际上,Lua进入游戏业非常早,早在1998年卢卡斯的《异域狂想曲》(Grim Fandango)中,就首次在游戏领域用到了Lua。十年之前著名的游戏博德之门、猴岛4都用了Lua。至少从开源代码来看,云风对Lua的使用是十分重度的,比如skynet的入口是在Lua上。国内很多游戏对Lua的使用很浅,多是把一些需要经常改的运算放出来给Lua做。
我从另一个角度来回答这个问题。揭示游戏程序框架与Lua关系一个关键的方面。和所有人一样,曾经认为所有脚本语言能嵌入到引擎中都是一样的。直到引擎架构足够复杂的时候,才发现了区别。在将脚本嵌入到本身就要处理多进程、多线程的框架之中时,脚本本身的架构会造成根本性差异,以下讨论都是针对这一点说的。任何一种程序,它所包含的逻辑功能大致和源码规模是相关的。任何一种实用性的语言都不可能比Lua的源码规模更小,而且未来Lua也不会变大很多,原因是——Lua严格限制了自己要解决的问题,从而把语言特性限制在一个非常有限的范围之内。其实要说Python等其它动态语言,谁也没想让自己变得臃肿(又不是Windows),但是事情并不总能按照想象的发展。