28 March 2013

1. 是什么

今天 Lua 发布了 5.2.2,这是一个 bug 修复版本,一门令人神往的语言。

Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 脚本可以很容易的被 C/C++ 代码调用,也可以反过来调用 C/C++ 的函数,这使得 Lua 在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替 xml,ini 等文件格式,并且更容易理解和维护。

Lua由标准 C 编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。

一个完整的 Lua 解释器不过200k,在目前所有脚本引擎中,Lua 的速度是最快的。这一切都决定了 Lua 是作为嵌入式脚本的最佳选择。

2. 哪里学

官方网站:http://www.lua.org/home.html

注意它的名字:Lua

已经发布的书:

  • Wrox.Beginning.Lua.Programming.Feb.2007.pdf
  • Programming in Lua 2nd Edition.pdf
  • Programming In Lua CHS.pdf

其中中文版由曾经的 luachina.net 翻译,今天发现网站已经打不开了。

官方手册:http://www.lua.org/manual/5.1/

用 wget 可将手机抓取到本地:

wget -r -p -k -np http://www.lua.org/manual/5.1/

为了访问方便,可以加一个 meta refresh:

<meta http-equiv="refresh" content="0;URL='http://example.com/'">

3. 安装

Mac OS X 上我通过 brew 安装

$ brew install lua

安装日志:

ChentekiMacBook-Pro:jsoops Christen$ brew install lua
==> Downloading http://www.lua.org/ftp/lua-5.1.4.tar.gz
######################################################################## 100.0%
==> Patching
patching file Makefile
patching file src/Makefile
######################################################################## 100.0%
patching file lcode.c
patching file ldblib.c
patching file liolib.c
patching file llex.c
patching file loadlib.c
patching file lstrlib.c
patching file lvm.c
==> make macosx INSTALL_TOP=/usr/local/Cellar/lua/5.1.4 INSTALL_MAN=/usr/local/C
==> make install INSTALL_TOP=/usr/local/Cellar/lua/5.1.4 INSTALL_MAN=/usr/local/
/usr/local/Cellar/lua/5.1.4: 15 files, 288K, built in 20 seconds
 
ChentekiMacBook-Pro:jsoops Christen$ lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print (12)
12

4. 第一个脚本

function fact (n)
  if n == 0 then
    return 1
  else
    return n * fact(n-1)
end end
 
print("enter a number:")
a = io.read("*number")
 
print(fact(a))

很干净的代码!

5. VS Python

网上太多关于 Python 和 Lua 选型的争论。其实两种语言我都不太熟悉,OSchina 上的一个网友说得好:

fosky 回答于 2011-05-18 08:15:

当大家都在争论用 Python 还是 Lua 做脚本的时候,WOW 已经发布了 WOW世界 LUA 编程指南。用什么没关系,真正去用就好。

outrace 回答于 2011-05-18 09:02:

你什么类型的项目啊?

本人 Python 和 Lua 都有一定经验,提一些自己的看法:

1、脚本担负的任务重,则用 Python,任务轻,则用 Lua。因为 Lua 内置的东西太少。

2、性能要求高,用 Lua。要求不太高,用python。因为 LuaJIT 性能很强大。性能不行要用 C 写的时候,Lua 跟 C 结合互调要比 Python 跟 C 好一些。

3、希望招人或者培训人快一些。可能 Lua 好一些。因为需要学很少的东西就可以干一定的工作。

CSDN 网友 shgaol 的见解亦是如此:

1、两者的定位不同。 Python 的定位在于自身的独立开发,即是说 Python 定位于自己能解决所有的问题。 Lua 定位在与其它的代码,尤其是 C++ 代码进行相互配合的编译,单独的 Lua 本身没有任何的意义。

2、站在解决问题的角度上看。 Python 依靠自身越来越强大的库,让编程者能实现越来越多,越来越复杂的问题。 Lua 本身则必须与其它的编译语言结合,才能解决问题。以 C++ + Lua 来举例。单独的 C++ ,因为 C++ 的复杂性,在其解决问题提供方便的同时,也给程序员带来了很大的麻烦,这些麻烦主要有两个方面:

1)C++ 本身,特别是能用好 C++ ,对程序员就来说就是一个很高的要求。

2)在解决复杂问题时, C++ 程序结构的复杂性和逻辑实现的复杂性,给程序员对程序的改进和维护带来了很大的麻烦。而 C++ 与Lua的结合,让 C++ 可以只负责为 Lua 提供各种基本的功能函数库,而Lua调用这些库来实现各种逻辑功能。这种分工可以让程序员将程序中的基本代码库和逻辑实现代码进行分离,使程序的效率和可维护有了很大的提高。

所以,如果真的要站在解决问题的角度来对 Python 和 Lua 进行对比的话。实际上,是 C++ 与 Python 进行对比,而与 Lua 无关。

3、 Python 与 C++ 对比,我觉得 Python 与 C++ 对比的优势就在于其所提供的基本库,大大的降低了程序复杂度与可维护性对程序员本身的要求。比如,同样的功能,如果是 C++ 来做的话,可能其程序员必须具备三年的经验,如果是 Python 来做,而 Python 又有解决问题所需要的库的话,一个具有一年程序经验的程序员可能就能完成了。但是,同样的,如果是 C++ 与Lua结合来解决问题的话,可能就只需要半个高级程序员和一个只有c语言一年经验的程序员就可以了。半个高级程序员负责提供 Lua 的函数库,另一个程序员,只需要用这些代码库实现逻辑就行了。

综上所述, C++ + Lua 的开发模式,和 Python 源代码库开发+ Python 脚本开发模式其实是一样的。但是站在程序员的角度上来说, C++ + Lua 就更为简单一些,因为除去基本的 Lua 解释代码外, C++ 可以为 Lua 动态提供各种函数库。而 Python 程序员则必须受制于 Python 所提供的各种功能库。所以,如果解决一些具有普遍性和重复性的问题时, Python 是有优势的,因为有很多的代码可以不用重写,而 C++ + Lua 则必须重构。如果是解决一些非普遍的问题,如果 Python 本身没有提供解决这些问题的库的话, Python 程序员,就必须走回 C++ 的老路了。



blog comments powered by Disqus