【在主画面加入捷径】
       
【选择语系】
繁中 简中

技术杂谈:Lua 小感

【赞助商连结】

    虽然 Lua 不是一个主流语言,我们可能会在不经意的情况下接触到 Lua,像是 Corona (原 Corona SDK)、Cocos2d-x、Gideros Studio、Defold、World of Warcraft 外挂等。由于 Lua 的执行环境很小,很容易内嵌在其他软件中,很多游戏引擎或其他软件选择 Lua 做为脚本语言。由于 Lua 不是一个主流的语言,可能会让人迟疑是否要使用这些 Lua 相关的软件。笔者先前以 Corona SDK 开发了一个项目,刚好来谈谈 Lua 这个语言。

    整体来说,Lua 相当易学,这也是当初 Lua 设计的目标之一。有程序设计经验的 Lua 使用者,可以在几周内就学完大部分的 Lua 语法,开始将 Lua 用于自己的项目。以笔者为例,笔者非资工、资管背景,有学过几种程序语言,大约一个月左右,就可以自行用 Lua 撰写套件及开始用 Corona SDK 制作项目。

    Lua 最好的教材是官方出版的 Programming in Lua 和 Lua Reference,购买这些书,还可以顺便支持一下 Lua 的发展。另外可以看看 Learn Lua for iOS Games Development,这本书前半部介绍 Lua 语法,后半部介绍 Lua 相关的游戏引擎和 Lua 生态圈,可做为补充教材。如果没有要用 Lua 写物件,仅仅撰写小型脚本,倒也不一定得买书不可,可以找一些网络上的教程,再自行搭配一些练习题,像是 Exercises for Programmer 等,很快就可以熟悉 Lua。

    Lua 现存的版本,大概可分为 5.1 和 5.3 两个版本,这两个版本的 Lua 语法和 C API 都有些许差异。由于 Lua 主要用于内嵌在其他软件中,追着官方最新的版本跑其实没有必要,有些软件仍然使用 5.1 版。某些软件会用 LuaJIT 这套非官方 Lua 实现品,这是因为 LuaJIT 的效能大约是官方版本的 5 至 50 倍之间。LuaJIT 大约兼容于 Lua 5.1 至 5.2 版之间。以目前来说,守在 5.1 版反而程序兼容性较佳。

    虽然 Lua 有套件的机制,但 Lua 套件数量和 Python 或 Java 等主流语言相差甚远,根据 LuaRocks 的统计,到 2016 年,LuaRocks 上公开套件仅为 2,000 个左右,相比之下,Python 已有数万个公开套件。由于 Lua 是内嵌语言,不同软件各自提供不同的 API,可以把这些软件视为互不相通的框架。所以,在选择这些 Lua 相关软件 (框架) 时,最好先浏览一下该软件的 API 文件和外挂机制,确认该软件有足够的特性来支援自己的项目,换框架意味着要重写一大部分的程序代码,能够预先避免掉这样的情形会比较好。

    就像其他的高阶直译语言,Lua 虽然好写,随着项目规模成长,调试相对困难。有时候,真正的错误不是发生在 Lua 报错的行数,其实是在更早之前的错误引发一连串的异常行为。说实在的,没有什么捷径,还是得耐心地回溯程序代码调用的过程,逐步检查程序状态的变化,渐进地缩小可疑的程序代码区块。透过静态程序代码检查和测试程序,可以将 Lua 的缺点缩减,使得开发 Lua 更加愉快。

    进阶的 Lua 使用者,会将 Lua 和 C 或 C++ 结合,Lua 的 C API,相对于其他高阶语言的 C API 更加容易,这也是 Lua 设计的目标之一。不过,如果读者只要用现有的框架所提供的 API,不一定会用到这部分的功能,笔者目前也较少使用这方面的特性。

    由于 Lua 主要做为内嵌用语言,通常不会是程序设计者的主要工具。不过,Lua 相当容易上手,倒也不需要对这个语言感到害怕。经过一小段时间的学习后,就可以把 Lua 应用在自己的项目。通常我们不会用 Lua 实现全部的程序,而会将需要效能的部分用 C 或 C++ 撰写,所幸,Lua 和 C 或 C++ 桥接不会太困难。

    [Update on 2017/11/26]
    最近笔者又开始撰写 Lua 程序,因为回锅用 Corona SDK 撰写 apps。其实用 Lua 写程序很快,主要是 Lua 的核心概念够简单,不需要记忆过多的语法特性,可专注在实现程序逻辑上。此外,以动态类型语言来说,Lua 的执行速度算是蛮快的。而 Lua 难以调试的特性基本上是动态类型语言常见的通病,相对应的解决方法是透过静态程序代码检查和测试程序来检查程序代码,笔者在这里提到如何加入这些工具,需要的读者可以前往参考。

    [Update on 2017/12/19]
    笔者最近新增 Lua 程序设计相关的教程 (tutorial),欢迎前往参观

    [Update on 2018/09/04]
    笔者最近在这里新增 Corona SDK 相关的教程,欢迎有需要的读者前往阅读。

    【赞助商连结】