.NET vNext
ようやくTechEd NA 2014関連の話を見れているところ。
TechEdなのでやっぱり話題の中心はAzureとかASP.NETなわけですが、その辺りはまあ、
- ASP.NET vNext(MVC / Web API / Web Pages 6, Entity Framework 7, SignalR 3)が TechEd NA で発表された話
- TechEd North America 2014 Day 1 Keynote
やっぱ、しばやん雑記とかブチザッキですわね。
で、自分が気になるのは.NET vNextの方。
.NET vNext
まず、.NET Frameworkの次期バージョンといえば、先月の//build/とかで出てた内容:
- .NET Compiler Platform (コードネーム Roslyn)
- C#/VBコンパイラーを(IDEとか含め)任意アプリからサービス的に利用するためのライブラリ
- 過去の記事: .NET Compiler Platform (Roslyn) Preview
- The JIT finally proposed. JIT and SIMD are getting married.
- .NETのManagedコードのJITコンパイル時に、SIMD命令を使った並列計算をサポート
- RyuJIT自体の話: The next-generation JIT compiler for .NET
- Microsoft .NET Native
- .NETコードを事前コンパイルする仕組み
- クライアント デバイスに.NET Frameworkのインストールは不要だし、クライアント上での負担は少なく、高性能化
- Windowsストアのサーバー上でクラウド コンパイル
- 過去の記事: .NET Native
- .NETコードを事前コンパイルする仕組み
- 上記総まとめ: The Next Generation of .NET
そして今回、ASP.NET vNextに伴って出てきた話題:
- ASP.NET vNext: the future of .NET on the Server
- (.NET自体に関係するところだけまとめると)
- side-by-sideな(同一サーバー内で、アプリごとに別バージョンを使える).NET Framework実行
- NuGetパッケージを使った自動依存解決(BCLすらNuGet配布)
- Roslynを使った動的な実行(ソースコードを置いておくだけでOK。コードを書き換えて、ブラウザーの更新をするだけで変更が反映される)
- 適切な粒度でのフレームワークの分割
いろんな実行方法
.NET vNextには、大まかにいうと3系統の成果があります。
- (これまで通りの)JIT
- デスクトップ環境だとこれまで通りで大丈夫
- これまで通りの部分も引き続き投資されていて、性能改善などがある
- .NET Native
- モバイル端末向け
- 事前に(サーバー上で)アプリをネイティブ化してから、モバイル端末に配布
- .NET on the Server
- サーバー、特にクラウド向け
- アプリ単位でランタイムを切り替えれる
- サーバー上にC#(など)のソースコードを配置するだけでWebアプリが稼働
.NETが世に出た当時と比べて、いろんな環境が出てきたので、それに合わせて最適な実行方法も多様化しています。.NET vNextでは、その多様性に対応していこうということみたいです。
アプリの配布方法
- JIT
- これまで通り、IL(中間言語)での配布
- 参照しているライブラリの依存解決とかもJIT時に行う
- .NET Native
- Windows Storeのサーバー上でクラウド コンパイル(compile in the cloud)
- 参照しているライブラリの依存解決とかはすべてサーバー上で行う
- モバイル端末にはネイティブ化した状態で配布
- .NET on the Server
- C#などの高級言語で書かれたソースコードをサーバーにアップロードするだけ(Roslynを使った動的な実行)
- ソースコードを書き替えるだけでアプリの挙動が更新される
.NETランタイム
- JIT
- OSに.NET Frameworkがインストールされている必要あり
- Windows 7/8/8.1にはそれぞれ.NET 4/4.5/4.5.1が標準で入ってるものの…
- Windows前提
- 新機能の利用にはアップデートが必要
- .NET Native
- モバイル端末側に.NET Frameworkがインストールされていなくてもいい
- クラウド コンパイル時に、(.NETの標準ライブラリ中の機能も含めて)必要なものはすべて静的にリンクして、アプリに同梱
- .NET on the Server
- サーバーOS自体に.NET Frameworkがインストールされていなくてもいい
- バージョン マネージャーを介して必要なバージョンのランタイムをダウンロードしてくる
- アプリ単位で別バージョンを利用可能
- 依存しているライブラリも、すべてバージョン マネージャーが管理・必要な分をダウンロード
実行性能
- JIT
- 次世代のJIT(コードネーム RyuJIT)でいろいろ性能改善
- 起動時間短縮
- SIMD命令対応
- .NET Native
- クラウド コンパイルなのでコンパイル時にしっかりと最適化(C++コンパイラーと最適化コードを共有)
- .NET on the Server
- 実行自体はJITだと思うので、RyuJITの成果次第
適切な粒度に分割
あと、.NET vNextとかASP.NET vNextとかでは、一枚岩なシステムだった.NETを適切な粒度に分割しているのも大きなポイント。
そういう動き自体は.NET 4.5の頃からあったんですが、引き続き.NETの整理が進みそうです。この辺りは、
- .NET 4.5の時の成果
- BCLのアセンブリ整理
- Auto-Ngen
- NuGetパッケージ
- myget.org
- 今回出た話題
- コードネーム “Project K”とか“K Runtime”なんて呼ばれてるもの
なんかも絡んでくるので一度整理してブログ化してみたい(ものの、いつやるか)。
コメントを残す