4月に紹介したLanguage Feature Status、だんだんはっきりとC# 7、VB 15に入りそうな範囲が結構絞られてきた感じ。
最近は、タプル型がらみに注力してる感じがします。
パターン マッチングも部分的に実装
これまで出てたアイディア全部を一気にC# 7に入れるんじゃなくて、将来的な拡張を阻害しないように気を付けつつ、部分的に実装しようという感じになってる様子。
上記リンクのうち、「Part 1 (targeting future)」になってる方がC# 7に入りそうなやつで、「Part 2 (to remain in features/patterns)」に入ってる方がそれより後のバージョンになりそうなもの。
要するに、C# 7としては、いったん、単純な型による分岐だけを実装するみたい。以下のものはその後の予定。
- 再帰的なオブジェクト分解の構文
- let ステートメント
- match 式
- throw 式
C# Design Notes (タプル型関連)
4月中にあったC# Designミーティングの議事録。タプル型関連の議題が多かったみたいです(あと、out varの話が少し)。以下のような内容。
-
ValueTuple
以外の型- C#のタプル型の実装に使われる
ValueTuple
構造体の他に、既存のTuple
クラスとか、あと、KeyValuePair
なんかも性質としてはタプルっぽい。これらを統一的に扱いたい
- C#のタプル型の実装に使われる
-
タプル型の分解(代入、宣言、パターン マッチング)用の構文案
(int x, int y) = Get();
的なのか、(int, int) (x, y) = Get();
的なのか、いくつか候補あり。今のところ前者が有力
-
(byte, short)
から(int, int)
みたいな、メンバー単位で暗黙の型変換がある場合の、タプル型間の変換- 認める方向で検討中。ただ、コンパイラーが頑張ることになるし、C# 6と7でオーバーロード解決ルールとかが変わっちゃう問題がある
-
(C#の構文糖衣としての)タプル型と、構造体の
ValueType
- null許容型が
int?
でもNullable<int>
でも使えるように、タプル型も(int, int)
でもValueTuple<int, int>
でも使えるようにしたい
- null許容型が
- パターン マッチングとの兼ね合い
ちなみに、そのValueTuple
構造体ですが、ついにcorefxの方に入ったみたい。
(ちょっと前までは、roslynリポジトリ内でだけ実装してた)
非同期メソッドの戻り値を任意の型に
- C# feature proposal: arbitrary async returns
- C# design rationale and alternatives: arbitrary async returns
- Discussion thread for arbitrary async returns #10902
今、Task
クラスしか返せない非同期メソッドに、任意の型を返せるように拡張したいという話。
あと、非同期ストリーム(await
とyield
を両方含めて、IObservable
とかIAsyncEnumerable
のような戻り値を返せるもの)の実装もまとめてディスカッション中。
これは、Language Feature Statusの「(C# 7.0 and VB 15) + 1」にすら並んでないんで、さらにもうちょっと先になりそうなんですかね。