我正在研究如何用腳本功能最佳地擴展C++應用程序,並且我正在查看Python或JavaScript。用戶定義的腳本需要能夠訪問應用程序的數據模型。在C++中嵌入腳本引擎
有沒有人有過嵌入這些腳本引擎的經驗?有什麼潛在的缺陷?
我正在研究如何用腳本功能最佳地擴展C++應用程序,並且我正在查看Python或JavaScript。用戶定義的腳本需要能夠訪問應用程序的數據模型。在C++中嵌入腳本引擎
有沒有人有過嵌入這些腳本引擎的經驗?有什麼潛在的缺陷?
肯定很容易通過使用Boost::Python庫(ok,ok,sarcasm)來嵌入Python。當談到跨語言功能時,沒有什麼是「輕鬆」的。 Boost已經做了很多工作來幫助這種發展。我曾經與其中一位開發人員就Boost-> Python界面發誓。他的代碼可以由Python中的用戶進行編程,並在用戶界面中內置REPL。驚人。
但是,使用SWIG和其他語言(如Java)可以更好地觀察到我的經驗。我目前正在與SWIG合作用Python封裝C++。有各種各樣的例外,線程,跨語言多態等等。
我會先看看這兩個地方。正如我所說,沒有東西會「容易」,但這兩者都讓生活更加宜居。
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);
}
Lua也是嵌入程序的絕佳選擇。它非常獨立,甚至是本地的跨語言電話系統也不錯。
對於JavaScript,您現在最好的選擇就是看V8(來自Google),這很容易處理。
你可以用Luabind輕鬆地在C++中使用Lua。效果很好。 – Nikko 2010-05-25 18:13:17
看看angelscript 簡單易用,嵌入c/C++之類的語法。免費和corss平臺。你可以在幾個小時後開始。
你應該真的考慮Lua,它與C++很好地集成在一起。 – 2010-05-25 18:15:28
嗨託尼小馬, 另一種編程語言誕生了。被稱爲ZetScript我不知道你是否正在尋找腳本引擎,但看一看,以防萬一它符合你的需求! http://zetscript.org – 2017-11-28 13:51:12