Lua 学习笔记 (一)

Lua所提供的机制是C不善于的:高级语言、动态结构、简洁、易于测试和调试等。

正因为如此,Lua具有良好的安全保证,自动内存管理,简便的字符串处理功能及其他动态数据的改变。

Lua不仅是一种易于扩展的语言,也是一种易整合语言(glue language);Lua支持基于组件的,我们可以将一些已经存在的高级组件整合在一起实现一个应用软件。

 

Lua特有的:

① 可扩展性。Lua的扩展性非常卓越,以至于很多人把Lua用作搭建领域语言的工具(注:比如游戏脚本)。Lua被设计为易于扩展的,可以通过Lua代码或者C代码扩展,Lua的很多功能都是通过外部库来扩展的。Lua很容易与C/C++、java、fortran、Smalltalk、Ada,以及其他语言接口。

② 简单。Lua本身简单,小巧;内容少但功能强大,这使得Lua易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。

③ 高效率。Lua有很高的执行效率,统计表明Lua是目前平均效率最高的脚本语言。

④ 与平台无关。Lua几乎可以运行在所有我们听说过的系统上,如NextStep、OS/2、PlayStation II (Sony)、Mac OS-9、OS X、BeOS、MS-DOS、IBM mainframes、EPOC、PalmOS、MCF5206eLITE Evaluation Board、RISC OS,及所有的Windows和Unix。Lua不是通过使用条件编译实现平台无关,而是完全使用ANSI (ISO) C,这意味着只要你有ANSI C编译器你就可以编译并使用Lua。

 

Lua大部分强大的功能来自于他的类库,这并非偶然。Lua的长处之一就是可以通过新类型和函数来扩展其功能。动态类型检查最大限度允许多态出现,并自动简化调用内存管理的接口,因为这样不需要关心谁来分配内存谁来释放内存,也不必担心数据溢出。高级函数和匿名函数均可以接受高级参数,使函数更为通用。

Lua自带一个小规模的类库。在受限系统中使用Lua,如嵌入式系统,我们可以有选择地安装这些类库。若运行环境十分严格,我们甚至可以直接修改类库源代码,仅保留需要的函数。记住:Lua是很小的(即使加上全部的标准库)并且在大部分系统下你仍可以不用担心的使用全部的功能。

 

Ubuntu 12.04 安装Lua 5.2.3 环境

1. 下载 lua 源码

 

gao@gao-VirtualBox:/tmp $ curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  245k  100  245k    0     0   8371      0  0:00:30  0:00:30 --:--:-- 19293
       2. 解压
gao@gao-VirtualBox:/tmp $ tar zxvf lua-5.2.3.tar.gz 
     解压过程如下:
