飽きっぽい人のブログ

プログラマとしてもテスターとしても中途半端な人のブログ

Windowsのこれからを占う 事前コンパイルを最大限に活用するOSへ

はい、占ってみようと思います
こういうこともWindows9に関する情報が出そろっていない今が旬かなということでw

.NET Nativeからどう進むのか

以前拙ブログでも.NET Nativeの記事を書いたのですが、今回の記事でも少し関係があるので要点だけ書きます

.NET Nativeの特徴
・.NETのアプリケーションの事前コンパイル
・インストール時には既にネイティブアセンブリとなっており、フレームワークが静的にリンクされる

ポイントは.NETフレームワークが静的にリンクされている点でしょうか。そのため、事前コンパイラにより最大でOSのAPIを直接呼び出すまで最適化されます(はずです)
今回はこのあたりに注目していきたいと思います

これ、Bartok

はい、そう思った方はかなりのMicrosoft好きですねw
Bartokについて知らない方が多いかと思いますので、補足するとBartokとはMicrosoftが研究開発していたSingularityというOSに付属する事前コンパイラらしいです
詳しくはSingularityの資料を見ていただきたいのですが、資料内にわかりやすい図があったので乗せときます

f:id:qwerty2501:20140426204155p:plain

.NET Nativeの事前コンパイルの仕組みにそっくりですが、どうも資料を見る限り、Singularity OSのカーネルまでもが静的リンクの対象に含まれているように見えます
それもそのはずで、SingularityのほとんどのコードがC#の言語仕様に破壊的な変更を加えた言語で書かれており、中間言語として出力されるためです
そのため、今まで関数の呼び出しとして提供されてきたOSのAPI呼び出しが、事前コンパイルの最適化により、インライン展開される可能性を秘めているのです
これによりかなりアプリケーションの高速化が期待できます 2006年のものですがベンチマークの資料があったので乗せときます(ソース)

f:id:qwerty2501:20140426211003p:plain

クラウド上で新OSのAPIを提供か

Singularityのように中間言語で提供すれば理論上は可能なはずです。.NET Nativeの登場により現実性が一層増しました
ただし、全てを静的にリンクしてしまうとさすがにアプリケーションが肥大化しすぎてしまうので、最小限のカーネルはクライアントにインストールされるのが妥当な線ではないでしょうか
もちろんすぐに、とはならないでしょう。OSのAPIを新しく書き直さないといけませんので
また、この手の最適化はストアアプリのようなアプリの配布を管理できるプラットフォームに限定されるのではないでしょうか。でないとOSのAPIやプラットフォームに更新が入ったときにいろいろめんどうそうです
いずれにせよ、実現すればアプリケーションのかなりの高速化が見込めます
Windows PhoneやWindowsタブレットの今後に期待といったところでしょうか