本サイトからスピンオフした姉妹サイトです。2015に採用された次世代コンパイラー「Roslyn」の概要を解説。これまでの進化過程を振り返り、そのAPIレイヤーや、Roslynにより強化されたC#/VB言語機能の一部について紹介する。CTP3→正式版に合わせて改訂。コード名および通称は“Roslyn”。「ロズリン」と読む、以下、Roslynと表記)に関して、その概要とRoslynを用いたプログラミング手法を、前後編に分けて簡単に紹介する。Roslynとは普段、IDE(統合開発環境)を利用してコーディングする際、その背後ではどのようなプロセスが働いているか、考えてみよう。Studioであれば、単純なキーワードマッチを超えたセマンティックなシンタックスハイライト、IntelliSense(=セマンティックなコード補完)、リアルタイムなエラー分析、多様なリファクタリングツールなど、多くの機能が動作している。これらの機能は、IDEが独自に構文解析と意味解析を行った結果を、各種ツールへ提供することによって実現されているのである。行い、結果を出力する。コンパイラーは実際にアセンブリ(.NETではMSILコード)を出力しなければならないため、複雑なコード分析や最適化を行っているが、そのために解析を行って得た中間情報の大部分は、コンパイラー・プログラムの終了と同時に破棄されてしまう。これらのことから、求められている“成果物”は違うとしても、IDE側とコンパイラー側の双方で同様な処理を行う部分が発生する。開発チームは、この双方の保守が必要となる上、特に新機能を追加する場合は、IDE側とコンパイラー側の仕様を合わせる必要があり、その調整には非常に労力がかかる。これらの問題を解消するため、IDE側にとって必要な「リアルタイム処理性」や「ソースコードが途中で変更された場合への柔軟な対応」などの要件を満たし、中間情報をAPI経由で取得可能な、新しいコンパイラーの開発が必要とされた。それがRoslynである。Roslynはマイクロソフトが恩恵を受けるためだけのものではない。Studio向けのリファクタリングツールやコード解析・修正ツールを作成可能である。例として、社内向けのコーディング規約を意識したツールや、Code-Awareなライブラリ(「作成者の意図したライブラリの使い方を基に、ライブラリ利用者の書いたコードを検証する」ツールを同封したライブラリ)の作成などが考えられる。Studioユーザーは公開されている拡張機能を、自由にインストール可能である。2015のリリースに合わせてCTP5、CTP6、RC、RTMと進化を遂げてきた。RoslynのこれまでRoslynが提供するAPIレイヤーRoslynでは、IDE側が必要とする情報を、各種APIを用いることで取得可能である。これについて、2015年8月現在、Roslynのドキュメント(英語)では以下のように説明されている。Wiki」より引用)。下から順に、箇条書きで説明しよう。構文木やフロー分析など、主にコード解析・コンパイラーに関するAPIを提供する。プロジェクトファイルの構成や、参照関係などのプロジェクトファイル全体を把握する必要があるAPIを提供する。Fix(後編で解説)などに用いるAPIを提供する。APIが含まれており、実際に利用できた。APIは現在設計の見直しを行っているようである。Overview(英語)」を参照してほしい。Roslynによる新機能を体験するそれでは実際に、Roslynによる新機能の一部を体験してみよう。2015が必要である。Studioのダウンロードページからダウンロードできる。2015がインストール済みである仮想マシンのイメージをAzureで利用することも可能である(図3.1)。Studio付きWindowsインスタンスの利用方法」を参照してほしい。2015がインストール済みのイメージを選択可能である。Basicコンパイラーは、Roslynにより大幅な改良・新機能の追加がなされている。Basic向けには初めてリファクタリング機能が追加された(図3.1)*1。BasicでもC#と同様にしてリファクタリング機能を利用できる。Basicでは[名前の変更]機能だけは利用可能であったが、「メソッドの抽出」機能などを含む、リファクタリング機能として公式から提供されるのは初めてである。誌面の都合上、今回はC#に追加された一部の新機能のみを取り上げることにする。Application]テンプレートから新規プロジェクトを作成しよう。6.0のコードを記述しても、エラーなく編集・コンパイル可能である。参考までに、null伝搬と式形式の関数メンバー、文字列補完を使ったサンプルを提示する。6.0で知っておくべき12の新機能」を参照してほしい。自動実装プロパティ用の初期化子を用いて、初期値を記述する。処理内容を式形式で表現した関数を宣言する。Childプロパティの有無を考慮しないで、外円の面積を求める。3と同様に式形式で表現した関数を宣言する。null伝搬演算子(?.)を用いて、Childプロパティの値がnullでない場合は、外円の面積から内円の面積を除いた面積を求める。内円が設定されていない場合は、GetArea()と同様の挙動を示す。クラスに関する詳細を示した文字列を、文字列補完を用いて作成し、返している。4と同様、null伝播演算子を用いた例。この場合、内円の内円は設定されておらず、nullを返すため、「0」が出力される。Basicに取り入れる言語機能については、定期的に議論が行われており、GitHubのissueとして公開されている。Notes(英語)」を参照してほしい。まとめ今回はRoslynの概要と新機能の一部を説明した。SDKのインストールを行い、実際にRoslynを用いたプログラミングを行ってみる。2015に採用された次世代コンパイラー「Roslyn」の概要を解説。これまでの進化過程を振り返り、そのAPIレイヤーや、Roslynにより強化されたC#/VB言語機能の一部について紹介する。CTP3→正式版に合わせて改訂。2015開発環境を使って、Roslynを用いたプログラミング方法を実際のコードで示しながら説明する。CTP3→正式版に合わせて改訂。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。