共通言語ランタイム (CLR) の概要
.NET では、コードを実行し、開発プロセスをより容易にするサービスを提供する共通言語ランタイムというランタイム環境が提供されます。
コンパイラとツールにより、共通言語ランタイムの機能が公開され、マネージド実行環境の利点が得られるコードを記述できるようになります。 ランタイムをターゲットとする言語コンパイラを使用して開発したコードは、マネージド コードと呼ばれます。 マネージド コードでは、言語間の統合、言語間の例外処理、強化されたセキュリティ、バージョン管理と配置のサポート、コンポーネント間の対話の簡易モデル、デバッグ サービスとプロファイル サービスなど、さまざまな機能を活用できます。
注意
コンパイラとツールでは、型システム、メタデータの形式、ランタイム環境 (仮想実行システム) がすべて公的基準である ECMA 共通言語基盤仕様によって定義されているため、共通言語ランタイムで使用できる出力を生成できます。 詳細については、「ECMA C# and Common Language Infrastructure Specifications (ECMA C# および共通言語基盤の仕様)」を参照してください。
マネージド コードが共通言語ランタイムからサービスを受けられるようにするために、言語コンパイラは、そのコード内の型、メンバー、および参照を記述したメタデータを生成する必要があります。 メタデータはコード内に格納されます。つまり、共通言語ランタイムの読み込み可能なすべてのポータブル実行可能 (PE) ファイルには、メタデータが含まれていることになります。 共通言語ランタイムは、クラスの検索と読み込み、メモリ内でのインスタンスのレイアウト、メソッドの呼び出しの解決、ネイティブ コードの生成、セキュリティの強化、およびランタイムのコンテキスト境界の設定にメタデータを使用します。
このランタイムではオブジェクトのレイアウトを自動的に処理し、オブジェクトへの参照を管理し、不要になったオブジェクトを解放します。 このような方法で有効期間を管理されるオブジェクトをマネージド データと呼びます。 ガベージ コレクションにより、メモリ リークやその他の一般的なプログラミング エラーがなくなります。 マネージド コードの場合、.NET アプリケーションでマネージドまたはアンマネージド、あるいはマネージドとアンマネージドの両方のデータを使用できます。 言語コンパイラでプリミティブ型などの独自の型が提供されるため、データがマネージドであるかどうかを必ずしも把握していない、あるいは把握する必要がない場合があります。
共通言語ランタイムでは、複数の言語間で対話できるオブジェクトを含むコンポーネントやアプリケーションを簡単にデザインできます。 異なる言語で記述されたオブジェクトが相互に対話でき、それらのオブジェクトの動作が緊密に統合されます。 たとえば、あるクラスを定義してから、そのクラスの派生クラスを別の言語で作成したり、そのクラスに対して別の言語で記述したメソッドを呼び出したりできます。 また、あるクラスのインスタンスを別の言語で記述されたクラスのメソッドに渡すこともできます。 ランタイムをターゲットとする言語コンパイラおよびツールでは、ランタイムによって定義された共通の型システムが使用されるため、この言語間統合が可能です。 新しい型の定義と、型の作成、使用、永続化、およびバインドに関するランタイムの規則に従います。
すべてのマネージド コンポーネントは、関連するコンポーネントとリソースについての情報をメタデータの一部として保持しています。 共通言語ランタイムはこの情報を使用して、作成したコンポーネントまたはアプリケーションが必要とする特定バージョンのコンポーネントやリソースがあることを確認します。これにより、不明な依存関係によってコードが中断される確率が低くなります。 登録情報と状態データはレジストリに格納されなくなり、確立と保守が困難になる可能性があります。 代わりに、定義した型とその依存関係に関する情報は、メタデータとしてコードと共に格納されます。 このようにすれば、コンポーネントのレプリケーションと削除のタスクが複雑ではなくなります。
言語コンパイラおよびツールは、開発者にとってわかりやすく役に立つ方法で共通言語ランタイムの機能を公開します。 ランタイムの一部の機能は、ある環境では別の環境より顕著である場合があります。 共通言語ランタイムがどのような利点をもたらすかは、使用するコンパイラやツールによって異なります。 たとえば、Visual Basic の開発者が共通言語ランタイムを使用した場合は、Visual Basic 言語のオブジェクト指向機能が強化されたと感じるでしょう。 ランタイムの利点は次のとおりです。
パフォーマンスの向上。
異なる言語で開発されたコンポーネントを簡単に利用可能。
クラス ライブラリによって提供される拡張性のある型。
継承、インターフェイス、オーバーロードなどのオブジェクト指向プログラミングの言語機能。
マルチスレッドでスケーラブルなアプリケーションの作成を可能にする明示的なフリー スレッドのサポート。
構造化例外処理のサポート。
カスタム属性のサポート。
ガベージ コレクション。
タイプ セーフとセキュリティを強化するために関数ポインターではなくデリゲートを使用。 デリゲートの詳細については、「共通型システム」を参照してください。
CLR のバージョン
.NET Core および .NET 5 以上のリリースの製品バージョンは 1 つです。つまり、個別の CLR バージョンはありません。 .NET Core バージョンの一覧については、「Download .NET Core」(.NET Core のダウンロード) を参照してください。
ただし、.NET Framework のバージョン番号はそれに含まれている CLR のバージョン番号には必ずしも対応しません。 .NET Framework のバージョンとそれに対応する CLR バージョンの一覧については、「.NET Framework のバージョンおよび依存関係」を参照してください。
関連記事
Title | 説明 |
---|---|
マネージド実行プロセス | 共通言語ランタイム利用するために必要な手順について説明します。 |
自動メモリ管理 | ガベージ コレクターによるメモリの割り当て方法および解放方法について説明します。 |
.NET Framework の概要 | 共通型システム、言語間での相互運用性、マネージド実行、アプリケーション ドメイン、アセンブリなどの .NET Framework の主要な概念について説明します。 |
共通型システム | 言語間の統合をサポートするために共通言語ランタイムで型を宣言、使用、および管理する方法について説明します。 |
.NET