2014 08-30 life with roslyn

26
Life with Roslyn 分分分分分分分分分分分分分 ~30 Compiler as a Service 分分 分分 ( 分分分 分分分分 )

Transcript of 2014 08-30 life with roslyn

Life with Roslyn~30分間で分かったツモリになる Compiler as a Service ~

渋木 宏明 ( しぶき ひろあき )

セッションの目的とゴールと注意• 目的• Roslyn の全体像についてご理解を深めていただきます(と、いいな)

• ゴール• 「紹介記事を読んだことがある」から、もう 20cm ~ 30cm くらい理

解が深まる• 懇親会で Roslyn の今後についてご歓談 w

• 注意• サンプルプロジェクト動かしてみるとかは、色んな人があちこちで

やってるのでやりません (^^;

アジェンダ• 起

「 Roslyn の使命」• 承

「コンパイラの基礎知識」• 転

「 Roslyn のカタチ」• 結

「まとめ他」

起Roslyn の使命

.NET Compiler Platform (“Roslyn”)

• 公式サイトhttp://msdn.microsoft.com/ja-jp/vstudio/roslyn.aspx

「 .NET コンパイラ プラットフォーム (“Roslyn”) は、オープンソース C# および Visual Basic コンパイラと豊富なコード分析 API を備えています。 Microsoft が Visual Studio の実装に使用しているのと同じ API を使用してコード分析ツールを構築できます。」

Roslyn 登場の背景(想像)• 潜在的なニーズは、かなり以前からあったハズ( MS 内部で)• コンパイラをマネージ言語で書き直したい• コンパイラ機能を部品化して、エディタやリファクタリングツールの

実装に利用したい

Roslyn 登場の背景(これも想像)• 決定的な引き金は Visual Studio 2010 (の開発)• IDE の GUI が WPF ベースになった• Visual Studio 拡張はマネージコードで書くのが標準となった• マネージな Visual Studio 拡張(エディタやリファクタリングツールな

ど)から、 C++ で記述されたコンパイラコンポーネントを扱うのはメンドクサイ!

→ Roslyn 始動

Roslyn の使命• 「コンパイラのプラットフォーム化」• C#, VB コンパイラをマネージ言語で再構築• コンパイラの機能を Microsoft 内外の開発者に向けて公開

承コンパイラの基礎知識

コンパイラとは?• Wikipedia

http://ja.wikipedia.org/wiki/コンパイラ

「コンパイラ( compiler )とは、プログラミング言語で書かれた、プログラムのソースコード(原始コード)を、機械語、ないしバイトコードなどの中間言語によるオブジェクトコード(目的コード)に翻訳 ( 変換 ) するプログラムである。」

コンパイラの役割ソー

スプログラ

ム(C#, VB)

コンパイ

目的プログラ

ム(IL)

• 入力 : ソースプログラム• 出力 : 目的プログラム

ソースプログラム(C#

, VB)

字句

解析

構文

解析

意味

解析

コード

最適化

コード

生成

目的プログラム(IL)

コンパイルとは?

トークン 構文木・記号表 中間コー

ド中間コー

• 以下の課程を実行

転Roslyn のカタチ

Roslyn の API 階層

Compiler APIs

• 伝統的なコンパイラ機能を API として公開

Compiler APIs の役割 #1

• コンパイラパイプライン• ソースコード解析

• 構文木、シンボル辞書、トークン情報などを生成• ソースコード生成

• 構文木、シンボル辞書、トークン辞書などよりソースコードを生成• コード生成

Compiler APIs の役割 #2

• 診断• 構文解析課程におけるエラー検出

• 検出されたエラーを、規定の形式で蓄積・公開• ユーザ定義診断情報の付加

• 静的解析ツールなどで検出したエラーを規定の形式で表現

Compiler APIs の役割 #3

• スクリプティング• スクリプティングホスト

• スクリプトとホストアプリケーション( IDE やユーザプログラムとの結合点)• スクリプティング

• ソースコードを動的にコンパイルして、実行する機構

Workspaces APIs

• ソリューションやプロジェクトを扱う機能を API として公開• Visual Studio IDE との依存関係を持たない

Workspaces APIs の役割• 以下のオブジェクトモデルを扱う• Workspace

• ホストアプリケーション( IDE やユーザアプリケーション)が扱っているソリューション( .sln )と関連付けられたモデル

• Solution, Project, Document• IDE やユーザアプリケーソンが扱っているソリューション、およびソリューショ

ンに所属するプロジェクトやドキュメントの状態のスナップショット

Features APIs

• リファクタリング、補完、ナビゲーションなどの高度な機能を API として公開

Roslyn が提供するモデルの特徴• immutable (不変性 ) を重視している• SyntaxTree や Workspace といった主要なモデルはすべて

immutable• スレッド境界にまつわるなんやらかんやらを考慮しなくて済む

とはいえ、かなり思い切った設計•例えば、ユーザプログラム内で動的に構文木を組み立てたいよ

うな場合、ちょっとメンドクサイ• CodeDOM Providers for .NET Compiler Platform ("Roslyn”)• http://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompi

lerPlatform/0.2.0-pre

結まとめ他

まとめ• Roslyn の使命は「コンパイラのプラットフォーム化」• .NET Compiler Platform (“Roslyn”) は3層からなる API を公開• Roslyn が公開する API を利用することで、ソースコードを扱う

ツールやアプリケーションの開発を強力に支援

リソース• MSDN

• http://msdn.microsoft.com/ja-jp/vstudio/roslyn.aspx

• CodePlex• http://roslyn.codeplex.com/

• Visual Studio 14 CTP3• http://www.visualstudio.com/en-us/downloads/visual-studio-14-ctp-vs.aspx

• NuGet Gallary• http://www.nuget.org/packages/Microsoft.CodeAnalysis

• Language feature implementation status• https://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status

&referringTitle=Documentation

ご清聴ありがとうございました