C# コンパイラ

王林
リリース: 2024-09-03 15:03:03
オリジナル
1349 人が閲覧しました

C# コンパイラは、C# でプログラムされたコードを機械可読言語コードに変換するために使用される組み込みコンポーネントとして定義でき、.dll ファイルまたは .exe ファイルの形式で出力ファイルを返します。 C# には、Common Language Runtime コンパイル (CLR) と Just in time コンパイル (JIT) という 2 つの異なるタイプのコンパイル方法があります。 JIT コンパイラは、Pre JIT コンパイラ、Normal JIT コンパイラ、および Econo JIT コンパイラにさらに分類されます。このコンパイル目的で一般的に使用されるツールには、C# コンパイラ 2.0、C# コンパイラ 3.5、C# コンパイラ 4.x、Roslyn、Mono コンパイラなどがあります。

C# コンパイラ

プロセッサはマシンコードしか理解できないため、中間言語が生成された後、この IL をマシンコードに変換する必要がありました。  そこで、この変換には CLR (Common Language Runtime) を使用しました。 CLR は、コンピューター上で実行され、ジャストインタイム (一般に JIT と呼ばれる) を利用して IL コードをマシンコードに変更するプログラムです。 .exe ファイルをダブルクリックすると、JIT コンパイラが呼び出され、その時点で IL コードをコンパイルするため、JUST-IN-TIME(JIT) という名前が付けられています。

C# コンパイラ

コンパイルは暗黙的または明示的に実行できます。暗黙的コンパイルは、最初に IS をコンパイルし、その後機械語にコンパイルする 2 回コンパイルです。このプロセスは、JIT コンパイルまたは JUST-In-Time コンパイルと呼ばれます。 JIT は複数のプラットフォームをサポートし、コードの実行を高速化します。

ジャストインタイムコンパイラの種類

3 つの異なる Just-In-Time コンパイラがあります

1.プレ JIT コンパイラ

このコンパイラでは、ソース コード全体がネイティブ コードにコンパイルされるため、コンパイル プロセスは 1 つだけです。

2.通常の JIT コンパイラ

このコンパイラでは、これらのメソッドのみが実行時に必要なマシンコードにコンパイルされます。コンパイラはこれらのメソッドをコンパイルしてキャッシュに保存し、同じメソッドを再度使用します。

3. Econo JIT コンパイラ

このコンパイラでは、実行時に必要なメソッドのみがマシンコードにコンパイルされますが、これらのメソッドは不要な場合は削除されます。 JIT では、実行時に必要なメソッドのみがコンパイルされるため、必要なメモリ使用量が少なくなります。

上図の場合

コンパイル時に 1 ~ 3 のステップが実行されます

実行時に 3 ~ 5 つのステップが実行されます。

したがって、これらの 2 種類のエラーが実行されると発生します。

実行時エラーとコンパイラ エラー

  • コンパイラ エラー:このタイプのエラーは、C# コンパイラ自体で発生します。これにより、C# コードが .exe 形式にコンパイルされなくなります。これらのエラーは基本的に構文エラーが原因で発生します。構文のスペルを間違えたり、カンマやセミコロンを見逃したりすると、コンパイラはこれを理解できないため、処理を停止し、コンパイル時エラーをスローします。これらのエラーは、IDE の出力ウィンドウで確認できます。したがって、これらのエラーを調べることでコードを修正できます。
  • ランタイム エラー: これらはリアルタイム エラーです。これらは、コードが正常にコンパイルされたものの、実行中に問題が発生した場合に発生します。これはコードの動作に影響します。たとえば、数値をゼロで除算しようとすると、実行時エラーが発生すると言えます。これらのエラーは、コードの動作を修正する必要があるため、コンパイラ エラーよりも面倒です。

C# コンパイラ

C# コンパイラーの種類

以前の Microsoft コンパイラは、C# コンパイラ 2.0、C# コンパイラ 3.5、C# コンパイラ 4.x などの .Net Framework と呼ばれていました。これらのコンパイラは C# で書かれていない、または C# が C# によってコンパイルされていないとも言えます。これ以降に登場した他のコンパイラは次のとおりです:

1.ロザリン

以前、コンパイラは C/C++ で書かれていました。 Roslyn は、C++ コードが置き換えられたオープン ソースの .Net コンパイラです。コード内の要素のタイプと要素間の関係を取得します。 C# チームと VB チームがコンパイラを作成したため、Visual Studio テンプレートは両方で利用できます。これにより、ソース ファイルを解析するコードを作成でき、ソース コードを簡単に変更できます。

以下は Roslyn の 4 つの API レイヤーです

  • スクリプト API: このレイヤーはランタイム実行コンテキストを提供し、C# をスクリプト言語として使用できるようにし、Visual Studio コンポーネントに依存しません。
  • コンパイラー API:このレイヤーは構文に使用され、アセンブリとソース コード ファイルの参照が含まれます。このレイヤーは Visual Studio コンポーネントにも依存しません。
  • サービス API: このレイヤーは、SDK の最上部で IntelliSense、書式設定、すべての参照の検索などを提供します。また、プロジェクトに関する情報の管理やプロジェクトの依存関係の管理にも役立ちます。
  • ワークスペース API: このレイヤーは主にコードの分析と IDE を介したリファクタリング用です。 Roslyn はコードを簡単にし、コンパイラや書式設定、Intellisense などの多くの機能を提供するサービスなどの一連の API で構成され、複数の言語をサポートします。ワークスペース API は、ソース コードに関する詳細な情報を提供します。

2. Mono コンパイラ

C# の ECMA 標準に基づく Mono C# コンパイラ。 C# 1.0、2.0、3.0、4.0 などのフレームワークを備えた複数のバージョンがあります。 mono コンパイラー mcs はフレームワーク 1.1 をターゲットにし、gmcs はフレームワーク 2.0 をターゲットにしますが、smcs と dmcs はそれぞれフレームワーク 2.1 と 4.0 をターゲットにします。

  • mcs: 匿名メソッド、null 許容型、固定バッファー、プロパティのアクセス修飾子、静的クラスなどのすべての C# 1.1 機能をサポートします。
  • gmcs: クエリ式、オブジェクト初期化子、部分メソッド、ラムダ式、自動的に実装されるプロパティなどの C# 2.0 機能をサポートします。
  • dmcs: 名前付き引数、ジェネリック型のバリアンス、ダイナミクス バインディングなどを含む C# 4.0 の機能をサポートします。

EMCA 仕様に従って C# 標準に準拠する RemObjects C# コンパイラのような他のコンパイラと、それ以外に C# と .Net を実装する GNU C# コンパイラがあります。

結論

C# コンパイラは、プロセッサがプロセスを理解できるように、コードをマシンコードにコンパイルする他のコンパイラと同様です。

以上がC# コンパイラの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート