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も同じなので、結局使えないんですな…。

こんなんじゃ、素直にSDLPascal用ヘッダーでも落として来て、それをそのまま各プラットフォームにて使った方が絶対楽です。

http://sourceforge.net/projects/jedi-sdl/

…というわけで、私の悪巧みは失敗に終わりました。

以下追記。というより愚痴。

http://www.15seconds.com/issue/020917.htm

Limitations of CodeDom Technology

この文字を最初に見ていれば…。
あと、.NETのCLS準拠なんたらってのに対する私の不信感はやや高まりました。きっとOMFの.objファイルのほうが自在性は高いに違いない。