概述
概述
介绍
Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。
整个Lua虚拟机编译后仅仅一百余K,经过适当的裁剪还能做到更小,十分适合嵌入式的开发。
Lua的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
作为一门过程型动态语言,Lua有着如下的特性:
- 变量名没有类型,值才有类型,变量名在运行时可与任何类型的值绑定
- 语言只提供唯一一种数据结构,称为表(table),它混合了数组、哈希,可以用任何类型的值作为 key 和 value。提供了一致且富有表达力的表构造语法,使得 Lua 很适合描述复杂的数据
- 函数是一等类型,支持匿名函数和正则尾递归(proper tail recursion)
- 支持词法定界(lexical scoping)和闭包(closure)
- 提供 thread 类型和结构化的协程(coroutine)机制,在此基础上可方便实现协作式多任务
- 运行期能编译字符串形式的程序文本并载入虚拟机执行
- 通过元表(metatable)和元方法(metamethod)提供动态元机制(dynamic metamechanism),从而允许程序运行时根据需要改变或扩充语法设施的内定语义
- 能方便地利用表和动态元机制实现基于原型(prototype-based)的面向对象模型
- 从 5.1 版开始提供了完善的模块机制,从而更好地支持开发大型的应用程序
Lua应用场景:
- 游戏开发
- 独立应用脚本
- Web 应用脚本
- 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
- 安全系统,如入侵检测系统
安装
# linux 下安装
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install
# window 安装
# 使用 Lua 官方推荐的方法使用 LuaDist:http://luadist.org/Lua 和 LuaJIT 区别
Lua 非常高效,它运行得比许多其它脚本(如 Perl、Python、Ruby)都快,这点在第三方的独立测评中得到了证实。尽管如此仍然会有人不满足,他们总觉得还不够快。
LuaJIT 就是一个为了再榨出一些速度的尝试,它利用即时编译(Just-in Time)技术把 Lua 代码编译成本地机器码后交由 CPU 直接执行。LuaJIT 2 的测评报告表明,在数值运算、循环与函数调用、协程切换、字符串操作等许多方面它的加速效果都很显著。凭借着 FFI 特性,LuaJIT 2 在那些需要频繁地调用外部 C/C++ 代码的场景,也要比标准 Lua 解释器快很多。目前 LuaJIT 2 已经支持包括 i386、x86_64、ARM、PowerPC 以及 MIPS 等多种不同的体系结构。
LuaJIT 是采用 C 和汇编语言编写的 Lua 解释器与即时编译器。LuaJIT 被设计成全兼容标准的 Lua 5.1 语言,同时可选地支持 Lua 5.2 和 Lua 5.3 中的一些不破坏向后兼容性的有用特性。因此,标准 Lua 语言的代码可以不加修改地运行在 LuaJIT 之上。
LuaJIT 和标准 Lua 解释器的一大区别是 LuaJIT 的执行速度,即使是其汇编编写的 Lua 解释器也要比标准 Lua 5.1 解释器快很多,可以说是一个高效的 Lua 实现。另一个区别是 LuaJIT 支持比标准 Lua 5.1 语言更多的基本原语和特性,因此功能上也要更加强大。
OpenResty
OpenResty 是一个成熟的网络平台,它集成了标准的Nginx核心,LuaJIT,许多精心编写的Lua库,许多高质量的第三方Nginx模块以及大多数外部依赖项。它旨在帮助开发人员轻松构建可伸缩的Web应用程序,Web服务和动态Web网关
自从 OpenResty 1.5.8.1 版本之后,默认捆绑的 Lua 解释器就被替换成了 LuaJIT而不再是标准 Lua。也就是我们安装了OpenResty也会包含Lua解释器。