//build/ カンファレンスで、個人的にもっともショッキングだったのが、Future directions for C# and Visual Basicというセッション。Anders HejisbergというTurbo Pascalの原作者であり、Delphiの開発指揮、C#/.NET Frameworkの設計を行った人。

DSC03585

セッションの前半は度々登場する非同期コードやCaller info attributesなどのC#新機能を紹介していましたが、本当にしゃべりたかったのは、その後のC#5.0の先を示す話題だったようです。

DSC03586DSC03587DSC03592DSC03594

以前から同氏が推進しているCompiler as a service (CaaS)プロジェクトであるRoslynがCTPを迎える模様。うたい文句と概要は知っていたものの、ツールとしてどのような機能を擁するのか、今回明らかになりました。

DSC03596DSC03597

従来は上記のように、コンパイラはブラックボックスでしたが、Roslynでは以下のように、レキシカルアナライザとか、ビルディングブロックとなる要素をAPI化して、見通しをよくしたものという考え方です。決してWeb上にSOAPやRESTで公開するようなものではなく、サービスを細かく分けてユーザが自由に組み合わせて利用できるという精神がSaaS的なのです。

image

以下のようにコンパイラパイプラインをそれぞれAPI化したものです。それらを用いることで、Visual Studio IDEのような、シンタックスハイライティング、リファクタリング支援、オブジェクトブラウザなどが実現されているわけですから、実際にはVisual Studioの一部の機能を抜き出したものともいえるかもしれません。

image

自分自身のリファクタリングロジックを考えたり、さまざまなツールを開発することができます。

10月中旬にCTPがリリースされる予定です。実際にRoslynを利用したデモ。以下のようにRoslyn.Scriptingというネームスペースが割り当てられています。

DSC03599DSC03600

以下のように ScriptEngineに文字列で記述したソースコードを引き渡すと、ただちにコンパイル、動的に実行ができます。

image

また、関数を定義することも可能。

image+

さらに、ダイナミックに宣言された関数をローカルのデリゲートへ代入して、その関数を実行、などという変態プログラミングもできます。動的コンパイルのセッションといわゆる通常の静的コードがシームレスにつながっているようです。

image

ここまで来て、なんとなくピンと来たのですが、新しいウィンドウとしてC# Interactiveモードというのが用意されています。いわゆるインタープリタといえますが、スクリプト言語と違い、静的タイプ言語の強みとして、C#のコードコンプリーションがフルに使えるという恩恵も受けられます。

image

csファイルエディタから、コードを選択しリターンキーを押すとその部分がインタラクティブウィンドウで即時実行ができます。

image

関数定義もこのように直ちに反映されます。

image

次にファイル名を列挙するコードを入れますが、ライブラリが無いとのことでエラーになります。そこでエディタではなじみのアイコンがインタラクティブモードでも現れます。すなわち、usingのオートインサートがインタプリタでも利用できるということです。

image

ここまで来るとなんでもありです。WPFのGUIもインタラクティブに構築可能です。

image

プログラム中から、ソースコードを操作することができ、以下のようにセマンティックモデルと呼ばれるツリー上の構文木に対して、Linq Queryを投げたり、実際に操作したりできます。

image

最後に極め付けは、C#/VB間のソースコード自動変換。単純にコピーアンドペーストするだけで自動的に変換されます。

imageimage

このコードよく見ると、ダイナミックにC#コードをコンパイルしているので、VBコンパイラ中でC#コンパイラが動いていることになります。

さらにこのコンバートプロセスをコードで制御することも非常に容易です、以下のようにConvertというメソッドを呼べばOKです。

image

このような機能がVisual Studioにもうすぐ統合されるとなるとワクワクしてしまいますね。

これによって、いくつかのスクリプト言語は役目を終えてしまうのではないかと、思えるほどのインパクトがあるかもしれません。