特別企画

Windowsの.NETをモバイルの世界に広げるMicrosoft

進化が続く.NET Frameworkとコンパイラ

 Build 2014では、次世代の.NET Frameworkに関しての発表も行われた。

 Build 2014に合わせて開発者向けのプレビューが開始されたのが、.NET Nativeだ。

 .NET Frameworkでは、C#やVBやF#などのプログラミング言語をMSILという共通中間コードに変換してから、実行時に逐次JITコンパイラでネイティブ命令に変換して動作している。

 これに対して.NET Nativeでは、MSILなどの共通中間コードへ変換せずに、直接ターゲットになるネイティブ命令に変換して動作させる。これにより、クライアント側に.NET Frameworkは必要なくなる。また、クライアント側でJITコンパイラが動作しないため、モバイルデバイスでプログラムの起動後にCPU負荷が高くなる、といったこともなくなるという。

 現状では、プログラミング言語のサポートはC#のみとなっている。また、開発できるアプリもWindows Storeアプリ(Modernアプリ)のみだ。.NET Nativeのコンパイルは、Visual Studioなどのローカルで行うのではなく、クラウド(Compiler in the Cloud)側で行う。

 こういった仕組みのため、Windows Storeアプリを開発してクラウドに置けば、クラウド側でARMやx64などのネイティブコードに変換してくれる(将来的にx86コードにも対応する予定)。

.NET Nativeは、コールド/ウォームスタートの性能がアップし、メモリ使用量が少なくなる
.NET Nativeは、現状ではx64とARMをサポート。Windows Storeアプリだけをターゲットにしている

 もう一つは、次世代JITコンパイラとなるRyuJIT(開発コード名)だ。

 現在のJITコンパイラは、32ビットと64ビット版でコンパイラ特性が異なっている。

 32ビットのJITコンパイラは、迅速にプロセスが起動するようにチューニングされていたのに対し、64ビットJITコンパイラは、パフォーマンスの高いコードが得られるようにチューニングされていた。

 しかし、クライアントPCやタブレットでも64ビット環境がサポートされるようになったことで、64ビット環境で迅速に起動でき、高いパフォーマンスを持つJITコンパイラが必要になってきた。さらに、x86/x64だけでなく、ARMプロセッサでも将来的には32ビットから64ビットCPUへ移行していくことを考えれば、新しいJITコンパイラは必須といえる。

 RyuJITでは、JITコンパイラがサポートしていなかったSIMD命令をサポート(AVX命令など)したほか、マルチコアへ対応している。

 現状のプレビュー版ではx64アーキテクチャしかサポートしていないが、テスト段階でも30%以上のパフォーマンスアップを果たしている。

RyuJITは、以前のJIT64に比べるとさまざまな部分で高い性能を示している。ただ、すべてが高速というわけではないようだ。これは、プレビュー版というためなのかもしれない。将来的に製品版になれば、もう少しチューニングされていくだろう
RyuJITは、AVXなどの最新CPUが持つSIMD命令に対応している
SIMD命令を利用することで、マンデルブロレンダリングのパフォーマンスがアップする

 このほか、次世代のC#やVBのコンパイラとなる.NET Compiler Platform(開発コード名:Roslyn)も注目されている。

 Roslynは、C#やVBコンパイラの内部をAPIで公開していくモノだ。これにより、ソースコードの分析、変換、実行ファイルの生成など、各段階をAPIでコントロールできる。

 例えば、今までは、ユーザーがC#に新しい命令を追加したりすることはできなかった。しかし、Roslynでは、コンパイラの内部をAPIで公開しているため、ユーザーが新しい命令を追加して、実行ファイルを生成することができる。Microsoftでは、Roslynをバックエンドに使い、C#やVBなどMicrosoftがサポートしていないプログラミング言語をVisual Studioで利用できるようになるとしている。

次世代のJITコンパイラのRyuJITでは、コンパイラの中身を一新して、新たなハードウェア環境に対応。パフォーマンスを引き上げている
Roslynは、コンパイラの中身を透明化したものだ。単に次世代の.NET Compilerではなくプラットフォーム化されており、コンパイラの各段階をAPIでコントロールできるようになっている
Roslynは、C#やVBに対応している。OSS化したことで、開発者がRoslynに独自言語を追加することができる

 今回のBuild2014における開発ツール側の発表などを見ていると、今までのように、絶対的なシェアを握っているというだけでは、多数の開発者を引き寄せることができなくなっているように感じた。今後は、OSSなどのコミュニティでどれだけ開発者の歓心を得られるかということが重要になっていくのだろう。

 もう一つ、Windowsとは違う世界がマーケットに広がっているのを、Microsoftが認識していることも感じ取れる。こうした現実の世界に対応していくため、マルチデバイスに対応した環境を構築しようとしている。

 ただBuild 2014では、マルチデバイス対応や新しい.NET Frameworkの流れなどは明らかにされたものの、これらのソフトウェア群はまだ開発途中で、実際に完成するには、もう少し時間がかかる。

 このような状況から、本格的な次世代OSといわれているThreshold(スレッシュホールド、開発コード名)がリリースされるのは、2016年ごろになるのではないか、と筆者は予想している。

.NETは、今後も進化していく。もしかすると、.NET Frameworkの大幅な進化が、Windowsプラットフォームを変えていくのかもしれない

山本 雅史