【转】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++的古怪语言来捣蛋。
【转】Lua 为什么在游戏编程领域被广泛运用?相关推荐
- 来自reallh大的游戏编程饕餮大餐!
以下超级经典电子图书集合全部是reallh大多年来的宝贵积蓄,现已彻底面向大家无私分享!资源下载服务由电驴提供. 谨代表所有受惠于您的游戏编程爱好者向您致以最崇高的敬意! 分享者:reallh 宣传贴 ...
- 麒麟子Javascript游戏编程零基础教程大纲
大家好,我是麒麟子, 开源项目<幼麟棋牌-四川麻将>(泄漏版叫 <达达麻将>)作者,成都幼麟科技创始人. 开源项目地址(Github与Gitee同步更新): Github ht ...
- 【游戏设计模式】之四 《游戏编程模式》全书内容提炼总结
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/53240330 作者:毛星云(浅 ...
- 【游戏设计模式】之 《游戏编程模式》全书内容提炼总结
转自浅墨毛星云:http://blog.csdn.net/poem_qianmo/article/details/53240330 这是一篇超过万字读书笔记,总结了<Game Programmi ...
- 【游戏编程扯淡精粹】游戏编程设计模式
[游戏编程扯淡精粹]游戏编程设计模式 本文最初写于2018/9/4 毛星云 RIP 如何练习设计模式 基本盘:长期维护一个大型工程,持续积累 维护一个设计模式表格,日常查找使用 多学几门编程语言和编程 ...
- 学习笔记-《游戏编程模式》
<游戏编程模式>全书内容梗概总结 这是一篇超过万字读书笔记,总结了<游戏编程模式>一书中所有章节与内容的知识梗概. 目录与说明 <游戏编程模式>一书中总共介绍了19 ...
- 偶然发现的一篇相见很晚的文章:如何学好游戏编程
今天偶然发现一篇介绍如何学好游戏编程的文章,相见恨晚呀,特转载,转帖地址:http://new.qzone.qq.com/79134054/blog/1226580538#!. <如何学好游戏编 ...
- 有趣的游戏编程学习网站
最近从码农有道上看到几款不错的游戏编程网站: Coding Games 一边玩游戏,一边挑战编程难题.Coding games 支持包括 PHP.C.JavaScript 在内的 20 多种编程语言. ...
- 收集的游戏编程学习路线
现在基本是3D游戏编程,而游戏编程又分为服务器和客户端编程.服务器方面需要掌握SOCKET,多线程,数据库和LINUX技术.而客户端需要掌握的东西就多了,基础不错,如果你将Directx玩会了就OK了 ...
最新文章
- idea怎么找到当前报错的行_科研论文如何想到不错的 idea?
- 用 Flask 来写个轻博客 (26) — 使用 Flask-Celery-Helper 实现异步任务
- CountDownLatch简介
- VTK修炼之道66:体绘制裁剪_Cripping技术
- CentOS7,linux下nginx的安装过程——1.安装pcre与nginx——源码
- [转] c++的多态(一个接口,多种实现)
- Android开发笔记——Android 9发送通知
- 前端学习(682):switch和if else if
- 实验一 分治与递归—全排列 java算法
- cp abe java_CP-ABE环境配置
- 机器翻译简史:八十多年来,人类就是要再造一座通天塔
- Vue:echarts异步加载数据显示
- 如何使用百度云人脸识别服务(V3版接口python语言) (九)批量向人脸库中添加人脸
- 阮一峰 ES6 入门读书笔记(十四):async 函数
- nRF52840 SAADC单通道/多通道采集分析
- 信息学奥赛 java C 选_信息学奥赛(NOIP)入门指南(新家长必读)
- 好用的 Mac 应用程序、软件和工具
- android sqlite 单例模式,安卓SQLite基础使用指南
- 我为什么鼓励你读博士?
- 华为od统一考试B卷【按身高体重排队】C语言 实现
热门文章
- 有18个球,随机放入10个空盒子,求空盒子数量的期望
- 中艺网校修图师学习笔记L1
- IE11兼容vue报错crypto-js缺少“)“[已解决]
- 那个“快播”,彻底没了。。。
- LayUI: 工具条toolbar 绑定事件lay-event
- macOS Big Sur 11 Beta 8 Release Notes 更新记录
- VMware Workstation 7.1 Release Notes
- java-springboot计算机毕业设计基于安卓Android的二手车查询平台APP
- 关于 GRB YUV 介绍
- Qt网络与通信HTTPS(在线翻译工具)