16

对于我目前正在进行的一个项目,我希望将脚本引擎嵌入到我的 C++ 代码中,以实现一些可扩展性。该应用程序将需要大量的文本处理以及在这些脚本中使用正则表达式。

我知道 Lua 在嵌入式脚本方面通常是业界的宠儿,但我也知道它不支持正则表达式(至少开箱即用)。这导致我倾向于使用 python 来嵌入我的语言,因为它似乎在 Lua 背后有最好的支持,并且仍然提供强大的正则表达式功能。

这是正确的选择吗?我应该看另一种语言吗?我有理由再看一下 Lua 吗?

4

4 回答 4

19

如果您特别需要所谓的“正则表达式”(根本不是正则表达式),那么您有两种选择:

  1. 使用 Python。它包含的正则表达式与 Perl 和 sed/grep 足够相似
  2. 使用 Lua 和外部PCRE 库

另一方面,如果您需要任何良好的模式匹配,您可以继续使用 Lua,并且:

  1. 使用 Lua 包含的模式匹配,它不在 grep 传统中,但非常有能力。缺少的功能是子模式替代品 (|)
  2. 使用LPEG,它比正则表达式强大得多,而且通常也更快。

正如你所知道的,我是最后一个的忠实粉丝。它不仅可以让您定义非常复杂但具有确定性的模式,它还是一个完整的语法工具,您可以使用它来创建一个完整的解析器。如果您愿意,可以在单个多行字符串常量中描述语法,并使用您自己定义的挂钩来捕获数据并构建您的结构。

我用它来快速破解 JSON 解析器、C 调用树、xPath 库等。

于 2010-09-22T22:39:13.303 回答
7

boost.python极大地帮助了 Python 和 C++ 的集成。如果那些熟悉您的 C++ 源代码的人主要是编写脚本的人,您可能会发现这更方便。

即使脚本编写者不熟悉您的特定源代码,如果他们更熟悉类似 C 的语法(C、C++ 等),他们应该会发现 Python 更易于使用——也许只是一点点,Lua 并不难。优秀的程序员无论如何都可以使用多种语言,但是您没有提供有关您的受众的任何信息。

Lua 比 Python 更容易沙箱化,所以如果你必须限制脚本可以做什么(例如产生额外的进程、读取文件),那可能会排除 Python。

于 2010-09-22T22:54:05.377 回答
5

在我自己将 Lua 合并到我的一个 C 项目中之后,我建议使用 Lua,因为这更容易。

但这取决于您的脚本语言需要具备的能力。Lua 上升为事实上的游戏脚本语言。如果您需要高级脚本功能,您可能会使用 Python,但如果只是为了简单的脚本支持,请使用 Lua。从我所见,Lua 对于不习惯编写脚本的新手来说更容易学习。

我认为 Lua 更轻量,如果你需要有外部包,你可以添加它们,但关键是 Lua 的原子部分比 Python 小得多。

于 2010-09-22T23:35:17.193 回答
4

不要忘记他们所有人的祖父-tcl

有一个用于 tcl 的 c++ 包装器,它非常容易嵌入

我在当前项目中使用它

在以前的 (c#) 项目中,我在 python 上使用了 lua。在较早的 c# 项目中,我使用过 python;我选择 lua 是因为语法对于普通脚本编写者来说更正常(用于 vbscript 或 javascript)。但是,我将在下一个 c# 项目中改回 (iron)python;lua 太晦涩难懂了

对于 c++,从现在开始我将永远使用 tcl

编辑:我最喜欢的是 jint (.net javascriptt 解释器) v 易于使用,界面美观。鉴于 js 是目前很酷的语言,没有人可以抱怨这种语言

于 2010-09-22T22:38:24.913 回答