Lua 是一个小巧的脚本语言,是巴西里约热内卢天主教大学的一个三人研究小组,Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo 于1993年开发的。 其设计目的是为了嵌入应用程序中为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

在 CentOS7 上搭建一个 Lua 的学习环境,不算太困难。 直接用 yum 安装一个包,一个基本的 LUA 语言学习环境就可以使用了。

# yum -y install lua

# cat >hello.lua <<EOF
#!/bin/lua
print ‘hello world!’
EOF

# chmod +x hello.lua
# ./hello.lua

如果需要安装其他相关的 Lua 包,可以用 yum 安装以下的两个包

# yum -y install lua-devel luarocks

然后相关的模块就可以用 luarocks 这个 Lua 的包管理软件来安装了。

譬如安装 cjson 库:
# luarocks install cjson

安装 MQTT 的 Client 库
# luarocks install luamqttc

安装 MySQL 支持:
# luarocks install luasql-mysql MYSQL_INCDIR=/usr/include/mysql MYSQL_LIBDIR=/usr/lib64/mysql

用 list 可以查看已经安装的包。
# luarocks list

用 search –all 可以查看所有可以安装的包:
# luarocks search –all

以下是一个 MySQL 查询的例子:

1 #!/bin/lua
2
3 function rows (connection, sql_statement)
4 local cursor = assert (connection:execute (sql_statement))
5 return function ()
6 return cursor:fetch()
7 end
8 end
9
10 require “luasql.mysql”
11 local driver = require “luasql.mysql”
12 local env = assert (driver.mysql())
13 local conn = assert (env:connect(“testdb”,’username’,’password’))
14
15 for name, email in rows (conn, “select user_login,user_email from wp_users”) do
16 print (string.format (“%s: %s”, name, email))
17 end

在嵌入式系统里会经常用到 nanomsg 这个可扩展协议(scalability protocols),这里也简要介绍一下安装 nn 包时需要先用源码编译安装 nanaomsg 。然后用 luarocks install nn 时,需要根据提示的错误, 把相关的库文件的目录添加到 /etc/ld.so.conf ,然后运行 ldconfig,再重新安装 nn。

lua 是进入嵌入式系统的一个小门槛,对于熟悉脚本语言的同学来说,真的不算难。但是功能更强大。

如果本篇文章能给你一点小小的启发的话,请微信扫描下面的二维码打赏一下老徐吧?