当前位置:首页 期刊杂志

Lua——以总统为名的移动开发语言新贵

时间:2024-07-28

杨杰

(武汉职业技术学院电信学院,湖北 武汉 430074)

Lua
——以总统为名的移动开发语言新贵

杨杰

(武汉职业技术学院电信学院,湖北 武汉 430074)

本文为移动设备编程人员介绍了一种简单、轻量的编程语言——Lua,介绍了这种编程语言的来历,详细分析了Lua语言的编程特点,最后介绍了Lua语言在移动设备开发的应用。

Lua;脚本语言

1.Lua简介

2014年3月,Tiobe公布了最新的编程语言前20位排行榜,和2012年榜单相比,Lua语言从21位升到19位有较大的升幅。

表1 2013年编程语言排行榜

Lua到底是什么编程语言呢?本文以Lua语言为主题,介绍这款以巴西总统的名字命名的移动开发语言新贵。

1993年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里代表美丽的月亮。事实证明它没有糟蹋这个优美的单词,Lua语言正如它名字所预示的那样成长为一门简洁、优雅且富有乐趣的语言,图1为Lua语言的标识。

图1Lua语言

当初巴西里约热内卢天主教大学的师生为什么要给这款语言起名为“Lua”,很大程度上是向巴西著名政治家、前任总统路易斯·伊纳西奥·卢阿·达席尔瓦致敬。卢阿总统是巴西历史上学历最低,但是支持率最高的总统,深受人民爱戴。作为巴西国家电子领域最重要的人才培养基地的里约热内卢天主教大学计算机研究生院把他们在计算机世界中最重要成就“Lua”语言与他们总统同名,可见他们对Lua语言给予了多么大的希望。

Lua从一开始就是作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,因此它一直遵从着简单、小巧、可移植、快速的原则,官方实现完全采用ANSI C编写,能以C程序库的形式嵌入到宿主程序中。Lua的每个版本都保持着开放源码的传统,不过各版采用的许可协议并不相同。自5.0版(最新版是5.2)开始,由于采用的是著名的MIT许可协议,Lua在游戏开发、机器人控制、分布式应用、图像处理、生物信息学等各种各样的领域中得到了越来越广泛的应用。其中尤以游戏开发为最,许多著名的游戏,比如魔兽世界、博德之门、愤怒的小鸟、大话西游,都采用了Lua来配合引擎完成数据描述、配置管理和逻辑控制等任务。

Lua是一个被设计成用于扩展C/C++编程的轻量级脚本语言[3],它的目标是成为一个很容易嵌入其它语言中使用的语言。Lua让C/C++编写的代码调用Lua脚本,同时C/C++函数也能够在Lua脚本中调用。与C/C++代码的交互性,让Lua在应用程序开发中有着广泛的应用基础。很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。

2.Lua的特点

2.1 可以和C/C++语言集成

很多种语言包括Lisp、Scheme、Python、Perl、Bash、VBA、SQL等等,它们没有一个可以像Lua那样可以和C语言混合使用。C语言的API非常干净和直观,程序员花很短的时间就可以上手。

为什么这个特性很重要呢?首先,如果你有现成的C/ C++类库,可以很容易地在Lua中调用这些API。或者也可以写一个脚本让Lua在C中执行。这也意味着Lua的程序不会有速度问题。如果还是觉得Lua不够快的话,可以用C完全重写这段代码。虽然别的语言的程序也可以用C重写,但是还没有发现谁能比Lua更方便地做到这一点。

可扩展的Lua并不像其它许多“大而全”的语言那样,包括很多功能,比如网络通讯、图形界面等。但是Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。

2.2 快速、简洁

相比于其它语言,Lua的实现是非常高效的。也许是因为Lua使用的是“基于寄存器的虚拟机”,而不是基于堆栈的虚拟机。你几乎不需要顾虑Lua代码的性能问题。

轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快,从而适合嵌入在别的程序里。5.0.2版的Lua的内核小于120KB,而Python的内核大约860KB,Perl的内核大约1.1MB[4]。

Lua的语法类似PASCAL和Modula,但更加简洁,所有的语法产生式规则(EBNF)不过才60几个。熟悉C和PASCAL的程序员一般只需半个小时便可将其完全掌握。而在语义上Lua则与Scheme极为相似,Scheme的continuation与协程也基本相同,只是自由度更高。最引人注目的是,两种语言都只提供唯一一种数据结构:Lua的表和Scheme的列表(list)。正因为如此,有人甚至称Lua为“只用表的Scheme”。

