昨日の Metro.cs #1 にて。

デモ用ソースコード: https://github.com/ufcpp/UfcppSample/tree/master/Demo/2015/MyRoslynAnalyzers

要するに、「実際作ってみた結果の感想など」。

作ってみたもの自体は大したことはないんで面白くもないと思いますが、感想の部分は他の Analyzer, Code Fix, Code-Aware ライブラリを作ったりする際にも役立つだろうというつもり。

作ってみたものに関しては、結構、「C# 7.0 が来れば解決しそうなもの」に対する「それまでの間のつなぎ」的なものだったりします。つなぎだし、そんなに頑張らず適当に作ろうとかいう軽いノリができるのも、気軽に作って気軽に配布できるようになったことの強みかなぁとか思います。

supersedes

スライド中に、一昨日公開されたばかりのDesign Notes 9/2の話を少し含めましたが。

今日、supersedes 機能専用の Issue ページも立ってた。

supersedes(「取って代わる」という意味の単語)でできること自体は Python のデコレーターみたいなの。Javaだとannotation processing tool (APT)使ってできたりすること。.NETでもIL書き替えであればPostSharpとか使ってやれるもの。 要するに、あるメソッドやプロパティに対して、その前後にツール生成コードとかで処理を追加する機能。

それを、C# → C# コード生成で、静的に実現しようというのがこの supersedes 構文。 Java の APT や PostSharp を使ってできるような便利さを実現しつつ、実行効率を落とさず、実際に動いているのがどういうコードなのかC#コードが目で見える。

構文自体は結構シンプルなものですが、いくつか課題があることもわかっているし、C# 的にはVisual StudioとかのIDEのデバッグやリファクタリングの機能がちゃんと働く形で実現しないといけないし、それなりに大変なはずです。

一応マイルストーンは C# 7.0 に入っていますが。順調に行ってくれるといいなぁ。

once a year

そうそう、こんなコメントが。

https://github.com/dotnet/roslyn/issues/996#issuecomment-140605428

この前後の話の流れ的には、

  • その機能、まあ少なくとも C# 7.0とか8.0では取り組まないと思うよ
  • 9.0?C# って2・3年に1回リリースだし、2022年とかくらいまで待たせるの?
  • ロードマップ示せるわけじゃないけど、これからは「年に1回リリース」とかやれるといいなと思ってる

みたいなの。

あくまで目標であって確約はされないものの、もしかしたらタプルとかのC# 7.0予定機能、来年には使えるようになっているかも。