6月くらいからの C# Design Notes 追加。
いくつかは、提案文書の方が先に出てたので、先にブログを書いてあるものの原案みたいなもの。
その他に関して。
nullable reference types
- 
May 30
- 「アノテーションを何もつけていないと非 null 扱い」(unannotated reference types to be non-nullable; "URTANN")に関して
 - 
URTANN 動作の opt-out ができないと、C# 7.X 以前のコードが警告だらけになる
- 現状の Roslyn にそのまま適用すると2000個くらいの警告が出るらしい
 
 - デフォルト挙動は URTANN(true) にしたい
 - 細かい粒度(特定のファイルだけ、特定のクラスだけ、特定のメソッドだけ)で URTANN の opt-in/out 切り替えができるようにしたい
 - 切り替えはたぶん属性でやる。
NonNullTypesAttribute(bool) 
 - 
Jun 4
- ラムダ式にキャプチャした変数の null フロー解析、ちょっと特殊になりそう
 
 
式ツリー
式ツリーで使える文法を増やしたいという話は前々からあるものの、やっと検討が始まったっぽい。
前半は需要のあるシナリオについて。Big data に対するクエリを式ツリーで送りたいとか、機械学習ライブラリ方面で自動微分とか GPU 上でのコード実行したいとか。
後半は実現方法に関して。
- 
既存の、Entity Frameworkとかはノードを追加されても使えない。どのノードが使えるかはライブラリごとに異なる。どう制限するか
- 案1: 非同期メソッドでやってるみたいに、builder を介して任意の型でツリー構築できるようにする
 - 案2: アナライザーを使って制限する
 
 - 
reduction (await をその展開結果である AsyncStateMachine の行動に変換したりとか、そういうノード変形)はやるかどうか
- あまりしない方がよさそう
 
 - C# の最新機能全部に、式ツリーが常に100%追従しようとは思っていない
 
とか言う感じ。あと、一応、プロトタイプ実装あり。
Target-typed new
- 
Jun 25
- オーバーロード解決には寄与させないつもり
 S? s = new ();みたいに書くとき、new S()の意味にする(new Nullable<S>()、つまり、null の意味にはしない)new ()は型を持たない。var x = new ();みたいなのは型が確定しなくてエラーnew ()とかnew {}とかは認めるけど、new単体は認めないつもりdynamic型がターゲットのnew ()も認めない
 
オーバーロードに関しては、例えば以下のような話。
struct S1 { public int x; }
struct S2 { }
void M(S1 s1) { }
void M(S2 s2) { }
void X()
{
    M(new() { x = 43 });
    //↑ x を持ってるのは S1 だけだから、S1 と推論できる
    // でも、それをやっちゃうと、S2 に後から x を追加することで破壊的変更が起きちゃう
    // なので、こういうオーバーロード解決はやらない
}
null 条件演算
?. とか ?? 系統の機能をいくつか追加。
x ??= yで、x = x ?? y;await? tで、if (t != null) await t;- ポインターに対しても
p?[a]、p?->a、p ?? q 
