今年もそろそろ、どの機能を 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 に入れるべきかどうかの話があったみたいです。それによれば、

だそうです。

あと、ひっそりと、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 機能を使う前提」のライブラリでしか使えないようにアナライザーでチェックを行うみたいです。