コンテンツへスキップ
ものがたり
戻る

mono 2.10以降のmcs/csharpの変更について

先に書いたとおり、mono 2.10ではmcsのコード生成エンジンの実装が大きく変わりました。これまではSystem.Reflection.Emitをコード生成に使用していて、その結果、生成されるコードはそのコンパイラを使用しているmscorlibに依存するという問題があって、それで2.8以前のmcs (1.x)、gmcs (2.0)、dmcs (4.0)、smcs (2.1, monotouch/monodroid含む) という別々のコンパイラが存在する理由だったわけです。

この問題が、IKVM.Reflectionに切り替わったことで無くなったわけです。現在のmcsでは、-sdk 引数によってビルドするプロファイルのバージョンを指定できます。

mono 2.10では、gmcs, dmcs, smcsは従来通りSystem.Reflection.Emitを使用しているようですが、今後のmonoのバージョンでは、全てIKVM.Reflectionベースのmcsとなり、gmcs, dmcs, smcsは単なるエイリアスになるでしょう。

ちなみにREPL環境として改善されたcsharpではSystem.Reflectionが使われているようです。リリースノートに書いてあるのですが、↓のようなスクリプトが実行出来るというのはなかなかいいですね。

$ csharp -e 'Math.Sin(0.1);'  

0.0998334166468282  

$ csharp -e 'from l in System.IO.Directory.GetFiles ("/bin") where l.Length > 18 select l;'  

{ "/bin/dbus-cleanup-sockets", "/bin/showconsolefont" }  

$

この記事を共有:

前の記事
MPEG LAによるWebM牴触特許の公募は独占禁止法違反ではないか
次の記事
2011-02-17