【问题标题】:Simple interpreter to embed and extend inside an C++ Windows application [closed]在 C++ Windows 应用程序中嵌入和扩展的简单解释器 [关闭]
【发布时间】:2011-04-23 05:13:24
【问题描述】:

我需要一个简单的解释器来执行(评估)简单的表达式/语句,并从主要的 C++ 应用程序调用函数。目前我不需要编写应用程序的脚本,但以后可能会有用。

对于其他团队成员来说,从 Source Repository 中提取我的应用程序并构建它也应该很容易,而无需安装额外的应用程序、库等。 搜索喜欢的选项,例如:Python(通过 Boost 和/或 Python API)、Lua、Guile、TinyScheme。

我是最接近 Python 的人,但是使用 Boost、构建 Python 库、将主应用程序与 Python 连接的复杂任务让这个选择有点矫枉过正,也许我错了。

这个请求应该有一个简单的解决方案,你有什么经验和建议?

【问题讨论】:

    标签: c++ python scripting lua


    【解决方案1】:

    您已经列出的两个不错的选择是 Python 和 Lua。以下是供您考虑的一些折衷方案:

    Python

    • 一种更完整、更强大的语言(恕我直言!),其中包含可用于任何事物的库以及随处可见的大量支持和社区。​​li>
    • 语法不完全类似于 C
    • 虽然 Python 不是专门为嵌入而设计的(它更经常被用作独立语言,由 C/C++ 中的代码扩展),但它真的很难嵌入。官方文档包含一些示例,按照 Boost 的示例进行操作应该不会太难。

    Lua

    • 为嵌入而自下而上设计,因此它应该是最简单的嵌入。
    • 语法比 Python 更像 C

    如果您预见到将来肯定需要编写脚本,那么尽早构建脚本引擎是一个好主意,因为它可能会在您继续开发程序时为您带来一些有趣的可能性。上面列出的两个选项都是不错的选项,您应该毫不费力地嵌入其中的任何一个。

    【讨论】:

      【解决方案2】:

      如果您只想计算算术表达式,请尝试ae,这是一个用于该任务的 Lua 简单接口。

      【讨论】:

      • 据我从 README.txt 中可以看出,它是一个在 Lua 之上工作的 C 扩展(所以我猜需要 lua lib 来构建它)。它可以评估以下语句:如果 Conditon1 和 Codnition2 或 condition3 比返回 X?
      • 是的,但是由于 ae 假定它正在评估表达式,因此您必须使用 Lua 习惯用法作为条件运算符的替代品。在这种情况下,直接使用 Lua 可能更容易。如果您不打算加载扩展模块,您可以直接在项目中从源代码构建 Lua,或者如果您这样做,可以在共享库中使用它。即使在 Windows 上,两者都非常容易实现。
      【解决方案3】:

      无论您选择哪种脚本语言(我可能会投票支持 Python),您都可以考虑使用 SWIG (www.swig.org) 来减轻与 C++ 接口的负担。虽然通常用于为 python(或 ruby​​、lua、guile 等)构建 C++ 扩展,但它也可用于帮助嵌入。

      您提到了 boost::python,这当然是一个功能齐全的选项,并且允许更紧密的 Python/C++ 集成(尤其是在涉及虚函数的情况下)。但是,根据我的经验,SWIG 更容易集成,可以与大量脚本语言一起使用,而且对于 python,Python 的 distutils 本身就支持。

      【讨论】:

        【解决方案4】:

        Guile 易于嵌入和扩展,并且如果强大的编程语言可以进行规划。
        您可以编译 libguile 并将其添加到 lib 目录中的存储库中,或者添加 guile 的源代码并在用户编译项目时对其进行编译。
        但我不会尝试在 Windows 上使用 guile。

        【讨论】:

        • 我不知道 guile 在 windows 应用程序中有多少立足点,一般来说没有主要的应用程序在 guile 中编写脚本,它的复兴可能会改变这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 2019-06-23
        相关资源
        最近更新 更多