Archive for 5月 2014
.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”なんて呼ばれてるもの
なんかも絡んでくるので一度整理してブログ化してみたい(ものの、いつやるか)。
非同期処理の基礎知識
そういえば先週の非同期勉強会の話題、ブログに書いてなかった。
自分の資料:
「CPUとかOSレベルな話から」という意味で「基礎知識」。べたに、「『こう書け』とだけ言われても、中の仕組みを知らないと納得いかないですよね」という話。
CPUの構造がどうとかいう話だけとか、OSスレッドの話だけとか、I/Oの話だけとか、個別にはちらほら見るものの、非同期処理って観点からこの辺りを通して説明してる資料って少ないなぁと常々思っていたので。「こう書いた方がいいよ」事例サンプルはC#ですけども、他の言語、他のOSでも通じる話だと思います。
ぶっちゃけ、C# 5.0のasync/awaitを使うとほとんど内部で解決してくれるような話ではあります。ただ、もちろん、「async/await使えば同期っぽく書けるといっても、非同期特有のはまりどころにははまるでしょ?」といわれるとその通り。でも、じゃあ、非同期処理を避けれるかというといまどき無理な話で、「非同期処理が避けようないんだったら自分で書くよりはasync/awaitに頼る方がマシ」という感じ。ということで、async/awaitのあたりの話でなく、こういう基礎部分の話をしないといけないなぁと思って作ったものです。