.NET Native: 事前ネイティブ化 実際はストアサーバ上でネイティブ化。JIT以上に最適化出来る。シリアライズコードの事前展開など。 #clrhtky3
2014-06-28 17:05:43.NET Nativeでもリフレクションは使える。推論が効く部分は自動判定できる。それ以外はリフレクションで使っている情報を書いておく。 #clrhtky3
2014-06-28 17:06:51ASP.NET vNext Cloud Mode: ソースコード配置、自動パッケージ管理 #clrhtky3
2014-06-28 17:09:11ソースコード配置: Roslynを利用して、メモリ上で全部コンパイル side-by-sideインストール: アプリ毎に.NETのバージョンを変えられる #clrhtky3
2014-06-28 17:10:01パッケージ管理: .NET自体もパッケージとして管理できるので、アプリが使いたい.NETのバージョンを変えることが出来るようになる。 #clrhtky3
2014-06-28 17:11:22.NET FrameworkとMonoの実行環境は互換性が高い。コンパイラがはき出すILも互換性がある。 それぞれが使えるライブラリは別物。 #clrhtky3
2014-06-28 17:16:25Portable Class Library: 実行環境のフレームワークから共通部分だけをとる仕組み。すでに提供されている機能 #clrhtky3
2014-06-28 17:18:11.NET vNextでは3系統別実装。JIT, .NET Native, Cloud Mode。 1つの"標準"ライブラリで保守するのは難しい・・・ #clrhtky3
2014-06-28 17:20:13vNextは本当に世界観が変わる気がしているので、一人一人どう向き合うか考える必要があると思う。 #clrhtky3
2014-06-28 17:29:073時間目: C# 言語機能 async/await出た以降、C# 使ってないから気になるところ #clrhtky3
2014-06-28 17:29:16ジェネリック C# 2.0~ 型だけ違う処理をコピペではなく、型をパラメータとした同じコードで書けるように #clrhtky3
2014-06-28 17:32:59ジェネリックのポイント: 型の直行化 処理・要素管理が型に依存しない。全部分けないで作ると組み合わせの爆発が起こる #clrhtky3
2014-06-28 17:34:04Genericsが日本語で「ジェネリック」となっていてsがないのは、複数形が疑われるsは訳出しないというMicrosoftのルールのためらしいが、意味的は必要ではないか。 #clrhtky3
2014-06-28 17:35:36.NETではメタデータが残る。ジェネリクス用の命令があるので、非常にパフォーマンスが良い。 C++のtemplateも似たような物だが、実行ファイルが肥大化しがち。Javaではコンパイル時には全部Object扱いのうえキャストとかリフレクションとか悲惨 #clrhtky3
2014-06-28 17:37:41. NETのジェネリックでは、インターフェイス制約をかけないと、メソッドすら呼べない。特に困るのが演算子が書けない。 #clrhtky3
2014-06-28 17:39:15型パラメータの制約はインターフェース制約。演算子はインターフェースに書けないので、どうしても+=を使いたいときはdynamicを使う(パフォーマンスに影響有り) #clrhtky3
2014-06-28 17:39:51イテレーター C# 2.0~ データ列を生成するクラスをイテレーター(iterator)、列挙子(enumerator)という。 #clrhtky3
2014-06-28 17:42:50C# でイテレーターを簡単に書くなら、yield returnを使う。使う側はforeachで回せばよい。 yield returnを持つ関数ブロックをイテレーターブロックといい、イテレータークラスを自動生成する。 いろんなところに使える。 #clrhtky3
2014-06-28 17:44:11yield returnは中断と再開、復帰の実装になる。 yield: 道を譲る => 作る側から使う側にCPUを譲るイメージ 他の言語ではジェネレーター(Generator)と呼ばれる形で機能がある(実装は別物)。割と機械的なのでC++ではマクロでも書ける #clrhtky3
2014-06-28 17:48:41ちなみに: C++ 1yに向けてジェネレーター実装の提案をMSが出したそうな。 「アルゴリズムの問題はかなりの割合でイテレーターを使うと簡単に解ける」by 某コーディング面接社員 だそうな。 #clrhtky3
2014-06-28 17:50:48LINQ(Language Integrated Query) C# 3.0~ データ処理を言語統合 e.g. 配列から条件を満たす要素だけを残し、要素毎に処理をする ・・・Java 8のStream APIで似たコードを見た気がする #clrhtky3
2014-06-28 17:52:52データの処理(入力、加工、出力)の直交化。ジェネリックと同様に、分けて作れば組み合わせが少なくて済む。 LINQの実装はyield returnで出来る。IEnumerableを引数にとってIEnumerableを返す #clrhtky3
2014-06-28 17:55:35ラムダ式 C# 3.0~ 匿名関数を簡単にかける。 =>(goes to) 演算子 左が引数で、右が関数本体。実際は関数を自動生成しているだけ。 #clrhtky3
2014-06-28 17:56:56ラムダ式でローカル変数を使う場合、クラスを生成している。(ローカル変数のキャプチャ) ローカル変数がフィールドに昇格するため、もしかしたらGCに影響が出るかも。 #clrhtky3
2014-06-28 17:58:01匿名型 C# 3.0~ 1カ所でしか使わない型を作らない。 実装としてはimmutableなクラスの自動生成 拡張メソッド C# 3.0~ 静的メソッドを後置き記法で書ける。 2.0以前なら、括弧が遠く、処理順の逆に書く必要があった #clrhtky3
2014-06-28 18:00:11