C# 7に取り込む範囲、ある程度決まったみたい

作業リストが更新されてた。

前はあって今消えてるものは単に「7からは外す」という意味。 まだ最終決定でもないんで、ここからまた増減はあるはず。

個人的な印象としては、現状でもそこそこ動いているものだけ残してる感じ。 たぶん、「年に1回リリース」、つまり、今年中のC# 7リリースがかなり現実味ありそう。

ということで、まだちょっと検討が要りそうなものはリストから抜けました。 待ち遠しいけども先送られたのは「非同期シーケンス」と「非null参照型」あたりですかね。

レコード型の仕様書

レコード型の仕様書がやっとできてた。future ブランチにはマージ済み。

expression-bodied な set/get、コンストラクター

set, get 個別に、=> を使った短縮形のプロパティ定義を書けるようにしてほしいとか、そういう要望が前々から上がっていたわけですが。

C# 6の時にも検討されたものの、「要望があるのはわかるけど、そこまで需要高くないし後回し」扱いされていたものです。

それに対して、C# チームの外から pull request が来て、C# チーム的にも「それをベースに実装するか」という流れになっている模様。

サロゲートペア識別子対応

日本人的に、ほしければ「Add your reaction」で +1 だけでもつけといた方がよさそうなものが。

サロゲートペアになってる文字でも、文字カテゴリーが letter になってるんだったら識別子に使えるべきじゃないかという話。

要するに「𩸽」(ほっけ。U+29E3D)とかの話。

C# 的には、letter系のカテゴリーに含まれている文字を識別子に使えるという仕様になっています。 ただ、.NETが内部的に16ビット(UTF16)で文字列を持ってるせいで、サロゲートペアになってる文字はカテゴリーを正しく判定してもらえない。

要するに、以下のようなコードを実行すると、結果はSurrogateになります。

char.GetUnicodeCategory("𩸽"[0])

とはいえ、以下のように、charじゃなくてstringを受け付けて、サロゲートペアな文字でも使えるオーバーロードに書き直せばちゃんと判定できます。 𩸽の場合はOtherLetter。

char.GetUnicodeCategory("𩸽", 0)

ってことで、

  • C# 実装なRoslyn的に、実は判定自体はできる
  • でも、2文字見ないといけなくなってそれなりにコンパイラーに負担が掛かる
  • それで使えるようになる文字というと、日本語的には𩸽みたいなレアな文字
    • このissueページで言われてるのは「シュメール語の文字を使いたい」みたいな要望

という感じ。

それでも、この手の文字を識別子に使いたいですか?使いたいなら、reactionしておきましょう。