Xamarin7月リリースについて

リリースされてから5日ほど経って書いているわけですが、しれっと7月のXamarinリリースについて書こうと思います。

今回のリリースは、7/22-7/25に行われたmonkeyspaceカンファレンスに合わせるかたちで行われたもので、つまりそれなりに予定されていたものです。7月リリースの目玉としては、Mono 3.xのバージョンが(ベータではない)3.2で正式版となって、それに対応したバージョンとなったというのが大きいです。

Mono 3.2の要点は↓のような感じです:

  • ガベージコレクターがデフォルトでsgenになりました*1。それに加えてGCの停止時間を抑える low pause mode と、nursery collectionに加齢情報を使用して一定の水準に達した時点でのみメジャーヒープへのコピーを行う promotion-age が追加されたようです。この辺は環境変数MONO_GC_PARAMSで調整できます。
  • C# 5.0のasync/awaitと、関連するライブラリAPIが正式版として追加されました*2
  • 他にもNaClでmonoを動かすためのパッチがGoogleから継続的に流れて来ては取り込まれており、mono 3.2ではarm64サポートが含まれています。あと、3.0以降の変更としては、OS X Maverickが台無しにしてくれたビルドもちゃんと動くようになっています。

本当はここにPCLが入るはずだったのですが【禁則事項です】によりmonodevelopでビルド出来ない問題が出ていて、そのうち何かしらのかたちで(古いコードに戻したりなど)修正バージョンが出ると思います。

Xamarin.iOS、Xamarin.Androidとも、このMono 3.xを使うようになり、C# 5.0のサポートと、System.Net.Httpなどのasyncライブラリが使えるようになりました。(4月からAlpha/beta channelでは提供されていたので、特別に新しいわけではないのですが。)

XiOS, XAとも、F#プロジェクトを正式にサポートするようになりました。Xamarin Studioでこれらを使用するためには、Xamarinから公開されているわけではないF# addinと、Xamarinから公開されているF# iOS/Android addinをインストールする必要があります。

XiOSはインクリメンタル ビルドをサポートするようになり、必要最小限のビルドのみを経てデプロイされるようになりました(このためのオプションを有効にしておく必要があります)。ビルド時間がだいぶ短縮されるようになったはずです。

XiOSはgeneric structsをより幅広くAOTできるようになりました。monoランタイムでgeneric structを使用できなかったのは、ひとえにAppleの動的コード生成禁止制約によるものですが、これを回避するために、一定サイズの構造体用メモリを確保するかたちにすることで、generic structにおいても動的にコードを生成せずgeneric sharingを実現できるようになりました。結果的に無駄なメモリが消費されることになるわけですが、全く使えないよりはずっとマシでしょう。

XiOSはiOS 7とそのSDKが公開されてすぐに対応しています。

XAはより多くのAndroid/Java APIにアクセスできるようになりました。これは既存のJavaライブラリのバインディングdllを作成する時に、XAがバインドしていないAPIがあるせいで不完全なバインディングしか作成できない問題が少なからず生じていたことから、本来使う必要が全くないAPIであっても削らずに公開したほうが良い、という判断の変更によるものです。

ちなみに7月リリースの公開作業の最中にAndroid 4.3が公開されたおかげで先週は対応作業に追われてたいへん忙しかったのですが、遠からずXAの対応版が出るのではないかと思います。しれっとbionicのbsearchがmanpagesに合わないNetBSDベースの実装に変わって現状4.3では何も動きません(使い方次第ですが、NDKでbsearchを使っている直接/間接的に使っているコードは死ぬかもしれません)。

XiOS, XAとは別に、モバイルAPIの大きな動きとして、Xamarin.Mobileのライブラリがオープンソースで公開されました。

わたしは実のところまだ使ったことがないのですが、主にXamarin APIと.NETをWindowsで使いこなしているハッカーが書いているライブラリで、きっと参考になると思います。

7月リリースの内容は、とりあえずこんなところです。

*1:どうでもいいのですが、うちのGCハカーに「日本人は何でも3,4文字のカタカナにするからgarbage collectionもガベコレなんだぜ」って言ったら無駄にウケてしまい、以来彼はことあるごとにgabe-kore, gabe-koreと言うようになってしまったのですが、Xamarinオフィスに遊びに来た日本人ご一行様にその話をしたら「いやジーシーでしょう」と一蹴されてかなしい思いをしました。dʒíːʃíːじゃなくてdʒíːsíːですからね…!(何)

*2:前々からアルファ版で使えてはいたので、個人的には全く新しいニュースではないですが