快捷搜索:

Lua:崛起之后 这个热门语言何去何从?

【IT168 技术】我其实是非常不想讨论编程语言的好坏的,一个是因为这本身无法定论,就好像非要争论到底是中文好还是英文好一样;另一个是一旦有人谈论程序语言,必然各种声音四起,导致没完没了的“战争”。把以前关于语言的争论打印出来,恐怕可以盖一座摩天大楼了。以下内容只是我个人观点,存在偏见和误解还请原谅,如果有不同观点,可以讨论,我保留态度。

  既然要聊Lua,那么首先需要介绍一下它,Lua是一门设计优雅,轻量、易扩展的可嵌入式脚本语言。提起它,但凡使用过的朋友都会联想到这么几个关键词:轻量、快速、可嵌入等等。

  一门语言想要流行,很大程度上并不取决于语言本身,而是由行业决定的。近年来Lua的流行,不得不承认,很大程度上是因为魔兽世界使用它所带来的影响,但是这也只是达成了大家使用它的前提,如果不是Lua自身的一些特点让大家觉得值得用它,Lua也不会有现在这么火爆。

  我觉得Lua在游戏领域以及嵌入式设备上能够获得那么多人的支持,最主要的原因有3点:

  首先是Lua足够的小。有人说小也能够成为用它的理由吗?在别的领域可能很难让人信服,但是在编写程序上,这绝对有说服力。Lua官网发布的版本,比如Lua5.1,实现的内容包括整个Lua的核心加上几个基本的库,整个实现也就只有2万多行代码,代码量如此的精简,让人不得不佩服Lua作者在追求语言的简练性上所做出的努力。Lua源码采用C语言实现,能够非常容易地嵌入到C\C++的程序中,因为Lua的小巧,你可以根据自己需要来调整Lua的源码,让它满足自己程序的要求,在阅读源码的时候,可以非常清楚得弄明白,语言的内部到底在做些什么,而不必去担心因为引入它而出现一些意想不到的bug。

  第二个使用Lua的原因是它极佳的可移植性。因为Lua使用ANSI C编写而成,这使得它天生就具备极佳的可移植性,我们能够在各种设备的开发上使用它,比如目前最火的手机软件的开发,国内流行的手游开发模式cocos2dx + Lua也证明了这一点。相信在不久的将来,我们能够在更多的设备开发中发现Lua的身影。

  另一个重要的原因我认为是Lua从5.0版本后使用了MIT协议进行发布,这使得几乎所有人都可以把它放进自己的产品中,而不用去担心版权的问题,至少对于商业软件来说,这一点属于必须考虑的问题之一。使用它会不会有法律纠纷,修改它有没有那么自由,这些也是一个有责任的程序员所必须面对的问题。

  Lua语言受到这么多开发者的拥戴,在我看来也是十分正常的。一门程序语言能不能得到使用者的喜爱,最重要的一个标准就是能否拿它实现自己想要的目标。Lua的小巧,代码的精炼,使得它相对于其他庞大的脚本语言来说有着极大的优势,这门语言是否剔除了不必要的冗余结构,是否干净、整洁、KISS,这都是非常重要的,它内部实现的各个模块是否逻辑正交,是否已经达到最简。作为一名程序员,我当然希望我所使用的语言如同数学公理系统一样完美,满足相容、独立、完备的性质。当然,我不是说Lua达到了这样的标准,在我使用过的所有语言当中,我也找不到满足这样标准的语言,但是Lua精简的源码,却是让人眼前一亮。

  不得不说目前Lua用的最火的地方,还是在游戏开发上(当然,像Adobe Photoshop Lightroom这样大量使用Lua的软件也不在少数)。我们看到除了《魔兽世界》、《孤岛危机》这样的PC端大作使用它以外,像《愤怒的小鸟》以及网上流行的开源版本的《Flappy Bird》也使用Lua作为脚本来处理从逻辑到UI的各种工作。

  在我自己的项目当中,也大量的使用到了Lua,无论是作为服务端的逻辑,还是客户端的UI处理,Lua的优势都显而易见,它的各种语言特性让人处处惊喜。Lua的语法虽然谈不上极为简洁,但是写起来是十分舒服的,而且让看代码的人也不会很痛苦,心理负担相对较小;Lua中最重要的数据类型table类型,也让人在使用的时候有一种发现宝藏的感觉,table的实现方式采用数组和散列表的组合,无论是查询效率还是插入效率,都让人满意,至少在处理一般逻辑问题上,table的描述能力和性能是十分强大的;作为一门动态类型语言,Lua的gc处理以及弱引用机制也让人印象深刻;在面向对象方面,Lua自身所具备的机制(比如元表)提供了实现面向对象编程的多种途径;还有Lua的协程机制,对于编写并行逻辑是非常有用的,它让我们可以用同步的方式写出异步回调的逻辑,减少学习的时间,降低使用的成本。

您可能还会对下面的文章感兴趣: