我正在研究如何最好地扩展具有脚本功能的 C++ 应用程序,我正在研究 Python 或 JavaScript。用户定义的脚本需要能够访问应用程序的数据模型。
你们有没有嵌入这些脚本引擎的经验?有哪些潜在的陷阱?
我正在研究如何最好地扩展具有脚本功能的 C++ 应用程序,我正在研究 Python 或 JavaScript。用户定义的脚本需要能够访问应用程序的数据模型。
你们有没有嵌入这些脚本引擎的经验?有哪些潜在的陷阱?
Lua 也是嵌入程序的绝佳候选者。它非常独立,甚至原生的跨语言调用系统也不错。
对于 JavaScript,您现在最好的选择是查看 V8(来自 Google),它很容易使用。
使用Boost::Python库嵌入 Python 肯定很容易(好吧,好吧,讽刺)。就跨语言功能而言,没有什么是“容易”的。Boost 在帮助这种发展方面做了很多工作。我合作过的一位开发人员对 Boost->Python 界面发誓。用户可以使用 Python 编写他的代码,并在 UI 中内置 REPL。惊人的。
但是,使用 SWIG 和 Java 等其他语言可以更好地观察我的经验。我目前正在与 SWIG 合作,用 Python 包装 C++。有各种各样的陷阱,包括异常、线程、跨语言多态等等。
我先看看这两个地方。正如我所说,没有什么是“容易的”,但这两者都让生活更宜居。
Boost::Python,正如小麦的回答一样,是一个非常成熟的解决方案。
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);
}
看看 angelscript 简单易嵌入,类似 c/c++ 的语法。免费和跨平台。你可以在几个小时内开始。