Foreign function interface
主なFFIの機能は、呼び出し側の言語(ホスト言語)と呼び出し先の言語(ゲスト言語)の呼出規約やセマンティックスを擦り合わせることである。主に以下の方法などで実装される。
ゲスト言語の呼び出し先関数に対して、ホスト言語から利用可能な特定のプロトコルを実装することを要求する(例:Java Native Interface)。
ゲスト言語の関数を「ラップ」するグルーコードを記述したラッパーライブラリを作成する。(例:Haskell 98 FFI)
ゲスト言語に定義された関数が、ホスト言語の機能やセマンティックスのサブセットであることを要求する(例:C++からC言語の機能の利用)
なお、FFIの利用や実装には次のようなケースに注意が必要である。
他方の言語がガベージコレクションの機能を持っていない場合、オブジェクトの参照や破棄が適切に行われない場合がある。場合によっては手動でオブジェクトの管理を行う必要がある。
言語間でのデータ型やオブジェクトの変換が難しい場合がある。
上記データ型の変換の問題などのために、言語間で同一のインスタンスへの参照が難しい場合がある。
一方または両方の言語が仮想マシン上で動作している場合がある。また、2つの言語が異なる仮想マシンで動作していることもある。
継承、オブジェクトや型の合成などが言語間で異なる場合。