「C# 7」に入る範囲がそろそろ決まってきた感じ。
C# Design Notes for Apr 6, 2016 (Tuples, Recursive patterns)
久々に言語デザインミーティングの議事録が。
タプル型と、再帰的なパターン(位置指定パターン・プロパティ パターン)の詳細がだいぶ決まってきたっぽい。
タプル型は↓こんな感じ。
-
メンバーの数と型が一致していたら、名前は無視して同一視する(代入可能)
- box化・unboxしても同様の変換ルール適用可能
- メンバーが int → long みたいな暗黙的型変換できる場合でも、タプル型の自動変換はいったんしないことにする(将来はわからない)
- 無名タプルも作れる(メンバー名指定なし)
- 匿名型の
new { p.X, p.Y }
みたいに、名前の射影(X, Yという名前を引き継ぐ)あり - タプル型に対する拡張メソッドも作れる
- タプル型引数の規定値も指定できるようにしたいけど、そのためには何か新しい属性が必要になる(ので、いったん据え置きになりそう?)
-
0-tuples, 1-tuplesも検討したい
- それぞれ、C#チーム内ではnuples, wonples (null+tuple, one+tupleの造語?)と呼んでるみたい
- nuplesは、要するに「ユニット型」。
()
で書き表せそう - wonplesが難しそう。
(Type)
も(value)
も現在のC#で有効な構文になっちゃってるんで
- タプル型戻り値を、out引数みたいな感じで、メンバー名で代入可能にはしない。return使え
再帰的なパターンの方は、もしかしたら全部やC# 7ではやらないかも。段階的に便利にしていくのでもいいだろうし、後からの追加に耐えれるようにC# 7を作れそう、とのこと。
Language Feature Status
C# 7として出したいもの、だいぶ絞られてきたみたい。状況のまとめページができてます。
概ね、こないだのbuildでデモでプロトタイプが動いてたものに絞った感じ。リリース時期が大まかには決まってきたのかな?この絞り方(今ある程度動いてるものだけをまず出す)の感じからすると、Windows 10のレッドストーンと同時期?
Source Generators
メタプログラミングがらみ、ソースコード ジェネレーターのドキュメントができてた。
これはほんと一刻も早く試したい…
C# as a High-Performance Language
C# vNextのパフォーマンス改善系の提案まとめページが。
Build Insiderでやってる連載の次回のネタ、パフォーマンスにしようかなぁ。
Roslyn自体がパフォーマンス面に関して相当シビアだったり、ゲーム方面でC#が注目されてたり、.NET Coreがベンチマーク向上を頑張ってる真っ最中だったり、今、結構こういう機能が求められています。