Lua比C/C++更适合的示例用法

bug*_*t77 14 c c++ lua

我目前正在嵌入Lua并将其用作一个美化的智能配置文件.但是,我认为我缺少一些东西,因为人们对Lua的使用赞不绝口.

例如,我可以通过显示这个示例轻松解释为什么你可以使用shell脚本而不是C(诚然,boost regexp是过度杀伤):

#include <dirent.h> 
#include <stdio.h> 
#include <boost/regex.hpp>

int main(int argc, char * argv[]) {
    DIR           *d;
    struct dirent *dir;
    boost::regex re(".*\\.cpp$");
    if (argc==2) d = opendir(argv[1]); else d = opendir(".");
if (d) {
    while ((dir = readdir(d)) != NULL) {
            if (boost::regex_match(dir->d_name, re)) printf("%s\n", dir->d_name);
    }

    closedir(d);
}

return(0);
Run Code Online (Sandbox Code Playgroud)

并将其与:

for foo in *.cpp; do echo $foo; done;
Run Code Online (Sandbox Code Playgroud)

你能在Lua中给出任何可以让我"点击"的例子吗?

编辑:也许我的问题是我不知道Lua还不能流利地使用它,因为我发现编写C代码更容易.

EDIT2:

一个例子是C++和Lua中的玩具阶乘程序:

#include <iostream>

int fact (int n){
    if (n==0) return 1; else
    return (n*fact(n-1));
}

int main (){
    int input;
    using namespace std;
    cout << "Enter a number: " ;
    cin >> input;
    cout << "factorial: " << fact(input) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

LUA:

function fact (n)
    if n==0 then
        return 1
    else 
        return n * (fact(n-1))
    end
end

print ("enter a number")
a = io.read("*number")
print ("Factorial: ",fact(a))
Run Code Online (Sandbox Code Playgroud)

在这里,程序看起来很相似,但是在include,namespace和main()声明中显然可以摆脱一些错误.还删除变量声明和强类型.

现在有人说这是一个优势,它增加了一个更大的程序,还是更多呢?这与bash示例的方式不同.

Ree*_*sey 11

使用Lua等脚本语言还有许多其他好处.

Lua与C++的一些优点:

  • 由于高级性质,它在开发时间方面通常较短,如您的示例所示.
  • 它不需要重新编译来改变行为.
  • 可以在非开发计算机上更改行为.
  • 原型设计非常快速和简单,因为您可以在运行时调整逻辑.

  • ...非开发人员可以修改和增强/改进功能 (3认同)

RBe*_*eig 5

脚本语言减少了构建复杂 GUI 所需的工作量,否则这些 GUI 需要大量框架粘合和代码重复。Lua 绑定提供了几个 GUI 工具包,包括wxWidgetsIUP 工具包

在这两个绑定中,一流的函数值和完整的闭包使事件回调易于编码和使用。

以 Lua 为核心的大型应用程序(例如 Adob​​e Photoshop Lightroom)有一个外部 C/C++ 程序,该程序承载 Lua 解释器,并通过向该解释器注册 C 函数来提供对其核心功能的访问。它通常在 C 函数中实现计算密集型核心功能,但将整体流程、操作甚至 GUI 布局留给 Lua 脚本。

我在自己的项目中发现,通常情况下,当与运行时加载的 IUP 以及一两个自定义 DLL 结合使用时,库存的独立 Lua 解释器(lua.exe 或 wlua.exe)足以满足外部应用程序的需求。基于用 C 编码的 Lua 模块,实现需要该级别性能的功能,或通过其他 C 可调用库实现的功能。

我的项目的要点包括:

  • 真正的尾调用可以轻松表达有限状态机。
  • 垃圾收集内存管理。
  • 匿名函数、闭包、一等函数值。
  • 哈希表。
  • 足够丰富的字符串库。
  • Userdata 将垃圾收集器扩展到 C 端分配。
  • 元表允许丰富多样的面向对象和功能技术。
  • 小但足够强大的 C API。
  • 良好的文档,以开源作为备份。
  • 通过邮件列表wiki为用户提供良好的用户支持。
  • 强大的模块,例如作者和社区提供的PEG解析器。

我最喜欢引用的示例之一是我为嵌入式系统构建的测试夹具,该系统需要大约 1000 行 Lua 和 1000 行 C,在 lua.exe 下运行,并使用 IUP 来呈现完整的 Windows GUI。第一个版本运行了大约一天。在带有 MFC 的 C++ 中,至少需要一周的工作和数千行代码。