【问题标题】:Embedding a scripting engine in C++在 C++ 中嵌入脚本引擎
【发布时间】:2010-05-25 17:47:35
【问题描述】:

我正在研究如何最好地扩展具有脚本功能的 C++ 应用程序,我正在研究 Python 或 JavaScript。用户定义的脚本需要能够访问应用程序的数据模型。

你们有没有嵌入这些脚本引擎的经验?有哪些潜在的陷阱?

【问题讨论】:

  • 你也应该考虑 Lua,它与 C++ 完美集成。
  • 嗨,小马托尼,另一种编程语言已经诞生。被称为 ZetScript 我不知道您是否正在寻找脚本引擎,但请看一下以防万一它适合您的需求! zetscript.org

标签: javascript c++ python scripting embedding


【解决方案1】:

Lua 也是嵌入程序的绝佳候选者。它非常自给自足,甚至原生的跨语言调用系统也不错。

对于 JavaScript,您现在最好的选择是查看 V8(来自 Google),它很容易使用。

【讨论】:

  • 您可以通过 Luabind 在 C++ 中轻松使用 Lua。效果很好。
【解决方案2】:

使用Boost::Python 库嵌入Python 确实很容易(好吧,好吧,讽刺。)在跨语言功能方面,没有什么是“容易”的。 Boost 在帮助这种发展方面做了很多工作。我合作过的一位开发人员对 Boost->Python 界面发誓。用户可以使用 Python 编写他的代码,并在 UI 中内置 REPL。太棒了。

但是,使用 SWIG 和其他语言(例如 Java)可以更好地观察我的经验。我目前正在与 SWIG 合作,用 Python 包装 C++。有各种各样的陷阱,包括异常、线程、跨语言多态等等。

我会先看看这两个地方。正如我所说,没有什么是“容易”的,但这两者都让生活更宜居。

【讨论】:

    【解决方案3】:

    除非您真的使用 Python 或 Javascript,否则我会考虑使用 Lua。由于它完全被设计为嵌入式脚本引擎,因此它消除了与 C 和 C++ 已经做得很好的部分重叠。只要您只在代码和 Lua 引擎之间就 C 可调用函数进行接口,它也很容易嵌入。

    如果您想使用 C++ 级别的接口,您可能需要查看 LuaBind,它允许从您编写的 C++ 类(它生成的代理)派生的 Lua 类之类的东西。

    【讨论】:

      【解决方案4】:

      Boost::Python,正如wheaties 的回答,是一个非常成熟的解决方案。

      Lua 以易于嵌入而著称,但我自己没有尝试过。

      作为R 的用户,我对嵌入R 更感兴趣,这可以使用RInside 包来实现。一个简单的例子是

      #include <RInside.h>                // for the embedded R via RInside
      
      int main(int argc, char *argv[]) {
      
          RInside R(argc, argv);          // create an embedded R instance 
      
          R["txt"] = "Hello, world!\n";   // assign a char* (string) to 'txt'
      
          R.parseEvalQ("cat(txt)");       // eval the init string, ignoring any returns
      
          exit(0);
      }
      

      包中还有更多示例。 RInside 本质上使用一些 Rcpp 接口包为您提供了一个很好的 R 引擎包装器。

      【讨论】:

        【解决方案5】:

        看看 angelscript 简单易嵌入,类似 c/c++ 的语法。免费和跨平台。你可以在几个小时内开始。

        【讨论】:

          猜你喜欢
          • 2017-06-25
          • 1970-01-01
          • 2020-10-01
          • 2011-02-27
          • 2023-03-21
          • 2012-03-07
          • 2013-09-09
          • 2011-04-16
          • 1970-01-01
          相关资源
          最近更新 更多