kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

僕と契約して…もとい、C#による契約プログラミング

今日C#ユーザー会&codeseek勉強会で岩永さんとneueccさんの契約プログラミング講座でした。Code Contract機能に関してはSystem.Diagnostics.Contractsクラスの存在は知っていましたけど、実装とか使いどころ、はまりポイントみたいなものは明るくなかったので、教えてもらって助かりました。
neueccさんのスライド。

こっちは岩永さん(はてなもOffice WebAppの埋め込み認めてくれよ…)。

プログラミング.NET Framework 第三版でもちょこっとだけ書かれていますが、仕様が変わってしまったからなのかなとも思いました。最初、属性ベースでメタデータ使えばいいじゃないかと思っていたのですが、属性は無理。

  • 属性ベースでは複雑なことが書けない(条件判定式など)
  • 仮にJavaアノテーションみたいな文字列として式を記述するってのも複数言語間での運用上問題。
  • そもそもVBC#で式の構文が違うので無理(違う構文導入したらそりゃかえってまずい)

契約プログラミングらしく、基本的にリリースバイナリではContractsクラスは消えてなくなる運命。あと、Premiumエディション以上になるけど、静的解析機能とにかく重い。SSD+Core 2 Duo U9400のマシンでもC#ソース15本位に対して数分間反応がないという状態に陥るので、完全にCPUが足りないみたい。岩永さんの自宅デスクトップCore 2 Quadだとまだ何とかまし。
やっぱりある程度のプロジェクトで使ってみようと思ったら、TFSのビルドサーバー用意して、静的コード解析専用の構成をビルドするくらいにしないといけないんじゃないかなぁ。ちゃんとIntelliSenceにも対応しているのはいいですね。
ちゃんと使えるようになるのはきっと次の次のCLRで、ILにメスいれないとどうしようもなさそうな気がします。クラスライブラリだけはたぶん…Obsoleteにならない…だろう…と思いますので、今から少しでも手を付ける…でも付け所が難しいかもしれません。