私はSWIGバインディングを初めて実装した2年ほど前にこの問題にぶつかりました。大量のコードを公開するとすぐに、SWIGがC++ファイルを出力してコンパイラがそれらを処理できないほど大きくなっています。この問題を回避できる唯一の方法は、複数のモジュールにインターフェイスを分割し、それらを別々にコンパイルすることでした。SWIGモジュールを分割してコンパイルすることはできますが、リンクするときに再結合することはできますか?
これにはいくつかの欠点があります。各モジュール•
は、他のモジュール内の依存関係について知っている必要があります。私は、この側面を扱うインターフェースファイルを生成するためのスクリプトを用意していますが、複雑さが増します。
各モジュールが追加されるたびに、ダイナミックリンカがコードにロードする時間が長くなります。すべてのサブモジュールをインポートするinit .pyファイルを追加しました。これにより、コードが分割されていることがユーザーにはわかりますが、常に見えるのは長い読み込み時間です。
私は現在、私たちのビルドスクリプト/ビルドプロセスを見直していると私は私が今持っているものよりも優れていたこの問題の解決策を見つけることができるかどうかを確認したかったです。理想的には、すべてのラッパーコードを含む共有ライブラリが1つあります。
誰も私がSWIGでこれを達成する方法を知っていますか?私は、特定のプロジェクトでRubyで書かれたカスタムコードを見てきましたが、出力をポスト処理してこれを可能にしていますが、Pythonラッパーの実現可能性を見てもそれほど簡単ではありません。コンパイルを行う必要がありますだけで何 - 適切に分割した場合
私はあなたが少し逃してしまったと思います。あるモジュールから別のモジュールに物事を渡すときに問題はありません。すべてがうまく機能し、 "import"ステートメントを気にしてください。 問題は、複数のモジュールを1つの共有ライブラリにリンクして、コードを読み込む際の読み込み時間を短縮することです。 – jkp
ああ、申し訳ありません、スピードアップのための解決策はありません。 Tclでは、パッケージメカニズムを使用してモジュールが必要になるまでモジュールのロードを遅らせることができました。これは物事をスピードアップするのに役立ちましたが、ローディングをスピードアップするだけで、サイコロはありませんでした。 –