この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 2796|答える: 2

[出典] .NET/C# Roslynコンパイラプラットフォーム

[リンクをコピー]
掲載地 2024/03/10 10:58:32 | | | |
コンパイラ:コンパイラは、あるプログラミング言語で書かれたソースコード(元の言語)を別の(ターゲット言語)に変換するプログラムです。 コンパイルとは、ソースコード(通常は高水準言語)からオブジェクトコード(通常は低レベル言語または機械語)に変換し、コンピュータや仮想マシンによって直接実行可能なプロセスです。

.NETプラットフォームでは、モデルを実行する段階が異なる2つの異なるコンパイラがあります。1つはRoslynコンパイラで、C#およびVBコードをアセンブリにコンパイルします。 もう一つはRyuJITコンパイラと呼ばれ、アセンブリ内のIL(中間言語)コードを機械語にコンパイルします。

この記事はRoslynコンパイラから始まります。 仕組みを掘り下げる必要はなく、仕組みを理解し、何に使えるかを知ることが大切です。

当初、C#言語のコンパイラはC++で書かれていましたが、後にMicrosoftはC#自体で書かれた新しいコンパイラ、Roslyn(ブートストラップコンパイラ)を導入しました。

ブートストラップコンパイラとは、特定のプログラミング言語のコンパイラがその言語自体で書かれていることを意味します。 各バージョンのブートストラップコンパイラは、それに先行したバージョンでコンパイルされますが、最初のバージョンは別の言語で書かれたコンパイラによってコンパイルされなければなりません。例えば、C++で書かれたコンパイラによってコンパイルされたRoslynの最初のバージョンなどです。 多くのプログラミング言語は成熟し、C#やGoのように自らのコンパイラを言語自体で作成します。

.NETプラットフォームでは、RoslynコンパイラがC#およびVBコードをアセンブリにコンパイルする役割を担っています。

既存の従来のコンパイラの多くは「ブラックボックス」パターンで、ソースコードを実行ファイルやライブラリファイルに変換しており、その間に何が起こるのかは分かりません。 Roslynとは異なり、RoslynはAPIを通じてコードコンパイルのすべての段階にアクセスできます。

その動作メカニズムはパイプラインベースで、4段階からなり、それぞれ独立したモジュールで、それぞれのモジュールに対応するAPIを提供します。 統合開発環境(IDE)はこれらのAPIを活用し、コードハイライト、スマートヒント、リファクタリングツール、パフォーマンス分析ツールなど、開発効率を向上させる便利なツールを提供できます。 さらに、Roslynを使えば、開発者は自分のプログラム内でコンパイラをサービスとして利用できます。

Roslynが提供するAPIを活用して、動的にコードサンプルを生成しましょう

まず、新しいClassLibraryGeneratorライブラリを作成し、netstandard2.0のターゲットフレームワーク名(TFM)をターゲットにした.NET標準ライブラリプロジェクトを作成します。 Microsoft.CodeAnalysis.AnalyzersとMicrosoft.CodeAnalysis.CSharpのNuGetパッケージを追加すると、csprojは次のように設定されます:


TestSourceGenerator.csという新しいC#ファイルを作成し、以下のように自分のソースジェネレーターを指定します。

コンテキストオブジェクトから、コンパイルされたエントリポイントやMainメソッドにアクセスできます。 mainMethodインスタンスとは、メソッドや類似のメソッド(コンストラクタ、デストラクタ、演算子、または属性/イベントのアクセサを含む)のシンボルを表すIMethodSymbolのことです。 Microsoft.CodeAnalysis.Compilation.GetEntryPointメソッドは、プログラムのエントリポイントのIMethodSymbolを返します。 他の方法では、プロジェクト内の任意のメソッドシンボルを見つけることができます。 このオブジェクトでは、名前空間(存在する場合)とその含む型を導き出すことができます。 この例のソースは補間文字列で、生成されるソースコードをテンプレート化し、補間されたギャップが含まれる名前空間と型情報に埋め込まれます。 プロンプト名で文脈に出典を加えましょう。 この例では、ビルダーはコンソールアプリケーションで部分メソッドの実装を含む新しいビルドソースファイルを作成します。 ソースジェネレーターを作成して、好きなソースを追加できます。

次のコードで新しいConsoleApp4コンソールアプリ(トップレベルの文なし)を作成します。

同時に、ClassLibraryGeneratorプロジェクトの参照も以下のように追加します。

コンソールアプリを起動して出力を以下のように試してみてください:



Visual Studioで「Dependencies」プロジェクト - > 「Analyzer」> 「ClassLibraryGenerator」 - > 「ClassLibraryGenerator.TestSourceGenerator」をクリックし、「Program.g.cs」ファイルをダブルクリックすると生成コードが表示されます。以下の通りです:



プロンプト:ビルダーのコードを修正するにはVisual Studioの再起動が必要になるかもしれません

Roslyn GitHubアドレス:ハイパーリンクのログインが見えます。

参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。




先の:Visual StudioでのC#インタラクティブウィンドウを用いたコード実行
次に:Windows 11 オリジナル ISO イメージファイルのダウンロード
 地主| 掲載地 2024/03/10 10:59:12 |
.NETにおけるJITとAOTコンパイルの紹介と違い
https://www.itsvse.com/thread-10734-1-1.html
 地主| 掲載地 2024/07/06 16:59:59 |
Roslynを使ってC#コードを動的にコンパイルし、実行します
https://www.itsvse.com/thread-10786-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com