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