lua 编程语言介绍
这里仅仅介绍 Lua5.1 , 主要由于openresty lua jit 对于lua后续版本支持不太足。
历史
Lua是在1993年由罗伯托·耶鲁萨林斯希、Luiz Henrique de Figueiredo和Waldemar Celes创建的,他们当时是巴西的里约热内卢天主教大学的计算机图形技术组(Tecgraf)成员。Lua的先驱是数据描述/配置语言“SOL”(简单对象语言)和“DEL”(数据录入语言)。他们于1992年–1993年在Tecgraf独立开发了需要增加灵活性的两个不同项目(都是用于工程应用的交互式图形程序)。在SOL和DEL中缺乏很多控制流结构,需要向它们增加完全的编程能力。
在《The Evolution of Lua》中,这门语言的作者写道:
在1993年,唯一真正的竞争者是Tcl,它已经明确的设计用于嵌入到应用之中。但是,Tcl有着不熟知的语法,未对数据描述提供良好的支持,并且只在Unix平台上运行。我们不考虑LISP或Scheme,因为它们有着不友好的语法。Python仍处在幼年期。在Tecgraf的自由的自力更生氛围下,我们非常自然的尝试开发自己的脚本语言 ... 由于这门语言的很多潜在用户不是专业编程者,语言应当避免神秘的语法和语义。新语言的实现应当是高度可移植的,因为Tecgraf的客户有着非常多样的各种计算机平台。最后,由于我们预期Tecgraf的其他产品也需要嵌入脚本语言,新语言应当追随SOL的例子并提供为带有C API的库。
Lua主要受到了下列前辈语言的影响:
- Modula-2:从中引入了大部分控制结构语法,if、while、repeat/until。
- CLU:多赋值和从函数调用的多个返回值,这是对引用参数或显式指针的更简单的替代。
- C++:“允许局部变量只在需要的地方声明的灵巧想法”。
- SNOBOL和AWK:关联数组。
- LISP和Scheme:在发表于《Dr. Dobb’s Journal》的文章中,Lua的创立者还声称,有着单一且无所不在的数据结构机制(列表)的LISP和Scheme,对他们决定将表格开发为Lua的主要数据结构起到了主要影响。Lua的语义久而久之日趋受到Scheme的影响,特别是介入了匿名函数和完全的词法作用域。
Lua在版本5.0之前在类似BSD许可证之下发行。自从版本5.0以来,Lua采用了MIT许可证。
特性
- 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
- 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
- 支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
- 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
- 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
- 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。
应用场景
- 游戏开发
- 独立应用脚本
- Web 应用脚本
- 扩展和数据库插件如:redis , MySQL Proxy 和 MySQL WorkBench
- 安全系统,如入侵检测系统Lua 应用场景