Lua

目标

Lua的目标是成为一个很容易嵌入其它语言中使用的语言。
很多应用程序使用Lua作为自己的嵌入式脚本语言，以此来实现可配置性、可扩展性。

特性

Lua是一种轻量语言，它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C语言编写并以源代码形式开放，编译后仅仅一百余K，可以很方便的嵌入别的程序里。和许多“大而全”的语言不一样，网路通讯、图形界面等都没有默认提供。但是Lua可以很容易地被扩展：由宿主语言（通常是C或C++）提供这些功能，Lua可以使用它们，就像是本来就内置的功能一样。事实上，现在已经有很多成熟的扩展模块可供选用。
Lua是一种多重编程范式的程序设计语言：它只提供了很小的一个特性集合来满足不同编程范式的需要，而不是为某种特定的编程范式提供繁杂的特性支持。例如，Lua并不提供继承这个特性，但是你可以用元表来模拟它。诸如名字空间、类这些概念都没有在语言基本特性中实现，但是我们可以用表结构（Lua唯一提供的复杂数据结构）轻易模拟。Lua可以在运行时随时构造出一个函数，并把它看作一个对象（正是所谓的first class function），这个特性可以很好的满足函数式编程的需要。正是提供了这些基本的元特性，我们可以任意的对语言进行自需的改造。
Lua原生支持的数据类型非常之少，它只提供了数字（缺省是双精度浮点数，可配置）、布尔量、字符串、表、子程序、协程（coroutine）以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高，加上元表的支持，开发者可以高效的模拟出需要的复杂数据类型（比如集合、数组等）。
Lua是一个动态弱类型语言，支持增量式垃圾收集策略。有内建的，与操作系统无关的协作式多线程（coroutine）支持。
Lua可以用于嵌入式硬件，不仅可以嵌入其他编程语言，而且可以嵌入微处理器中，例如NodeMCU开源硬件项目将Lua嵌入到Wi-Fi SoC中。

程序示例

print("Hello, world!")
运行后，会在屏幕上显示“Hello, world!”。
一个比较复杂一点的例子，展示了什么是函数，以及Lua对闭包的支持：
function create_a_counter()
    local count = 0
    return function()
        count = count + 1
        return count
    endend
create_a_counter()会返回一个匿名函数（在Lua中，函数和其他数据一样，是可以指定给变量来存储的）。这个匿名函数会把count加1后再回传。在匿名函数中的变量count既不是全局变量也不是区域变量，而是一种称为external local variable（外部局部变量，又称upvalue）的变量。这个变量的值会一直被保存在匿名函数中。因此调用create_a_counter()时产生一个记数器函数，每次调用记数器函数，都会得到一个比上次大1的值。

变量类型

Lua是一种动态类型语言，因此语言中没有类型的定义，不需要声明变量类型，每个变量自己保存了类型。
有8种基本类型：nil、布尔值（boolean）、数字体（number）、字符串型（string）、用户自定义类型（userdata）、函数（function）、线程（thread）和表（table）。
    print(type(nil))                    -- 输出 nil
    print(type(99.7+12*9))              -- 输出 number
    print(type(true))                   -- 输出 boolean
    print(type("Hello Wikipedia"))      -- 输出 string
    print(type(print))                  -- 输出 function
    print(type{1, 2, test = "test"})    -- 输出 table