2.3 教育作用

虽然这不是一个编程语言的功能,但是使用Lua可以使得程序员对计算机科学的整体了解有所提高,使程序员对虚拟机是如何实现的有了一个了解。这一切都得益于Lua有条不紊的改进。

2.4 函数式编程

Lua提供了函数式编程的架构,让编程更加有趣。例如anonymous functions,higher order functions,lexical closures,proper tail calls等等。这些特性不是语言的一些语法糖,而是Lua从底层就整合了这些特性。比如说,Lua的每一个方法都是一个值(比如数字2,或者字符串“ktr”),也就意味着每一个方法都是匿名的。你只要给它取个名字,然后你就可以调用它了。比如可以给print重新赋值:

print=math.sin

程序员可以利用这个功能创建沙箱。如果print是一个危险的操作,可以替换成自己的print方法或者从全局中删除这个方法。

2.5 任何东西都是一张表

在Lua中,任何一个变量类型都是一张表,例如Array,Hash,“module”或者全局变量等等。也就是说你可以“require”一些模块(类似Python的import语句)并且把结果当作table来处理。在Python中,你可以__import__('...')一些模块,然后返回值的变量就可以通过类似var(module)的方式来访问。在Lua中,你可以通过module[var]的方式来访问模块中的变量。这里提到Python是为了强调不同之处,说明Lua更容易使用。

2.6 一致性

Lua是非常一致的语言。它的很多功能都是做得恰到好处。比如说,Lua没有“for”循环。直到Lua 4.0,也就是Lua语言发布7年以后才有“for”循环。这是因为while循环更为通用,而且语法更简洁。Lua的开发团队相对来说比较保守,他们不接受patch,所以Lua的进化比较缓慢,但是比较平稳。我们知道所有的功能都是有规划的在进行,也就意味着我们不能指望所期待的功能可以被很快地实现。

2.7 可移植性

Lua基本上可以在任何环境中运行。Lua的代码是按照“Clean ANSI C”的标准编写的,所以如果你有一个C的运行环境,你就可以运行Lua。

3.Lua语言在移动设备开发中的成功

2011年一个小鸟保卫鸟蛋的游戏——《愤怒的小鸟》让Lua语言风靡开发者的世界。以快速小巧著称的Lua拥有在目前所有脚本引擎中最快的运行速度,这样的特性让Lua成为用作嵌入式脚本的最佳选择。但是,Lua语言被人们所熟知还要追述到2010年乔布斯的苹果将Lua语言引进iOS平台,直到现在已经有很多iPhone的应用写入到Lua中。而Lua语言凭借其代码几乎能在所有操作系统和移动终端上编译运行的这一特性,不但可以在iOS这一移动平台开发,同样也可以在Android等其它平台上开发。有了Corona SDK以后Lua语言不但可以支持iOS,还可以支持Android平台。以上这些原因使Lua语言在Tiobe编程语言排行榜上迅速攀升,成为移动开发领域的新贵。

4.总结

Lua是一种非常简单但是强大的编程语言。随着应用程序的需求不断增加,程序员需要不断改变程序的结构。如今,许多程序员在用两种不同的语言编程:一种是用于编写一个功能强大的“虚拟机”,另一种是用于基于单机的程序。Lua作为一种优秀的编程语言,专为后者服务。Lua语言适用平台小到PC-DOS大到CRAY大型机。它的语法简单、语义简单,是一种灵活的编程语言。

[1]TIOBE Programming Community Index.TIOBE Programming,2014.

[2]lua官方网站.

[3]LuaJIT 2.0正式版发布. Lua编译器.中国Linux联盟,2012.

[4]Paul Schuytema,Mark Manyen.Lua游戏开发实践指南(Game Development with Lua)[M].北京:机械工业出版社,2013.

[5]姚蕾.基于LUA语言的趣味游戏设计[J].数字技术与应用.2013,(6).

Lua——The Upstart Mobile Development Language In the Name of the President

Yang Jie
(Wuhan Polytechnic,Wuhan 430074,Hubei)

This article describes a kind of mobile device programmer language-Lua.Lua is simple and lightweight.This article describes its origin,and analyzes its programming features.Finally,it describes its application in mobile device development.

Lua;scripting language

杨杰,男,湖北潜江人,硕士,讲师。研究方向:电子信息技术。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!