作者:杨博
链接: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++的古怪语言来捣蛋。

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

  1. 来自reallh大的游戏编程饕餮大餐!

    以下超级经典电子图书集合全部是reallh大多年来的宝贵积蓄,现已彻底面向大家无私分享!资源下载服务由电驴提供. 谨代表所有受惠于您的游戏编程爱好者向您致以最崇高的敬意! 分享者:reallh 宣传贴 ...

  2. 麒麟子Javascript游戏编程零基础教程大纲

    大家好,我是麒麟子, 开源项目<幼麟棋牌-四川麻将>(泄漏版叫 <达达麻将>)作者,成都幼麟科技创始人. 开源项目地址(Github与Gitee同步更新): Github ht ...

  3. 【游戏设计模式】之四 《游戏编程模式》全书内容提炼总结

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/53240330 作者:毛星云(浅 ...

  4. 【游戏设计模式】之 《游戏编程模式》全书内容提炼总结

    转自浅墨毛星云:http://blog.csdn.net/poem_qianmo/article/details/53240330 这是一篇超过万字读书笔记,总结了<Game Programmi ...

  5. 【游戏编程扯淡精粹】游戏编程设计模式

    [游戏编程扯淡精粹]游戏编程设计模式 本文最初写于2018/9/4 毛星云 RIP 如何练习设计模式 基本盘:长期维护一个大型工程,持续积累 维护一个设计模式表格,日常查找使用 多学几门编程语言和编程 ...

  6. 学习笔记-《游戏编程模式》

    <游戏编程模式>全书内容梗概总结 这是一篇超过万字读书笔记,总结了<游戏编程模式>一书中所有章节与内容的知识梗概. 目录与说明 <游戏编程模式>一书中总共介绍了19 ...

  7. 偶然发现的一篇相见很晚的文章:如何学好游戏编程

    今天偶然发现一篇介绍如何学好游戏编程的文章,相见恨晚呀,特转载,转帖地址:http://new.qzone.qq.com/79134054/blog/1226580538#!. <如何学好游戏编 ...

  8. 有趣的游戏编程学习网站

    最近从码农有道上看到几款不错的游戏编程网站: Coding Games 一边玩游戏,一边挑战编程难题.Coding games 支持包括 PHP.C.JavaScript 在内的 20 多种编程语言. ...

  9. 收集的游戏编程学习路线

    现在基本是3D游戏编程,而游戏编程又分为服务器和客户端编程.服务器方面需要掌握SOCKET,多线程,数据库和LINUX技术.而客户端需要掌握的东西就多了,基础不错,如果你将Directx玩会了就OK了 ...

最新文章

  1. idea怎么找到当前报错的行_科研论文如何想到不错的 idea?
  2. 用 Flask 来写个轻博客 (26) — 使用 Flask-Celery-Helper 实现异步任务
  3. CountDownLatch简介
  4. VTK修炼之道66:体绘制裁剪_Cripping技术
  5. CentOS7,linux下nginx的安装过程——1.安装pcre与nginx——源码
  6. [转] c++的多态(一个接口,多种实现)
  7. Android开发笔记——Android 9发送通知
  8. 前端学习(682):switch和if else if
  9. 实验一 分治与递归—全排列 java算法
  10. cp abe java_CP-ABE环境配置
  11. 机器翻译简史:八十多年来,人类就是要再造一座通天塔
  12. Vue:echarts异步加载数据显示
  13. 如何使用百度云人脸识别服务(V3版接口python语言) (九)批量向人脸库中添加人脸
  14. 阮一峰 ES6 入门读书笔记(十四):async 函数
  15. nRF52840 SAADC单通道/多通道采集分析
  16. 信息学奥赛 java C 选_信息学奥赛(NOIP)入门指南(新家长必读)
  17. 好用的 Mac 应用程序、软件和工具
  18. android sqlite 单例模式,安卓SQLite基础使用指南
  19. 我为什么鼓励你读博士?
  20. 华为od统一考试B卷【按身高体重排队】C语言 实现

热门文章

  1. 有18个球,随机放入10个空盒子,求空盒子数量的期望
  2. 中艺网校修图师学习笔记L1
  3. IE11兼容vue报错crypto-js缺少“)“[已解决]
  4. 那个“快播”,彻底没了。。。
  5. LayUI: 工具条toolbar 绑定事件lay-event
  6. macOS Big Sur 11 Beta 8 Release Notes 更新记录
  7. VMware Workstation 7.1 Release Notes
  8. java-springboot计算机毕业设计基于安卓Android的二手车查询平台APP
  9. 关于 GRB YUV 介绍
  10. Qt网络与通信HTTPS(在线翻译工具)