Visual Studio 2017 のリリース日、決まったみたいですね。
リリース記念勉強会を開く(リリースされてなかったら「リリース直前勉強会」にする)つもりで3/11(土)に会場を押さえてあるんですが、割かしいいタイミングだったみたいで。 そろそろ1か月前ですし、告知・募集ページを近々作る予定です。
で、Visual Studioがリリースできる段階に来てるということは、C#チーム的にはもう C# 7 向け作業を終えて、その先の作業に入っているような状態。
proposals
先日の、ディスカッションの場がメーリングリストになりそうで炎上って話は、 とりあえず「事前にコミュニティに相談しなかったのは悪かったと思っているので改めて投票の場を作った」って感じで進んでいます。 確か、投票の締め切りが今日。
それはそれとして、csharplangリポジトリ内に、すでに取り組むことが決まっている範囲で、 提案ドキュメントがアップロードされ始めました。
- Readonly references
- Operators should be exposed for System.IntPtr and System.UIntPtr
- Nullable reference types in C#
- records
- private protected
- null coalescing assignment
- null-conditional await
- improved common type
- expression variables in initializers
- pattern matching
- Auto-Implemented Property Field-Targeted Attributes
- covariant return types
- default interface methods
とりあえずRoslyn側から持ってきただけという感じで新しい話は特にないんですが。 早々にここに並んだってことで、今ここに並んでいるものは割と実現性の高いものなんじゃないかと思います。
deterministic ビルドオプション
そういえば、こんな話が。
(C# チームの中の人の発言)
これの詳細:
去年の春くらいから、C# コンパイラーには /deterministic
っていうビルドオプションが実装されています。
これは要するに、同じ入力を与えたら必ず同じ出力になるというもの。決定論的ビルド。
(これまでだと、そこら中にタイムスタンプが入ったり、partial class内のメンバーの順序決定に仕様がなかったりで、
同じ内容のコードをビルドしても毎度exeやdllのバイナリに変化が出ていました。)
決定論的になったことで、ビルド結果のキャッシュが聞きやすくなって、テスト実行とかが大幅に高速になったとか。
で、最近の dotnet SDK を使ってビルドすると、デフォルト動作が /deterministic
モードになるみたいです。
ちょっと触ってみている感じだと、たぶん、Visual Studio 2017だと、 .NET Standard 向けライブラリ、もしくは、 .NET Core 向けアプリでだけこのモードになるんじゃないかと思われます。
どおりで… Visual Studio 2017 RCに先月のアップデートをかけて以来、ILSpyで.NET Core/.NET Standardなアセンブリの中身が見れなくなってると思ったら…
ILSpyが/deterministic
でビルドされたpdbファイルに対応していないみたいです。
ちなみに、読めないのはpdbファイルだけ。
pbdファイルを消してからexe/dllを開きなおせば読めました。