别把语言当信仰

上次在公众号里发了条消息,有好多人问知乎上的争论是什么?其实没什么,只是在一个讨论unity里嵌入lua的话题里,有人说如果官方能提供原生的热更新解决方案,所有嵌入Lua的这些unity框架都得死,言下之意就是我C#各方面都碾压你Lua,我用你只不过是因为你可以暂时帮我解决热更新问题。

 

关于这个话题,并不想讨论孰是孰非。凭心而论,每种语言其实有它的适用环境,比如要快速做一个小工具,我首选会采用Python,因为三方库非常齐全。但如果对实时性有很高要求可能我会改用C/C++去实现核心模块,但如果写游戏的业务逻辑我会采用Lua,因为语言本身简洁,约束少,更灵活。

 

当然每个人对所谓的语言适用环境的理解都不一样,比如曾经的我就觉得C++可以搞定一切,也正应验了那句话,拿惯了锤子,看一切都是钉子。所以最开始我因为项目原因接触Lua的时候也只不过是将它当作了无须编译的C++来编写,还特意为了能让Lua实现一些C++的特性去写了一堆勉强算作中间层的代码,那时候我认为这就是跨语言的编程思想,语言并不能对我构成障碍。

 

但后来随着自己开始独立承担整个项目,我开始面临项目语言的选择这样一个问题的时候,我不禁开始反思,C++真的是最合适的语言么?并且在潜移默化间习惯了Lua的表这种方便的数据结构后再回头看C++,突然觉得在实现各种游戏逻辑业务的时候,C++的STL实在是有点刻板和笨重。在处理有些异步事务时,一个协程几行代码就能讲清楚的逻辑换做C++来写,既啰嗦冗长还不便于阅读。还有回调逻辑,由于匿名函数和闭包的缺失(那时候C++11还没出台)用使C++写个回调真是又累限制又多(参数限制)。这时候我开始认识到,哦,原来每个语言都是有自己的魅力的。

 

再到后来,我又陆续接触了Python,JS,Scheme,Haskell,C#,当然有些语言并不是为了解决什么问题,而是纯粹为了感受下这些语言给我们带来的不一样的思维。(比如Scheme和Haskell,强烈推荐使用Lua的朋友一定要去体验下Scheme这门语言,因为Lua很多地方都有借鉴它)

 

最后来说信仰。信仰这个东西它会令你非常有归属感,但是它也会给你加上一个无形的枷锁,让你排斥这个信仰之外的东西,看看一些极端穆斯林们对非穆斯林的表现,算是比较极端了。然而即便是穆斯林内部,逊尼派和什叶派也是互掐的一塌糊涂,基督教也是,天主教东正教互相开除对方教皇。

 

写代码本来是件简简单单的事情,为什么也要搞出个XXX是世界上最好的语言呢?寻找语言的归属感,其实我觉得还有一个词更合适——思维懒惰。也许有人要问,那为什么要做这个公众号?就像说明里说的,只是希望借此让更多人了解并喜欢上这门语言,也能够发现同样喜欢这门语言的人,仅此而已。并不是要宣传鼓吹Lua是宇宙语言。