Lua
是一门嵌入式语言(embedded language
),这就意味着Lua
并不是一个独立(stand-alone
)的包(package
),而是一个可以供其它想使用Lua
功能的程序链接的库(library
)。实际上,Lua
解释器程序lua
(可执行文件)就是利用Lua
库实现的一个小程序:读入文件或字符串,丢给Lua
库去做处理。
Lua
可以作为一个单独的库供其它程序使用以扩展其功能,因此可以被称之为“extension language
”。同时,使用Lua
的程序亦可以向Lua
环境注册新的函数,这些函数用C
(或其它语言)编写,提供一些不能由Lua
直接实现的功能,所以Lua
又是一门“extensible language
”。
Lua
作为extension language
时,C
代码作为控制,Lua
作为库;而作为“extensible language
”时,正好反过来,Lua
代码作为控制,C
作为库。C
和Lua
之间的接口称之为C API
,它是一组供C
访问Lua
的函数。
C
代码和Lua
程序之间通过一个虚拟的栈(stack
)来进行通信。几乎所有的C API
调用都会访问栈上的数值,并且所有的C
代码和Lua
程序之间的数据交换都通过这个栈。另外,栈也可以用来保存一些临时数据。栈帮忙解决Lua
和C
之间两个很重要的“impedance mismatch
”问题:
a)Lua
具有内存垃圾(garbage
)回收机制,而C
需要显示地释放;
b)Lua
是动态类型(dynamic typing
),而C
是静态类型(static typing
)。