やじゅ@アプリケーション・ラボ わんくま支局

目次

Blog 利用状況

ニュース

プロフィール

MSMVP

Visual BasicでRoslynを使ってみる

これは、Visual Basic Advent Calendar 2013 12/3日の記事。

Visual Studio 2013が発売されました、いつもならVisual Basicも新機能が追加されて「Visual Basic 2013」になるかと思ったのですが、残念ながら新機能の追加は見送れました。

No new C# and VB Language Features in VS 2013
言語的な新機能なし(C#もVBも、VS 2013で)
上記ブログによれば
・(ツールのアップデート間隔を短くしても)言語のアップデートは今まで通り(2~3年間隔)のペースがいいと思っている
・Roslynプロジェクトが進行中で、C#、VB のコンパイラーを再実装中
マイクロソフト全体として製品のリリース サイクルを縮めており、ランタイム、ライブラリ、言語、ツールはそれぞれのタイミングでリリースしていく方針になっていくようです。

昨年は、Yieldステートメントについて記事を書いてみたのですが、今年は新機能が無いのでどうしようか悩んだのですが、以前から「Roslyn」というキーワードが気になって軽く調べたりしてたけど、特に深く追求したりしてなかったので、今年はこれを機会に追求してみます。

■Roslynとはなんぞや?
「Roslyn」は、なんて読むのかというと「ロズリン」です。開発コードネームなので製品時に名称が変わることもありえますが、そのままの名前になりそうな予感です。開発コードネームは地名とか多かったりするのですが、「Roslyn」もワシントン州の町の名前だったりします。

Roslynは、Compiler as a Serviceと呼ばれていた言語機能の解析エンジンです。
コンパイラの機能として、プログラムを解析し、エラーなどの検出を行い、一通りのエラーが解消すると実行形式のオブジェクトを生成したりしますが、これらの中身については一般的にブラックボックス化されています。
Roslynでは、ブラックボックス化されたC# や Visual Basicのコード解析やオブジェクト生成のAPI等を公開したのです。

■Roslynで何が出来るのか?
例えば文字列変数にソースコードをセットすると、文字列変数から言語解析して実行させることが出来ます。
C#でありますが、参照:Visual Studio Express で Roslyn のコードを見るとイメージ出来るでしょう。

使いこなせれば、TypescriptのようにJavascriptを拡張したように、Visual Basicを拡張させることが出来るかも知れません。
Visual Basicには足りない複数行コメントを使えるように出来たり、リスト内包を書けばLinqに変換させるようなことも可能でしょう。

Roslyn の恐怖 - Compiler as a service の全貌」の最後の方に書かれていますが、C#/VB間のソースコード自動変換がコピーアンドペーストするだけで自動的に変換されます。C#をコンパイル後にVisual Basicに変換されるために、正確にしかも必ず動作するように変換されるわけです。

Roslynを活用すれば新たなコード生成機能や言語機能の追加、コード解析、リファクタリングなどを行うためのプログラム生成に役立てることができるわけです。


次回以降は、導入方法および実際にプログラムを組んでみたいと思います。少し調査したのですが、C#のサンプルに比べてVisual Basicのサンプルはかなり乏しいです。その上、C#にはある「Syntax.ParseStatement」という文字列のソースを解析するメソッドがVisual Basicには見当たらないなど、何点か機能的にC#より追いついていないのかも知れません。また、CTP(Community Technology Preview)「配布する対象を限定した評価版」であるため、サンプルでも変更されたメソッドがあってエラーになったりします。参照「CTP2からの変更
例 SyntaxTree.ParseCompilationUnitがなくなって、ParseTextとParseFileに変更


【参照】
Visual BasicでRoslynを使ってみる その2
Visual BasicでRoslynを使ってみる その3
Visual BasicでRoslynを使ってみる その4

投稿日時 : 2013年12月3日 0:19

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント