Swig
Swigを使って自動生成を試みたところ、以下の2点の対処が困難。途中からSwigのコード解析をする羽目になり、人力で必要な部分だけwrapperを書いた方が早い気がしてきたので断念。
- ネストされたネームスペースがうまく扱えない。
- ネストされたテンプレートの展開が大変
それぞれ暫定対処があるものの、Iterator関係で両方絡んでくると、なかなか思い通りのwrapperコードが生成されず、発狂しそうになる。コードの自動生成ではよくあること。自動コード生成の試み自体は好きなので、嫌いになる前に、そっと距離を置くことにした...
Ogre.rb
Rice及びgccxmlを使ったruby wrapper生成プログラム(Rb++)を作成した作者自身が、それらのツールをOgre1.7.1に適用して生成したもの。とても便利なツール群を使った自動生成環境なのですが、Ogre1.7.4で試した際に以下の問題があり断念。
- 使用しているRiceの制限で、コンストラクタを一つだけ選択する必要がある。
- gccxmlのtr1 parse問題のためにOgre3Dのコードにパッチを当てる必要がある。
- template系でコード生成エラーが出るため対象から外さないといけないlass/methodあり。
- ネストされたtemplateクラス用wrapperコードのファイル名が254バイトを超え、書き出せない。
- 単一ファイル生成モードによる回避を図ったが、gccxmlのファイル書き出し最中にError。
こちらもコード生成ツールのデバッグモードに突入。また、コード生成に必要なツールが多く、それぞれの動作を追いかけるのが少々面倒くさい。こちらも、再び気が向くまでそっとしておくことにした...
Libogre-ruby
普通に人力wrapperを作成しているが、まだ完成していない。進捗度は自作のwrapperと大差なく、開発も止まっているようなので、遠くから見守ることにした...
まとめ
ざっとググってみたが、意外に少なく、また今のところ決定打が見当たらない。C++からのruby wrapper自動生成に関しては、Ogre3Dで多用しているtemplateとネストの対処が鬼門のようで、皆さん苦労しているように見受けられる。人力生成は途中で飽きてくるため、各自必要な部分だけ作ったら止めてしまっているようだ。 どれかを手伝うのが世の中的には良い気がするが、シャイな私には無理のようだ。
0 件のコメント:
コメントを投稿