gpt4 book ai didi

lua - 为什么我们需要像Lua这样的可嵌入编程语言?

转载 作者:行者123 更新时间:2023-12-03 13:40:35 24 4
gpt4 key购买 nike

使用嵌入式编程语言的典型用例是什么?我是否正确理解这样的语言应该嵌入到某些程序环境中并应该能够从那里执行?

最佳答案

由于您将问题标记为“ Lua”,因此,我将以这种语言为您提供答案。

介绍

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引擎。 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范围内。以eLua project为例,这是为嵌入式设备设计的Lua的改进发行版。

关于lua - 为什么我们需要像Lua这样的可嵌入编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com