銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Primary constructors と Declaration expressions は C# の次のバージョンから取り下げられるようです

C# の次のバージョンはRoslynが導入されるとともにいくつかの新機能が追加される予定で、どの機能が追加される見込みなのかはこのページにまとまっています。

.NET Compiler Platform ("Roslyn") - Home

日々更新されていますが、今週 Primary constructors と Declaration expressions という2つの機能が次のバージョンから「取り下げ」られる見込みだと公開されています。

.NET Compiler Platform ("Roslyn") - Changes to the language feature set

サンプルにもある通り、Primary constructors はこんなコードで引数つきコンストラクタでImmutableなフィールド/プロパティを定義しやすくするものです。

class Point(int x, int y) { … }

Declaration expressions はoutパラメーター修飾子つきのメソッドを呼び出す際に、outパラメーターのところで変数宣言を同時に行えるものです。

int.TryParse(s, out var x);

どちらも割と大き目な機能で、次のバージョンでリリースされることを期待していた人も多いのではないでしょうか。

取り下げた理由としては上にリンクを載せた「Changes to the language feature set」に詳しくやり取されています。新機能を入れるとその機能に対応したIDEやDebuggerも必要であり、これが大き目の下げ圧力になっている。そして、コンパイラーそのものの品質を保つことも必要である、と言っています。

また、C# の次のバージョンの最大の目標はRoslynそのもののリリースであり、そのために言語の新機能は見直さないといけないとも言っています。

残念な気持ちもありますが、それだけRoslynのリリースが現実的にせまっていることではないかと思い、期待もしています。また、その代わりと言ってはなんですが、 string interpolationt (日本語で「文字列挿入句」?)という機能の投入を予定しているようです。

"\{p.First} \{p.Last} is \{p.Age} years old."

といったように、文字列リテラルの中に実行時に評価されるC#の式を挿入できる機能です。Rubyなどではおなじみではないでしょうか。

新しいバージョンのC#の機能はまだまだ議論中です。興味ある方は、最初にあげた Language feature status や、 Discussion をたまにチェックしてみると面白いと思います。