CodeDOMとyaneSDK4cs
http://d.hatena.ne.jp/akiramei/20040421#p2
ここのコメント見てほんの少しだけ奮起した私は、あることを思いつきました。
http://dotnet.borland.com/babelcode/
C#のコードをDelphi for .NETのそれに自動変換できます。ILは凄いですね。
でもまあ、相互呼びだしだけなら.NET言語間は普通にできますので、わざわざ言語を変える価値はあんまり無いのですが、私が考えたことは、こうです。
yaneSDK4cs→(CodeDOM)→Delphi8→Delphi7とKylix
DelphiのWin32-.NET間の書き直し量はC++とMC++よりも少ないのが売りですしね。
よって、ほとんど何もせずにyaneSDK4p完成。
で、Delphiのなんでもあり具合を見せようと思ったのです。
…甘かった。
……とても甘かったです。
少量のコードなら特に問題ない、というより、感動ものでしたけどね…。
列挙型の中身が出てこないわ、classとrecordを取り違えるわ、クラスメソッドにvirtualとstaticが同時につくわ…++演算子を正しく訳せないわ…バグだらけじゃん。
でも、そんなのは直すのも楽なんですが。
(Pascalは前方参照できないので)宣言順が問題になるわ、yaneSDK4csは複数のソースが同じnamespaceの元で宣言されてるので再構成してやらないといけないわ…。むしろyaneSDK4dのほうが構成自体はPascal向けです。その際、動的配列を匿名で使えないので自動生成された型が被るわ…。
極めつけに、constの中身が出力されてないのを発見した時点で、あきらめました。
ついでに…ではまあ一応ということで、yaneSDK4cs.dllをそのまま使おうとしたのですが…エラーの嵐!?
[エラー] インポートされた識別子 'SDL_ACTIVEEVENT' が 'SDL_ActiveEvent' と衝突しています('SDL' 内)
以下同様。
CLS準拠じゃなかったんですかー!
でもVB.NETも大文字小文字無視な言語のはず…VBコンパイラはVBソース中で現れた識別子しか見ないとかあるんでしょうね、きっと。A#なんかも最初に全部インポートしてしまうタイプなのできっと使えないと予想。
一応報告しといた方がいいのでしょうか?でも、yaneSDK4cs.dllが直っても、実はICSharpCode.SharpZipLib.dllも同じなので、結局使えないんですな…。
こんなんじゃ、素直にSDLのPascal用ヘッダーでも落として来て、それをそのまま各プラットフォームにて使った方が絶対楽です。
http://sourceforge.net/projects/jedi-sdl/
…というわけで、私の悪巧みは失敗に終わりました。
以下追記。というより愚痴。
http://www.15seconds.com/issue/020917.htm
Limitations of CodeDom Technology
この文字を最初に見ていれば…。
あと、.NETのCLS準拠なんたらってのに対する私の不信感はやや高まりました。きっとOMFの.objファイルのほうが自在性は高いに違いない。