言語の相互運用性の概要
更新 : 2007 年 11 月
言語の相互運用性とは、それぞれが異なるプログラミング言語で記述された複数のコードが対話できる能力のことです。言語の相互運用性により、コードを再利用できる機会が増えるため、開発プロセスの効率化を図ることができます。
開発者はさまざまなツールや技術を使用しており、そのそれぞれが異なる機能や型をサポートしているため、これまで言語の相互運用性を確保することは困難とされてきました。しかし、共通言語ランタイムに対応した言語コンパイラや言語ツールでは、このランタイムに組み込まれているサポートを利用して言語の相互運用性を実現できます。
共通言語ランタイムは、共通型システム (CTS: Common Type System) を規定して準拠させること、およびメタデータを提供することによって、言語の相互運用性を確保するために必要な基盤を提供します。このランタイムに対応するすべての言語は、型の定義方法および使用方法を規定した共通型システムに準拠することになるため、それらの言語間で型の使用方法が一貫したものになります。メタデータも、型に関する情報を格納および取得するための一貫した機構を定義しており、言語の相互運用性を実現するために役立っています。コンパイラは型情報をメタデータとして格納し、共通言語ランタイムがこの情報を使用して実行時にサービスを提供します。コードの記述に使用されている言語に関係なく、すべての型情報が同じ方法で格納および取得されるため、ランタイムでは複数言語のアプリケーションの実行を管理できます。
マネージ コードの言語の相互運用性を確保できるように、ランタイムは次のようなサポートを提供します。
型は、実装するために使用されている言語に関係なく、ほかの型の実装を継承したり、別の型のメソッドにオブジェクトを渡したり、ほかの型で定義されているメソッドを呼び出したりできます。
デバッガ、プロファイラ、またはその他のツールは、共通言語ランタイムの Microsoft Intermediate Language (MSIL) とメタデータという 1 つの環境に対応するだけで、共通言語ランタイムに対応するすべてのプログラミング言語をサポートできるようになります。
例外は、言語間で一貫した方法で処理されます。コード内では、ある言語で記述した例外をスローし、その例外を別の言語で記述されたオブジェクトでキャッチおよび解釈できます。
ランタイムでは、すべてのマネージ コードについて複数言語環境での実行がサポートされていますが、記述した型の機能がほかの開発者が使用するプログラミング言語で確実に利用できるという保証はありません。その主な原因は、ランタイムに対応しようとする各言語のコンパイラが、独自の言語機能をサポートする型システムとメタデータを使用している点にあります。呼び出し元コードがどの言語で記述されているかが不明な場合は、記述したコンポーネントが公開する機能にその呼び出し元がアクセスできるかどうかもわかりません。たとえば、記述に使用する言語が符号なし整数をサポートする場合は、メソッドをデザインするときに UInt32 型のパラメータをとるようにしますが、そのようなメソッドは、符号なし整数という概念を持たない言語からは使用できません。
記述したマネージ コードがあらゆるプログラミング言語で記述されたコードからも確実にアクセスできるようにするために、.NET Framework は、基盤となる言語機能について記述し、これらの機能を使用するときの規則を規定する共通言語仕様 (CLS) を提供しています。コンポーネントおよびツールにおける CLS 準拠の詳細については、「CLS 準拠コードの記述」を参照してください。