CLR と CLI の違いを正確に知りたいですか? これまで読んだ内容から、CLI は CLR のサブセットであることを示しているようです。しかし、CLR のすべてが必須ではないでしょうか。CLI を作成するために CLR から除外される可能性のあるものは何ですか?
7 に答える
CLR は、.NET アプリケーションが安全にホスト/実行される実行環境です。
これは、.NET アプリケーションが開始する直前に起動してロードする .NET のプライベート オペレーティング システムと見なすことができます。
CLR は、.NET アプリケーションの特定の必須要件を処理します。CLR を使用しないと、実装のために多くの慎重なコードを作成する必要があります。本質的に全体論的であり、適切で効率的かつ安全な方法で実行するためにあらゆる種類のアプリケーションに不可欠な要件 [たとえば、メモリ割り当てを処理し、不要なときに解放する、ダングリング ポインターを回避する、型キャスト エラーを回避するなど]
一方、CLI は、アプリケーション実行環境を実装する方法と、生成されたアプリケーション コードの性質を説明する仕様/一連のガイドラインであり、特定のアーキテクチャ用に書き直すことなく、複数の高水準言語をさまざまなコンピューター プラットフォームで使用できるようにします。
CLI は Microsoft によって開発され、ISO および ECMA によって標準化されています。
CLR は、CLI の VES [Virtual Execution System] セクションの実用的な実装であり、MS.NET プラットフォームのコア コンポーネントの 1 つを形成します。
素人の言葉で言えば、CLI はレシピであり、CLR は料理です :-)
CLR (共通言語ランタイム) は、Microsoft による VES (仮想実行システム) の実装です。VES と CTS (Common Type System)、CLS (共通言語仕様)、およびメタデータ仕様はすべて、CLI (Common Language Infrastructure) 仕様の一部です。
VES は、CIL (Common Intermediate Language) モジュール (dll および exe) をロードして実行するために実装する必要がある、標準化された仮想マシン仕様です。VES 実装は、ガベージ コレクションやセキュリティなどのランタイム サービスも提供します。
CLR は、あらゆる種類の .net アプリケーションが実行される .net 実行環境です。たとえば、C# またはドット NET スタックからの別の言語でコードを記述する場合、コンパイラはそれをコンパイルしてマネージ モジュールに変換します。マネージ モジュールは、IL (中間言語) とメタデータです。何よりも重要な点は、ソース コードをコンパイルするたびに、コンパイラがそれをマネージ モジュールに変換することです。はっきりさせておきますが、これはあなたのプロセッサーが実行する機械語ではありません。実はILはアセンブリ言語に近い中間言語です。同様に、オブジェクト指向の機械語としても有名です。
より詳細な説明については、この記事を確認してください。
http://alevryustemov.com/programming/common-language-runtime/
CLR は、CLI、CTS、CLS が統合されて機能する完全な環境であり、ガベージ コレクション、メモリ管理、セキュリティ、ネイティブ コードの中間言語も含まれます 。CLIは、実行可能コードの形式の仕様であり、そのコードを実行できます。