Share via


言語間の相互運用性

ここでは、共通言語ランタイムに組み込まれている言語の相互運用性のサポートと、言語間の相互運用性を実現にするために共通言語仕様 (CLS: Common Language Specification) が果たしている役割について説明します。

言語の相互運用性とは、異なるプログラミング言語で記述された複数のコードが対話できる能力のことです。 言語の相互運用性により、コードを最大限再利用できるため、開発プロセスの効率化を図ることができます。

開発者はさまざまなツールや技術を使用しており、そのそれぞれが異なる機能や型をサポートしているため、これまで言語の相互運用性を確保することは困難とされてきました。 しかし、共通言語ランタイムに対応した言語コンパイラや言語ツールでは、このランタイムに組み込まれているサポートを利用して言語の相互運用性を実現できます。

共通言語ランタイムは、共通型システム (CTS: Common Type System) を規定して準拠させること、およびメタデータを提供することによって、言語の相互運用性を確保するために必要な基盤を提供します。 このランタイムに対応するすべての言語は、型の定義方法および使用方法を規定した共通型システムに準拠することになるため、それらの言語間で型の使用方法が一貫したものになります。 メタデータも、型に関する情報を格納および取得するための一貫した機構を定義しており、言語の相互運用性を実現するために役立っています。 コンパイラは型情報をメタデータとして格納し、共通言語ランタイムがこの情報を使用して実行時にサービスを提供します。コードの記述に使用されている言語に関係なく、すべての型情報が同じ方法で格納および取得されるため、ランタイムでは複数言語のアプリケーションの実行を管理できます。

マネージ コードの言語の相互運用性を確保できるように、ランタイムは次のようなサポートを提供します。

  • 型は、実装するために使用されている言語に関係なく、ほかの型の実装を継承したり、別の型のメソッドにオブジェクトを渡したり、ほかの型で定義されているメソッドを呼び出したりできます。

  • デバッガー、プロファイラー、またはその他のツールは、共通言語ランタイムの Microsoft Intermediate Language (MSIL) とメタデータという 1 つの環境に対応するだけで、共通言語ランタイムに対応するすべてのプログラミング言語をサポートできるようになります。

  • 例外は、言語間で一貫した方法で処理されます。 コード内では、ある言語で記述した例外をスローし、その例外を別の言語で記述されたオブジェクトでキャッチおよび解釈できます。

ランタイムでは、すべてのマネージ コードについて複数言語環境での実行がサポートされていますが、記述した型の機能がほかの開発者が使用するプログラミング言語で確実に利用できるという保証はありません。 その主な原因は、ランタイムに対応しようとする各言語のコンパイラが、独自の言語機能をサポートする型システムとメタデータを使用している点にあります。 呼び出し元コードがどの言語で記述されているかが不明な場合は、記述したコンポーネントが公開する機能にその呼び出し元がアクセスできるかどうかもわかりません。 たとえば、記述に使用する言語が符号なし整数をサポートする場合は、メソッドをデザインするときに UInt32 型のパラメーターを受け取るようにしますが、 そのようなメソッドは、符号なし整数という概念を持たない言語からは使用できません。

記述したマネージ コードが他のプログラミング言語で記述されたコードからも確実にアクセスできるようにするために、.NET Framework には、基盤となる言語機能について記述し、これらの機能を使用するときの規則を定義する共通言語仕様 (CLS) が用意されています。 コンポーネントおよびツールにおける CLS 準拠の詳細については、「CLS 準拠コードの記述」を参照してください。

関連トピック

タイトル

説明

共通言語仕様

各言語に共通な一連の機能の必要性を説明し、CLS の規則および機能についても個別に説明します。

CLS 準拠コードの記述

コンポーネントにとっての CLS 準拠の意味と、ツールの CLS 準拠レベルについて説明します。

共通型システム

共通言語ランタイムで型を宣言したり、使用したり、管理したりする方法について説明します。

メタデータと自己言及的なコンポーネント

共通言語ランタイムで型を記述し、記述した情報をその型と共に格納する機構について説明します。