[翻译] Lua 做对了什么?

来自邮件列表的旧文一篇,不过很有料。加上最近正好大量用到 Lua,所以翻译出来。说实话,跟 Go 配合的 Lua 的封装,比已有的 Python 封装要好用很多。

————翻译分隔线————

主题:回复:Lua 做对了什么?
发信人:Miles Bader
日期:2012-04-09 星期一 17:03:27 +0900

Emeka 写到:

> 大家好,
>
> 我是一名南森大学的学生,我选择了 Lua 语言作为业余爱好。
> 我想知道到底是什么让这个语言与众不同?
> 它为编程语言带来了什么?还有特别的特性。
>
> 此致,\Emeka
> —
> *Satajanus Nig. Ltd
>
> *

这里有我在 stackoverflow 上写的答案,提供了一些我喜欢 Lua 的原因(实际上问题本来是“Lua vs. lisp”,因此答案也是围绕这个内容)。

http://stackoverflow.com/questions/7919763/lua-vs-embedded-lisp-and-potential-other-candidates-for-set-based-data-processi/7927730#7927730

Lua:

1. 不论是源代码还是二进制文件都很小,比起许多流行语言(比如 Python)小了一个数量级以上。Lua 的代码是如此的小,而且简单,如果想避免额外的依赖,这是一个非常好的理由,把整个 Lua 实现囊括到代码树里。

2. 非常快。Lua 的解释器比大多数脚本语言的都要快很多(通常快一个数量级是很常见的),而 LuaJIT2 对于一些流行的 CPU 架构(x86、ppc)来说也是非常优秀的 JIT 编译器。使用 LuaJIT 通常可以再提升一个数量级的速度,在许多情况下,结果会接近 C 的速度。可以使用 LuaJIT 透明的替换标准 Lua :无需修改任何应用或用户代码就可以使用它。

3. 有 LPEG.。LPEG 是 Lua 的“Parsing Expression Grammar”库,不论是大小任务,都可以很容易的完成强大的、快速的解析;它是一个很好的 yacc/lex/hairy-regexps 替换。(我使用 LPEG 和 LuaJIT 写过一个解析器,比我尝试用 yacc/lex 模拟的解析器要快很多。)LPEG 是 Lua 的附加包,不过很值得用(只有一个源文件)。

4. 有很出色的 C 接口,使得在 C 里调用 Lua 或从 C 调用 Lua 是件很开心的事情。对接 large/complex C++ 库一个可以使用 SWIG,或者其他任何接口生成器(还有一个选择,是在 C++ 中使用 Lua 简单的 C 接口)。

5. 有宽松的许可证(“BSD-like”),这意味着 Lua 可以嵌入任何项目中去,同时对于自由软件也是 GPL 兼容的。

6. 非常、非常优雅。这不是 lisp,也就是说不是基于 cons-cells 的,不过它明显受到了像 scheme 这样的语言的影响,有着直截了当且很有魅力的语法。像 scheme 一样(至少像其早期版本),虽然倾向于“最小化”,不过在其和可用性之间找到了良好的平衡。对于那些有 lisp 背景的人(比如我!),Lua 的许多东西尽管有所不同,但仍然会觉得熟悉,并且“显而易见”。

7. 简单,且平易近人的语法。可能不会像成熟的 lisp 用户期望那么强大,不过对于希望最终用户编写一些脚本来说还是很恰当的。

8. 有着悠久的历史,认真负责并且专业的开发者在过去的 20 年来对语言的演化展示出了非常好的判断力。

9. 有充满活力并且友好的用户社区。

-miles

Leave a comment

Your email address will not be published. Required fields are marked *