【转】Lua 为什么在游戏编程领域被广泛运用?

作者:杨博
链接:https://www.zhihu.com/question/21717567/answer/19099371
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

历史方面:

《大话西游》用的脚本语言是微软的JScript(JavaScript的一种方言),维护不便bug多,受系统IE版本的影响兼容性差。所以2002年网易开发《大话西游II》时,决定在客户端内嵌别的脚本语言。当时该项目技术负责人云风认为要挑不出名的语言,让做外挂的人搞不懂(《大话西游》一代被外挂《月光宝盒》搞死了),于是就选择了Lua 4.0。

云风在九十年代就开发游戏引擎并建设个人网站(云风工作室),在游戏开发领域声望高。网易《大话西游II》是首个在市场上取得成功的国产网络游戏。所以后来国内游戏开发行业纷纷受此影响采用Lua.

技术方面:

现在,2013年,Lua和其他流行脚本语言Python、JavaScript各分秋色:
  • 语言规范精简、运行时库小。其创始人称Lua是穿过针孔的语言(Passing a Language through the Eye of a Needle),他加入的任何语言特性都能用C API简单的调用。
  • 易于创建受限环境,C语言一端可以控制暴露给Lua脚本的任何功能。我猜这也是《魔兽世界》的插件语言选用Lua的原因。
  • 性能方面,虽然仍然比Python快,但不如V8(谷歌的JavaScript实现)。
  • 协程对于编写并行逻辑,非常有用。而Python、JavaScript都不支持协程,只有StacklessPython、call/cc等方言支持类似功能。
  • Lua的元表很有用。不过我听说Python也支持类似的功能。JavaScript的原型链则只是元表功能的十分之一左右吧。
  • Lua支持弱引用。对于上层逻辑用处不大。但对于底层引擎管理资源,超级有用。JavaScript不支持弱引用;Python支持。
  • Lua有个非官方实现,Luajit,性能不错。
但是回到2002年,Lua和JScript相比,优势很大。
  • 与C/C++交互方便。Lua的C API简洁正交,而JScript的COM接口臃肿繁杂。
  • 高性能。Lua虚拟机实现简单高效,比起JScript,又快又省内存。
  • 开源。云风为了防外挂,后来修改了《大话西游II》的Lua字节码格式,让官方的Lua虚拟机无法兼容《大话西游II》的Lua字节码。如果采用不开源的JScript,就不可能自己修改虚拟机和编译器了。

不过很遗憾,《大话西游II》的Lua 4.0并不支持协程。

------------------------------------------------------------------------

最后我想说,开发游戏并不一定要脚本语言。C/C++这类低级语言写逻辑太不方便,脚本语言能弥补这个缺陷。但如果你的项目主要语言不是C/C++,而是D、Java、Scala、Haskell、Go、C#、F#等性能接近C/C++的高级语言,那么你就不需要额外的脚本语言。王垠写过什么是“脚本语言”,和我的看法基本相同。

当然还有Haxe这种既可以编译成脚本语言,也可以编译成C++的古怪语言来捣蛋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值