#杂
这几天韦易笑在知乎问题
《为什么 lua 在游戏开发中应用普遍?》下的回答很火,引来了一些讨论,我也想聊聊我的看法。
我觉得任何产品肯定都是时代的产物,时代的局限性本身就是产品的一部分特性。Lua诞生在上世纪90年代,我记得当年即便是比尔盖茨好像也说过PC电脑只要8MB内存就够了这样的话。在这样局限的硬件环境下诞生的Lua,其特点(卖点)就是小巧精干。换言之,我认为如果都是发展了N年之后的视角再去对比一个诞生于更早之前、诞生环境更严苛的产品,并不算很公平。
回到Lua本身,Lua可能是所有语言里,既能拿来写纯文本配置,又能拿来写代码逻辑且轻量的脚本语言(欢迎补充其它方案)。比如XML、Json等只能称之为“格式”,也就是只能用于表达数据,没办法表达逻辑;其他脚本语言就只能用来表达逻辑,纯表达文本类型的数据也有点困难。
而Lua,恰好两个都能做,这个特点成为了它被时代(再次强调“时代”)选中为那个胶水语言的重要原因。在一些游戏里,想写个插件,里面包含一些配置数据,还有一些插件本身的逻辑,这时候如果要用一个数据格式,还要用一个语言就比较麻烦了,这些麻烦很可能一下子就挡住了那些非程序员的插件开发者。
除此以外,Lua还能实现协程,在早年C、C++没有好的协程方案的时候,这个特性可是太重要了,有了协程的支持就可以用同步的编程方式写异步的代码逻辑。
总而言之,我认为放到上世纪90年代诞生的一门常年只有2W行C代码的脚本语言来说,Lua已经够优秀了。今天对它的很多挑剔,多少有点“关公战秦琼”的意思。
另外,用户自己最后会用脚投票的,谁最有生产效率、综合开发起来最舒服、相关领域的生态更好,等等因素,最后用户自己会实打实地用自己的实践去投票。
最后,Lua的这个既能做为数据格式、又能用来写逻辑的特点,有一点像Sqlite:
* Lua:恰好有一点编程能力的文本文件。
* Sqlite:恰好有一点存储、索引、查询能力的单文件。
这种“单一文件”特性放到嵌入式领域就很吸引人,“单文件”意味着便携(portable)。