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なんかも性質としてはタプルっぽい。これらを統一的に扱いたい
  • タプル型の分解(代入、宣言、パターン マッチング)用の構文案
    • (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>でも使えるようにしたい
  • パターン マッチングとの兼ね合い

ちなみに、そのValueTuple構造体ですが、ついにcorefxの方に入ったみたい。

(ちょっと前までは、roslynリポジトリ内でだけ実装してた)

非同期メソッドの戻り値を任意の型に

今、Taskクラスしか返せない非同期メソッドに、任意の型を返せるように拡張したいという話。

あと、非同期ストリーム(awaityieldを両方含めて、IObservableとかIAsyncEnumerableのような戻り値を返せるもの)の実装もまとめてディスカッション中。

これは、Language Feature Statusの「(C# 7.0 and VB 15) + 1」にすら並んでないんで、さらにもうちょっと先になりそうなんですかね。