++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Archive for 5月 2014

.NET vNext

leave a comment »

ようやくTechEd NA 2014関連の話を見れているところ。

TechEdなのでやっぱり話題の中心はAzureとかASP.NETなわけですが、その辺りはまあ、

やっぱ、しばやん雑記とかブチザッキですわね。

で、自分が気になるのは.NET vNextの方。

.NET vNext

まず、.NET Frameworkの次期バージョンといえば、先月の//build/とかで出てた内容:

そして今回、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”なんて呼ばれてるもの

なんかも絡んでくるので一度整理してブログ化してみたい(ものの、いつやるか)。

Written by ufcpp

2014年5月20日 at 02:00

カテゴリー: .NET

非同期処理の基礎知識

leave a comment »

そういえば先週の非同期勉強会の話題、ブログに書いてなかった。

自分の資料:

非同期処理の基礎 from 信之 岩永
OneDriveにもアップロード
 
「CPUとかOSレベルな話から」という意味で「基礎知識」。べたに、「『こう書け』とだけ言われても、中の仕組みを知らないと納得いかないですよね」という話。
CPUの構造がどうとかいう話だけとか、OSスレッドの話だけとか、I/Oの話だけとか、個別にはちらほら見るものの、非同期処理って観点からこの辺りを通して説明してる資料って少ないなぁと常々思っていたので。「こう書いた方がいいよ」事例サンプルはC#ですけども、他の言語、他のOSでも通じる話だと思います。
ぶっちゃけ、C# 5.0のasync/awaitを使うとほとんど内部で解決してくれるような話ではあります。ただ、もちろん、「async/await使えば同期っぽく書けるといっても、非同期特有のはまりどころにははまるでしょ?」といわれるとその通り。でも、じゃあ、非同期処理を避けれるかというといまどき無理な話で、「非同期処理が避けようないんだったら自分で書くよりはasync/awaitに頼る方がマシ」という感じ。ということで、async/awaitのあたりの話でなく、こういう基礎部分の話をしないといけないなぁと思って作ったものです。

Written by ufcpp

2014年5月20日 at 01:48

カテゴリー: .NET

Tagged with