今年もそろそろ、どの機能を C# 10.0 にして、どの機能を "Next" のまま(11 以降に先送り)にするかを決めないといけない時期が来ましたと言う話。
マージ済み機能
まず、Language Feature Status が更新されました。
「C# 10.0」の方に移ったのが以下の4つ。 (17.0p2 が Visual Studio 17 Preview 2、 17.0p3 が Preview 3。)
機能 | Merge 先 |
---|---|
Lambda improvements | 17.0p2 |
Static Abstract Members In Interfaces ※ | 17.0p2 |
Interpolated string improvements | 17.0p3 |
File-scoped namespace | 17.0p3 |
※ これだけ「Preview」です(後述)。
Visual Studio 17 Preview 1 が出てからそろそろ1か月くらいですし、 このリストに「p3」(次の次)の文字が並び始めたんで、そろそろ Preview 2 が出るんでしょうね。
10.0 には間に合わせるリスト
それとは別に、7月12日の LDM では残りの "Next" について、10.0 に入れるべきかどうかの話があったみたいです。それによれば、
-
Parameterless struct constructors
- record structs の一部みたいなものだし入る。p3 にマージ予定
-
nameof(parameter)
- 需要あるのはわかってるけど10には間に合わなさそう
-
Parameter null-checking
- 11 入りを目指す
-
Relax ordering of ref and partial modifiers
- 進捗ないです。"Next" からも消した方がいいか
-
Caller expression attribute
- ほぼできてる。たぶん 10 入り
-
Generic attributes
- できてる。たぶん 10 入り
-
List patterns
- 11 入りを目指す
だそうです。
あと、ひっそりと、raw string literals の実装コードの中に「C# 11.0」の文字が (コンセプト検証用のコードですけど、「既成事実化」を狙ってそうな匂いが多少)。
※ Preview
これまでだいたい、Preview というと、
-
1月~7月くらいまでの間、LangVersion preview 指定必須で機能提供
- .NET 6 Preview を使っていても LangVersion preview 指定が必須
-
8月くらいから、時期 .NET SDK と同期して LangVersion default 扱い
- .NET 6 Preview を使うと LangVersion default が C# 10.0 になる
-
11月の .NET SDK リリースに合わせて言語機能もリリース
- .NET 6 のリリースと同時に C# 10.0 としてリリース
みたいなものしかありませんでした。
ただ、今回、 .NET 6 リリース時点でも Preview として残りそうな機能が1個あります。
こいつだけは、 Visual Studio 17 Preview 2 時点で動く物が世に出るものの、.NET 6 リリース時点でも LangVersion preview 必須になりそうです。 要するに、Preview である期間を十分長く取りたいくらいチャレンジ度合いの高い機能です。
C# 側だけでなく、 .NET ランタイム側にも Preview オプション指定での実行が必要だし、RequiresPreviewFeatures
属性が付いていて「ランタイム側の Preview 機能を使う前提」のライブラリでしか使えないようにアナライザーでチェックを行うみたいです。