Mono 2.10 released
概ね予定通り、3ヶ月ちょいでの新バージョンです。
http://www.mono-project.com/Release_Notes_Mono_2.10
主な変更点…と書いてあるところから引っ張ってきて多少コメント:
- google native clientサポート : 昨年のGoogle I/Oでnative client上でUnityを動かしたデモがあったのですが、そのためにmonoにGoogleハカーが手を加えていたのを取り込んだかたちです。
- 新しいprofiler(まだ使ったこと無い…)
- ParallelFXの実装がだいぶ進化しました(これもまだ使ったこと無い)
- sgen-gcのパフォーマンス改善とスタックのprecise scanning
- Cecil/Light
- IKVM.Reflectionを使ったC#コンパイラ : 実行バージョンと生成アセンブリのバージョンなどで制約を受けるSystem.Reflection.Emitを切り捨てて、IKVMで使われているコード生成エンジンが使われるようになりました。これによって、1つのmcsで2.0, 2.1, 4.0の各プロファイルがビルドできるようになって、出来ることが広がりました。
- vbncの4.0対応
- ASP.NET MVC 3.0の(部分的な)対応。今はOrchardを問題なく動かせるようにするための作業がいろいろ進んでいます。ちなみに、ASP.NET 3.0は不完全なオープンソースなので、mono上でサイトをビルドするためにはMSで配布しているソースに含まれるバイナリライブラリもコピーして使用する必要があります。
- WebMatrix.Data.dll
- F# (fsi)、IronRuby (irb) 、IronPython (ipy) が実行出来るはずです。F#は対応作業が行われていたのを見ていますが、IronRuby/IronPythonはコミュニティかも。
今回はわずか3ヶ月でのリリースなので、それ相応の変更となりますが、こう書くと割と多いように見えなくもないですね。monoチームは今年はmonodroidにだいぶリソースを食われているので、monoに関わっている人はそれほど多くないかもしれません。12月は仕事しないというハカーも多いですし(僕もそうw) 個人的には2.10の期間は開発PCが2つ同時に壊れたりなどしてもう散々だったので、作業もSystem.Xamlの実装くらいしかやっていなかったりして…
ちなみに同時にMoonlight 4.0 betaが出ていて、MonoDevelop 2.6もそのうち出る予定です。
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" }
$