« 看到一句话,心有戚戚 | 返回首页 | 贴两张前段去度假时拍的照片 »

魔兽世界的影响力

晚上一个小朋友在 gtalk 上问我编程语言专注哪一门好。当然这不是一个简单能回答的问题。尤其对刚上大学的小朋友不太好解释清楚。

不过睡觉前我还是八卦了一下当今世界编程语言的流行程度排名。查了下 TIOBE 的排行榜。首先映入眼帘的加黑的头条:Lua only 0.003% away from top 20 position

不得不感叹魔兽世界的影响力啊。(同事语: wow 让阿猫阿狗都开始写 lua 程序了)回想 05 年的时候,Lua 可是排在 70 多位的。

我们在 01 年底为大话西游2 选择一门嵌入式脚本语言的时候,考察了 lua python java javascript ruby 等许多开源动态语言(java 是个例外,而且 java 不开源,但还是可以找到一些 JVM 的开源代码)。最后定下 lua ,其中一个原因就是它不太为人所知。反逆向工程可能可以方便一点,真没想到今天会是这个局面。(当然,那个时候 python 和 ruby 在国内用的人也相当的少)

是金子总会闪光的 :D

ps. 语言之争总是火药味十足的。lua 在游戏开发圈子的影响力倒不完全是来至于魔兽世界。GDC2004 的一个 round table 上,lua 和 python 哪个更好的争论就是相持不下。第一天吵完了,第二天继续吵 (._.!)

GDC 2005 时,lua 的相关节目多了好多,不过我就没去瞎参合了。想来那时有了魔兽世界,lua fans 的腰板该是硬了许多。

Comments

