.NETCore-コード実行
この章では、.NET Coreの実行プロセスを理解し、.NETFrameworkと比較します。管理実行プロセスには、次の手順が含まれます。
- コンパイラの選択
- コードをMSILにコンパイルする
- MSILをネイティブコードにコンパイルする
- 実行中のコード
コンパイラの選択
これは多言語実行環境であり、ランタイムはさまざまなデータ型と言語機能をサポートします。
共通言語ランタイムによって提供される利点を得るには、ランタイムを対象とする1つ以上の言語コンパイラーを使用する必要があります。
コードをMSILにコンパイルする
コンパイルすると、ソースコードがMicrosoft中間言語(MSIL)に変換され、必要なメタデータが生成されます。
メタデータは、各タイプの定義、各タイプのメンバーの署名、コードが参照するメンバー、およびランタイムが実行時に使用するその他のデータを含む、コード内のタイプを記述します。
ランタイムは、実行中に必要に応じて、ファイルおよびフレームワーククラスライブラリ(FCL)からメタデータを見つけて抽出します。
MSILをネイティブコードにコンパイルする
実行時に、ジャストインタイム(JIT)コンパイラがMSILをネイティブコードに変換します。
このコンパイル中に、コードはMSILとメタデータを調べて、コードがタイプセーフであると判断できるかどうかを確認する検証プロセスに合格する必要があります。
実行中のコード
共通言語ランタイムは、実行を可能にするインフラストラクチャと、実行中に使用できるサービスを提供します。
実行中、マネージコードは、ガベージコレクション、セキュリティ、アンマネージコードとの相互運用性、言語間のデバッグサポート、拡張された展開とバージョン管理のサポートなどのサービスを受け取ります。
.NETCoreコード実行プロセス
次に、.NETFrameworkと比較して.NETCoreでコードがどのように実行されるかを関連付けましょう。.NET Coreには、.NETFrameworkの一部であるこれらのコンポーネントの多くの置き換えがあります。
.NET Coreには、C#およびVB用のRoslynのように、新しい一連のコンパイラがあります。
.NET CoreでF#を使用する場合は、新しいF#4.1コンパイラを使用することもできます。
実際、これらのツールは異なり、C#コンパイラはC#5までしかサポートできないため、C#6以降を使用している場合は.NETFrameworkでRoslynを使用することもできます。
.NET Coreには、フレームワーククラスライブラリ(FCL)がないため、別のライブラリセットが使用され、CoreFxが作成されました。
CoreFxは、.NETCoreのクラスライブラリを再実装したものです。
また、CoreCLRと呼ばれる.NET Coreの新しいランタイムがあり、JITコンパイラを活用しています。
ここで問題となるのは、.NETFrameworkにすでにあるこれらすべてのコンポーネントを再実装する理由です。
したがって、答えは、Microsoftが.NETCoreを実装した理由と同じです。