Foreign function interface(フォーリン・ファンクション・インターフェイス、FFI)とは、あるプログラミング言語から他のプログラミング言語で定義された関数などを利用するための機構。主に高水準言語からC/C++などの関数やメソッドを呼び出し、OS固有の機能などを利用するために使用されることが多い。
FFIという用語はCommon Lispにおける仕様に由来し[1]、Haskellでも同様にFFIという用語が使われている[2]。Adaなどでは言語間バインディング(または単にバインディング, language binding)と呼ばれている[3]。
FFIという用語自体に「関数(Function)」という言葉が含まれているが、多くのFFIでは単に他言語で書かれた関数が呼び出せるだけではなく、オブジェクトのメソッドを呼び出したり、その返り値を取得し、データ型やクラスを言語間で相互変換することができる。
主なFFIの機能は、呼び出し側の言語(ホスト言語)と呼び出し先の言語(ゲスト言語)の呼出規約やセマンティックスを擦り合わせることである。主に以下の方法などで実装される[4]。
なお、FFIの利用や実装には次のようなケースに注意が必要である。
![]() | この節の加筆が望まれています。 |