语言,只是一个工具而已。 只分适用不适用、喜欢不喜欢,何来好坏优劣之分?如果你能对你的工具产生感情,我只能说你未免太多情了,也未免太自作多情了。 如果你写过两三年的代码之后,你仍然说你只会用Java而不会用C#,只会用Lua而不会用Python,那我只能说:你小子除了上班应付工作之外,就没好好对待过你那耐以生存的手艺,出了你现在所在的公司,你将和一名刚毕业的新人没多大分别。 小盆友们,继续努力吧。
学习下、、
嗯,回答7楼的cloud兄:金山确实在使用lua,主要用来实现服务端游戏逻辑控制。我能透露的就这么多了。
呵呵,又下去了。时间会证明一切的。
阿猫阿狗写的,基于Lua的内存数据库。 http://code.google.com/p/ulimdb/ 目前刚起步,不知道能做到什么程度。 期待交流。。。
前阵子我也准备在我们开发的核心路由器上加上脚本语言。主要是方便硬件测试人员可以随时写点小脚本调用一些东东,省得老来烦我们驱动人员给他们写调测程序。 不过在选择脚本语言的时候,发现也就lua,python,javascript可以考虑。因为像php,ruby这些协议不够开放,用了之后还得开源。公司严禁产品中使用GPL的代码。 最后我从firefox里把javascript的解释器移植到了vxworks上,还蛮好玩的。嘿嘿。
我对lua的了解源自大话西游II
本人愚见,想提出一些不同看法,指出lua的一些缺点,以供大家参考: 1.lua编写的程序是以源代码的方式随附应用程序发布,而不是二进制方式,对于lua程序的保密性不够 >>> 可以编译成binary的,甚至还可以编译成native code。只是你不知道。 2.语法形式丑陋,特别是在定义类及其成员时,简直是惨不忍睹. >>> 那叫meta机制,让你有更多的控制权。如果你不会用,认为麻烦,那是另外一回事情,不是语言的问题。 3.代码段不实施只读保护,当不慎将一些数据写入代码段,很难调试. >>> 请问,怎么可以“不慎将一些数据写入代码段”?? 4.不支持条件编译,无法建立debug和release环境 >>> 开玩笑,你懂不懂什么叫解释性语言吗?语言中的if-else就是天然的“条件编译(这里引号,事实并没有明确的编译步骤)” 5.没有switch语句 >>> 还没有goto呢…… 6.堆栈不能随时增长和收缩,一旦引发堆栈溢出,很难调试. >>> 还是请问,如何做到这点,我很想知道。另外,如果做了,请问你知道还有啥语言可以避免这点? 7.luaVM指令集特小,很容易被破译. >>> 这真是一个悖论。因为小,所以高效。你怎么不说它高效呢?显然有主观情绪。 8.不支持Unicode >>> 1)Lua的string是一个raw buffer,随便你放啥,UTF-16编码的字符串也可以; >>> 2)Lua依赖于C语言和CRT,字符串操作取决于C locale; >>> 3)可以使用UTF-8,就像PHP string、python string那样。 9.库少得可怜.与Windows的库交互也不是非常直接,要解决所谓marshal和unmarshal问题. >>> 这本来就是Lua的创立之本,是它的哲学之一:只依赖于ANSI C。Lua标准库几乎全来自于CRT。扩展库多得吓死人,你找过几个? 10.好像也不支持多线程机制. >>> 支持用户态的多线程(非抢先的)--coroutine。 11.lua的轻巧只是给您表面上的感觉,在载入源码并在内部建立语法分析树时,却是吃内存的大户. >>> 开玩笑,你做过测试比较吗?没有的话,看看这里:http://shootout.alioth.debian.org/ 12.没有Assert(断言)机制. >>> 真要骂你了…… 13.很难维护,当编写lua源程序的程序员跳槽时,他的继任者很难看懂和维护前任程序员的lua源码.这是动态语言的通病. >>> K.A.O,彻底地、绝对地……
保存和连接操作是没问题,但是format就不支持Unicode
楼下提出的 lua 的缺点,几乎每一条我个人都不赞同 :D 逐条说太累也没啥意义。我想得出这些结论是由于不太了解 lua 或是站在 C like 的语言立场上的缘故吧。当然我的反对也是出于 lua fan 的立场。 这里拣几条容易说清楚的讲: 条件编译不是语言本身该做的活,尤其是需要保持语言的轻巧。我们都用 M4 来轻松解决这个问题。 lua 支持二进制发布。 lua 支持 unicode 。魔兽世界的插件的源码全部是 UTF-8 的, lua 的 string 可以安全保存 UTF-16 编码。 lua 支持多线程安全,看见 `lua_lock` `lua_unlock` 两个宏没有?自己定义一下,重新编译一次 :) lua 可以把代码写的很漂亮,也可以写的很丑陋,包括面向对象的实现。读一下 pil ,它只是提供了一种 OO 的实现方法。 用 table + closure 可以相当美观的实现等效于 C 中 switch 的功能。
本人愚见,想提出一些不同看法,指出lua的一些缺点,以供大家参考: 1.lua编写的程序是以源代码的方式随附应用程序发布,而不是二进制方式,对于lua程序的保密性不够 2.语法形式丑陋,特别是在定义类及其成员时,简直是惨不忍睹. 3.代码段不实施只读保护,当不慎将一些数据写入代码段,很难调试. 4.不支持条件编译,无法建立debug和release环境 5.没有switch语句 6.堆栈不能随时增长和收缩,一旦引发堆栈溢出,很难调试. 7.luaVM指令集特小,很容易被破译. 8.不支持Unicode 9.库少得可怜.与Windows的库交互也不是非常直接,要解决所谓marshal和unmarshal问题. 10.好像也不支持多线程机制. 11.lua的轻巧只是给您表面上的感觉,在载入源码并在内部建立语法分析树时,却是吃内存的大户. 12.没有Assert(断言)机制. 13.很难维护,当编写lua源程序的程序员跳槽时,他的继任者很难看懂和维护前任程序员的lua源码.这是动态语言的通病.
个人感觉在WoW之前lua在游戏领域的地位就基本确定了。总之,俺喜欢lua.
其实这些脚本语言都非常类似,都出自Lisp系,本质都一样,区别仅在于代码风格,说到风格我比较喜欢javascript。 不过我现在越来越不喜欢动态类型语言了,用了JAVA/C#的话这些脚本纯粹是多余的。
游戏里用脚本就得用Lua,轻巧这一点,最符合游戏的特点了
游戏里用lua当脚本的显然是最多的。好像听一个德国朋友说cryEngine也用
有次在 lua 的 mailist 曾经跟一个牛人讨论过一点问题。后来 google 了一下,似乎是 photoshop 的构架师。 adobe 赞助了几年的 lua 交流会。 lua.org 上可以找到很多用 lua 做的项目。http://www.lua.org/uses.html 国内不清楚,据说金山有用过。
java 是静态类型的,把 java 放在一起列出来, 只是当年放在一起考察而已。
说Java是动态语言好像有些怪怪的。国内还有什么公司用Lua的吗? Cloud有没有注意Second Life所用的Linden?什么评价?
因地制宜。常听OO fans鼓吹游戏脚本用python。这些人显然不是真懂OO,而是叶公好龙。所谓"知道它不能做什么的人比知道它能做什么的人更了解这样东西"
lua 那个时候是小语言,不特意去查,估计很难注意到。 不过当时 python 倒是有点名气了,这源于 zope 的小有名气。 当时有同事跟我推荐 python 的时候,说是跟 java 差不多的东西。现在回想起来,python 跟 java 还是差的满远的 :)
01年你就知道lua了,太牛了。那时候Python我都没听说过
hehe,什么时候中国游戏也有这样的影响力就好了

Post a comment

非这个主题相关的留言请到:留言本