介绍
Lua是用C编写的(与C89标准几乎完全兼容;如果需要,可以使用编译时交换机轻松禁用不兼容的功能),并且设计成可以轻松地与C代码集成.在Lua的背景下,“综合”是指两个不同但相关的事物:
>您可以轻松地编写可用作Lua代码库的C代码.通过将C代码静态或动态链接到Lua引擎的代码来实现集成.然后可以使用Lua require函数在Lua代码中引用链接库.
> Lua引擎可以轻松嵌入到C应用程序中,即链接(静态或动态地)到C应用程序代码.那么C应用程序可以使用Lua的C application programming interface (Lua C-API)与Lua代码进行交互.
注意:这可以通过更多的努力,也可以用C应用程序完成.
嵌入Lua发动机的优点
如果您的C应用程序嵌入Lua许多(如果不是大多数)操作可以委派给Lua引擎,即使用C-API函数编写代码,或者更好的是Lua代码. Lua代码可以作为C字符串嵌入到C代码中,或作为外部Lua脚本存储.
使用Lua代码实现部分代码逻辑有几个优点:
> Lua比C简单(不太棘手)学习和使用,而且更高级.它支持强大的抽象,例如函数闭包和对象定向(以特殊的方式使用Lua表和metamethods).
> Lua是一种动态语言:它不需要“离线”编译.您可以修改Lua脚本的文本,这就是修改应用程序行为所需要的(无需额外的编译链接步骤).这简化了应用程序开发和调试.
> Lua是一种比C语言更安全的语言:根据C/C++的意图,写Lua代码是很难表现出未定义的行为.如果一个Lua脚本失败,它会“大声”失败.此外,Lua还支持异常机制(尽管语法与C语法不同),与C相比,可以以更容易的方式实现错误管理.
> Lua,作为大多数动态语言,都是垃圾回收.这意味着程序员不遗余力地手动管理动态内存,这是缺少垃圾回收语言的错误,泄漏,不稳定性和安全漏洞的主要原因.
> Lua可以“吃自己的狗食”,即您可以在运行时(即使在Lua本身)构建一个字符串,如果它是有效的Lua代码,您的程序可以即时执行.这是即使在其他动态语言中仍然不常见的(仍然不是LISP,但它越来越近,并且具有更多可读性的语法).这使Lua脚本能够:
>采用强大的基于文本的元编程技术,其中Lua代码可以生成其他Lua代码并即时执行;
>以简单的方式实现域特定语言(DSL); Lua代码可以在运行时加载其他Lua代码,以便反映其使用的特定问题域(Lua语法简单,但足够灵活以允许此类事物);
>被轻松地用作配置语言:您的应用程序(以C和Lua混合编写)可以使用一些lua文件作为配置文件,而无需为特定配置文件格式制作特殊解析器.因此,如果您没有为此目的使用Lua文件的选项,则不需要解析* .properties,* .csv,* .ini或您选择的任何其他格式.
> Lua引擎具有非常小的内存占用(几百kB),打包强大的功能.使用非常少的C代码行和一堆Lua文件,您可以创建一个完整的应用程序,否则将需要数千个C代码行. standard Lua standalone interpreter可以看作是将Lua嵌入到C应用程序中的一个例子!
> Lua有一个very liberal open-source license,即使在商业应用中也可以使用它,而无需太多麻烦.这也允许修改its source code以适应特殊需求.>小内存占用和易于调整的C源使Lua成为在嵌入式系统或小型微机系统(微控制器等)上移植的理想选择.标准Lua分布的许多部分都可以被剥离,将核心Lua发动机减少到〜100kB范围.