どこでも機能する質問に対する単一の答えはありません。一般に、答えは、2つの言語が「何か」(セットまたはルールまたは「呼び出しプロトコル」)について合意する必要があるということです。
大まかに言うと、プロトコルは次の3つを指定する必要があります。
- 「発見」:お互いを見つける方法。
- 「リンク」:(お互いを知った後)接続を確立する方法。
- 「呼び出し」:実際にお互いにリクエストを行う方法。
詳細はプロトコル自体に大きく依存します。
時々、2つの言語は一緒に働くために共謀します。2つの言語が、外部で定義されたプロトコルをサポートすることに同意する場合があります。最近では、OSまたは「ランタイム環境」(.NETおよびJava)も関係していることがよくあります。能力が一方向にしか進まない場合があります(「A」は「B」を呼び出すことができますが、「B」は「A」を呼び出すことができません)。
これは、OSと通信するときにどの言語でも直面する問題と同じであることに注意してください。LinuxカーネルはSchemeで書かれていません。
Windowsの世界からのいくつかの典型的な答えを見てみましょう:
CとC++:C ++は、「Cプロトコル」のゆがんだ(「マングル」)バリエーションを使用します。C ++はCを呼び出すことができ、CはC ++を呼び出すことができます(ただし、名前が非常に乱雑になる場合があり、名前の翻訳に外部の支援が必要になる場合があります)。これはWindowsだけではありません。これは、両方をサポートするすべてのプラットフォームに一般的に当てはまります。最も人気のあるOSも「Cプロトコル」を使用しています。
VB6とほとんどの言語:VB6の推奨される方法は「COMプロトコル」です。他の言語は、VB6から使用できるようにCOMオブジェクトを記述できる必要があります。VB6はCOMオブジェクトも生成できます(ただし、COMオブジェクトのすべての可能なバリエーションではありません)。
VB6は、「Cプロトコル」の非常に限られたバリエーションを話すこともでき、その後、外部に電話をかけることしかできません。「Cプロトコル」を介して直接話すことができるオブジェクトを作成することはできません。
.NET言語:すべての.NET言語は、同じ低水準言語(IL)にコンパイルされて通信します。ランタイムは通信を管理し、その観点からは、それらはすべて同じ言語のように見えます。
VBScriptと他の言語:VBScriptはCOMプロトコルのサブセットのみを話すことができます。
もう1つの注意:SOAP「Webサービス」は、人気が高まっている他の多くのWebベースのプロトコルと同様に、実際には「呼び出しプロトコル」でもあります。結局のところ、それはすべて、異なる言語で書かれたコードと話すことです(そして、その時点で別のボックスで実行されます!)