在C++中嵌入脚本引擎

4

我正在研究如何最好地通过脚本扩展 C++ 应用程序,我正在考虑使用 Python 或 JavaScript。用户定义的脚本将需要访问应用程序的数据模型。

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


2
你真的应该考虑一下 Lua,它与 C++ 非常完美地集成在一起。 - user177800
嗨,Tony the pony, 又诞生了一种编程语言。它被称为ZetScript。我不知道你是否正在寻找脚本引擎,但是请看一下,以防它符合你的需求!http://zetscript.org - Jordi Espada
5个回答

7
Lua也是嵌入程序的绝佳选择。它非常自包含,即使本地跨语言调用系统也不错。
对于JavaScript,目前最好的选择是查看来自Google的V8,这很容易使用。

2
你可以使用Luabind轻松地在C++中使用Lua。效果很好。 - Nikko

6

使用Boost::Python库嵌入Python确实很容易(好的,好的,讽刺)。跨语言功能方面没有什么是“容易”的。Boost在这方面做了很多工作来帮助开发。我与之合作过的开发人员中有一个人非常推崇Boost->Python接口。他的代码可以由用户在Python中编程,并且在UI中内置了REPL。太神奇了。

然而,我的经验是使用SWIG和其他语言,比如Java,观察得更好。我目前正在使用SWIG将C++封装为Python。这涉及到异常、线程、跨语言多态等各种问题。

我首先会看这两个地方。正如我所说,没有什么是“容易”的,但这两个都使生活更可行。


4
除非你真的想使用Python或Javascript,否则我建议考虑使用Lua。由于它完全是作为嵌入式脚本引擎设计的,它消除了C和C ++已经很好地处理的许多重叠部分。只要您在代码和Lua引擎之间的接口方面使用C可调用函数,它也很容易嵌入。
如果您想使用C ++级别的接口,您可能需要查看LuaBind,它允许像您编写的C ++类派生的Lua类(它生成的代理)这样的东西。

2

看看Angelscript,它简单易用,嵌入方便,类似于C/C ++的语法。免费且跨平台。您可以在几个小时内开始使用。


1

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引擎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接