lua-5.2.3/
lua-5.2.3/src/
lua-5.2.3/src/liolib.c
lua-5.2.3/src/lctype.h
lua-5.2.3/src/ltm.h
lua-5.2.3/src/ldump.c
lua-5.2.3/src/lobject.h
lua-5.2.3/src/lopcodes.h
lua-5.2.3/src/luac.c
lua-5.2.3/src/lbitlib.c
lua-5.2.3/src/llimits.h
lua-5.2.3/src/luaconf.h
lua-5.2.3/src/lgc.h
lua-5.2.3/src/lauxlib.c
lua-5.2.3/src/lstate.h
lua-5.2.3/src/llex.c
lua-5.2.3/src/ldblib.c
lua-5.2.3/src/lcode.h
lua-5.2.3/src/lstate.c
lua-5.2.3/src/lua.c
lua-5.2.3/src/lzio.c
lua-5.2.3/src/lcode.c
lua-5.2.3/src/llex.h
lua-5.2.3/src/lparser.c
lua-5.2.3/src/linit.c
lua-5.2.3/src/ldebug.h
lua-5.2.3/src/lcorolib.c
lua-5.2.3/src/lbaselib.c
lua-5.2.3/src/ldebug.c
lua-5.2.3/src/lapi.c
lua-5.2.3/src/lua.h
lua-5.2.3/src/lauxlib.h
lua-5.2.3/src/lobject.c
lua-5.2.3/src/lstrlib.c
lua-5.2.3/src/ltm.c
lua-5.2.3/src/ltablib.c
lua-5.2.3/src/lualib.h
lua-5.2.3/src/lfunc.h
lua-5.2.3/src/ldo.c
lua-5.2.3/src/lfunc.c
lua-5.2.3/src/lctype.c
lua-5.2.3/src/lvm.c
lua-5.2.3/src/loadlib.c
lua-5.2.3/src/ltable.h
lua-5.2.3/src/lstring.h
lua-5.2.3/src/ltable.c
lua-5.2.3/src/lua.hpp
lua-5.2.3/src/lopcodes.c
lua-5.2.3/src/lapi.h
lua-5.2.3/src/lparser.h
lua-5.2.3/src/Makefile
lua-5.2.3/src/lundump.c
lua-5.2.3/src/lmem.h
lua-5.2.3/src/lundump.h
lua-5.2.3/src/lstring.c
lua-5.2.3/src/lmathlib.c
lua-5.2.3/src/lvm.h
lua-5.2.3/src/lgc.c
lua-5.2.3/src/ldo.h
lua-5.2.3/src/lzio.h
lua-5.2.3/src/loslib.c
lua-5.2.3/src/lmem.c
lua-5.2.3/README
lua-5.2.3/doc/
lua-5.2.3/doc/luac.1
lua-5.2.3/doc/osi-certified-72x60.png
lua-5.2.3/doc/manual.css
lua-5.2.3/doc/readme.html
lua-5.2.3/doc/logo.gif
lua-5.2.3/doc/contents.html
lua-5.2.3/doc/manual.html
lua-5.2.3/doc/lua.1
lua-5.2.3/doc/lua.css
lua-5.2.3/Makefile
     3. 测试编译
gao@gao-VirtualBox:/var/www/Lua$ cd lua-5.2.3/
gao@gao-VirtualBox:/var/www/Lua/lua-5.2.3$ make linux test
     编译过程如下:
cd src && make linux
make[1]: 正在进入目录 `/var/www/Lua/lua-5.2.3/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
make[2]: 正在进入目录 `/var/www/Lua/lua-5.2.3/src'
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lapi.o lapi.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lcode.o lcode.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lctype.o lctype.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ldebug.o ldebug.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ldo.o ldo.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ldump.o ldump.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lfunc.o lfunc.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lgc.o lgc.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o llex.o llex.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lmem.o lmem.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lobject.o lobject.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lopcodes.o lopcodes.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lparser.o lparser.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lstate.o lstate.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lstring.o lstring.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ltable.o ltable.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ltm.o ltm.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lundump.o lundump.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lvm.o lvm.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lzio.o lzio.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lauxlib.o lauxlib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lbaselib.o lbaselib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lbitlib.o lbitlib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lcorolib.o lcorolib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ldblib.o ldblib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o liolib.o liolib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lmathlib.o lmathlib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o loslib.o loslib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lstrlib.o lstrlib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o ltablib.o ltablib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o loadlib.o loadlib.c
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o linit.o
ranlib liblua.a
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o lua.o lua.c
gcc -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline
gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX    -c -o luac.o luac.c
gcc -o luac   luac.o liblua.a -lm -Wl,-E -ldl -lreadline
make[2]:正在离开目录 `/var/www/Lua/lua-5.2.3/src'
make[1]:正在离开目录 `/var/www/Lua/lua-5.2.3/src'
src/lua -v
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
     4. 安装
gao@gao-VirtualBox:/var/www/Lua/lua-5.2.3$ sudo make install
[sudo] password for gao:

安装过程如下:
cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.2 /usr/local/lib/lua/5.2
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1

5. 查看lua 版本

 

gao@gao-VirtualBox:/var/www/Lua/lua-5.2.3$ lua -v
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
    安装完成。

 

你可能感兴趣的:(lua)