4

私は、スクリプト機能を使用してC ++アプリケーションを最適に拡張する方法を研究しており、PythonまたはJavaScriptのいずれかを検討しています。ユーザー定義のスクリプトには、アプリケーションのデータモデルにアクセスする機能が必要です。

これらのスクリプトエンジンを埋め込んだ経験はありますか?いくつかの潜在的な落とし穴は何ですか?

4

5 に答える 5

7

Luaは、プログラムに埋め込むための優れた候補でもあります。その非常に自己完結型であり、ネイティブのクロスランゲージコールシステムでさえ悪くはありません。

JavaScriptの場合、現時点での最善の策は、操作が簡単なV8(Google製)を確認することです。

于 2010-05-25T18:02:22.643 に答える
6

Boost::Pythonライブラリを使用して Python を埋め込むのは確かに簡単です(わかりました、皮肉です。) クロスランゲージ機能に関しては、何も「簡単」ではありません。Boost は、このような開発を支援するために多くのことを行ってきました。私が一緒に働いた開発者の 1 人は、Boost->Python インターフェースについて断言しています。彼のコードは、UI に組み込まれた REPL を使用して、ユーザーが Python でプログラミングできます。すばらしい。

ただし、私の経験は、SWIG や Java などの他の言語を使用した方がよく観察されています。私は現在 SWIG と協力して C++ を Python でラップしています。例外、スレッド化、クロスランゲージ ポリモーフィズムなど、さまざまな落とし穴があります。

まずはこの2ヶ所を目指します。私が言ったように、「簡単」なことは何もありませんが、これらはどちらも人生をより住みやすくします.

于 2010-05-25T17:50:57.737 に答える
4

本当に Python や Javascript に慣れていない限り、 Luaの使用を検討したいと思います。完全に組み込みスクリプト エンジンとして設計されているため、C および C++ が既にうまく行っていることとのかなりの重複が排除されます。また、C の呼び出し可能な関数に関して、コードと Lua エンジンの間のインターフェースのみを使用する限り、組み込みも非常に簡単です。

C++ レベルのインターフェイスを使用する場合は、LuaBindを参照してください。これにより、作成した C++ クラス (生成するプロキシ) から派生する Lua クラスなどを使用できます。

于 2010-05-25T18:07:01.013 に答える
1

Boost :: Pythonは、ウィーティーズの回答と同様に、非常に成熟したソリューションです。

Luaは埋め込みが簡単であるという評判がありますが、私はこれを自分で試したことはありません。

Rのユーザーとして、私はRInsideパッケージを使用して可能なRを埋め込むことにもっと興味があります。簡単な例は

#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エンジンの優れたラッパーを提供します。

于 2010-05-25T18:00:58.927 に答える
1

シンプルで埋め込みが簡単な、c/c++ のような構文の angelscript をご覧ください。無料でcorssプラットフォーム。数時間で開始できます。

于 2011-02-22T15:30:26.097 に答える