私は、C++ アプリをユーザーがスクリプト可能にする作業に直面しています。このアプリは数年間開発されており、これまで誰も考えたことはありませんでした. マルチスレッド、テンプレートの魔法、多重継承など、あらゆる種類の優れた機能が含まれています。スクリプト言語としては Python が推奨されますが、実装がはるかに簡単な場合は Lua も受け入れられる可能性があります。
質問1
私がこれまでに学んだことから、Python/Lua と C++ を統合するには、大まかに言えば、「拡張」と「埋め込み」の 2 つの方法があります。
この場合、両方が必要なようです。スクリプト言語は、アプリからオブジェクト、メソッド、およびデータにアクセスする必要がありますが、ユーザーがスクリプトを記述したら、何も再起動せずにアプリによって呼び出される必要があります。
これは通常、現実の世界でどのように行われますか?
質問2
世の中には当惑するほど多くの手動ソリューションとバインディング ジェネレーターが存在するようですが、それらはすべて完璧とは言えません。
- swig、pyste、Py++、ctypes、Boost.Python sip、PyCXX、pybindgen、robin、(Cython/Pyrex、Weave)
- CppLua、Diluculum、Luabind、Luabridge、LuaCpp、Luna/LunaWrapper、MLuaBind、MultiScript、OOLua、SLB、Sweet Lua、lux (このリストは lua wiki から)
- CPB、tolua、tolua++、toLuaxx、luna、そして再び swig
ウェブ上にあるこれらのコメントのほとんどは、少し古くなっています。たとえば、swig は、自明でないケースでは難しく、理解できないコードを生成すると言われています。OTOH、最近v2.0になりました。
上記のいくつかは、pygccxml を使用して、gcc が C++ コードを分析し、バインディングを生成できるようにします。gcc はおそらく私よりもコードをよく理解しているので、このアイデアは魅力的だと思います :-)。これはうまくいきますか?
それらすべてをテストすると、プロジェクト全体に割り当てられた時間の半分が簡単に費やされる可能性があります。
それで、あなたはどれをお勧めしますか?