.NET Core 3.0/C# 8.0 正式リリースがあるとされている .NET Conf (9月23日から)も近づいてきて、さすがに最近は C# 8.0 がらみの動きはないというか、そろそろその先を見た動きになってきた感じがします。

ということで、こういう時期恒例のトリアージ祭りが発生中。

(無言でマイルストーンを変えただけのやつも、GitHub の Sort 順序「Recently updated」で浮上するんですね。 「今週何やらトリアージしてそう」って感知してたのを、今調べてなおしてて大変助かってる。)

ちなみに、Records は「これまでと変わらず」で 9.0 マイルストーンです。 一応、C# 9.0 はこれが主軸になるはず。6.0 時代から案だけはあったのが延々先延ばされてきましたが、ついに。

優先度微ダウン(8.X → 9.0)

この辺りは優先度ダウンしているといっても、9.0 自体のリリースのタイミングの方自体に関心が。

とりあえずわかっていることとして、

  • build での発表によれば、
    • 来年から .NET Core は毎年11月の定期メジャー リリースになる
    • (今年末の3.1は安定として5以降) Long Term Support (LTS)は偶数番リリースのみ
  • C# のリリースは .NET と足並みをそろえたがってる

というのがありまして。 じゃあ、LTS が付いてない奇数番のとき、C# はどうするんだって話でして。 .NET 5 のタイミング、C# も 9.0 になって LTS なしなのか、このタイミングでは 8.X を出すのか…

自分の把握してる範囲ではどっちになるかわからず。どちらになるかによってだいぶ「マイルストーン 9.0」の意味が違いそう。

8.Xに残っているものの少なさとか、9.0 に移動されたものがどれも小さ目な機能だとか、「C# 年次リリース」も十分あり得るような気もしつつ。でも、昔、「文法が年1メジャー アップデートするのはやりすぎ」みたいなこと言ってたし、「C# にも LTS ないバージョンがあるの?」的なこともちょっと思ったりはしつつ。

優先度アップ(X.0 → 9.0)

優先度アップ(未分類 → 9.0)

これ、参照型に対する可変長スタック確保(stackalloc T[n])が GC にやさしくないから厳しいって言われてた気がするものの… 以下の関連する作業が .NET 5 マイルストーンで動いてるので整合性は取れてるのかな…

優先度微ダウン(9.0 → 10.0)

優先度微アップ(X.0 → 10.0)

優先度ダウン(9.0 → X.0)

優先度アップ?(未分類 → X.0)

優先度大ダウン(8.X → Any Time)

ちなみに後者の Unicode なんとかというやつ、 大昔から既知の問題なんですけども、今の C# コンパイラーはサロゲート ペアな文字を識別子として受け付けません。 サロゲート ペアでも、非常用漢字とかヒエログリフとか、 Unicode 文字カテゴリー的には使えていいはずの文字があるんですが、それが使えないのは「バグ」です。

で、まあ、「Any Time」マイルストーンっていうのは概ね「外部からのコントリビューション待ってます」という意味。 やるとしたら自分だろうなぁとか思っていたり。

昔、corefx に「GetUnicodeCategory(int codePoint)を public にしてほしい」と要望を出したのはこれのためでして。 このオーバーロードがないと C# にサロゲート ペア識別子を入れるのは厳しい(きれいで、かつ、パフォーマンスをあまり落とさない手段がない)。

こいつは .NET Core 2.1 で無事に入ったわけですが、C# コンパイラーは今のところターゲットが .NET Standard 2.0 なので、まだこのオーバーロードを使えません。

というかぶっちゃけ、自分が「サロゲート ペアな文字を識別子に使えなくて困ってる人見たことないよ。ジョークでヒエログリフ使いたいって言う人の方が多いくらい。昔勉強会で『欲しい人?』って聞いてみたことあるけど誰もいなかった。それでも使えるようにする pull request 出そうと思ったことがあるけど、GetUnicodeCategory(int codePoint) がないのがネックだった。」的な報告をしているので、「Any Time」になったの自体たぶん自分のせい。

リジェクト

新規(未分類)

今、「C# スクリプティング」が特別なモードとして存在していて、その中でだけトップ レベル(クラス、名前空間の外)にメンバー宣言を書ける状態です。

で、今までは「C# スクリプティング」の需要自体が低かったから特別モードの保守も平気だった(最悪、ちょっと通常の C# よりも遅れてもいい)ものの、 最近、Try .NETによって需要が急増していてどうしようかという感じ。

(ちなみに、なんか最近この Try .NET、jupyter対応してるんですよ、作業的に。)

なので、トップ レベル メンバーを、特別扱いではなく、通常の C# の仕様にも統合できないかという話になっています。 「Mainメソッドはおまじない」からの脱却も、言語を学び始めたばかりの人にやさしいですし。

まあ、マイルストーン未分類ですが。