Foreign function interface(フォーリン・ファンクション・インタフェース、FFI)とは、あるプログラミング言語から他のプログラミング言語で定義された関数などを利用するための機構。主に高水準言語からC/C++などの関数やメソッドを呼び出し、オペレーティングシステム (OS) 固有の機能などを利用するために使用されることが多い。

FFIという用語はCommon Lispにおける仕様に由来し[1]、Haskellでも同様にFFIという用語が使われている[2]。Adaなどでは言語間バインディング: language binding)、または単にバインディング(: binding)と呼ばれている[3]

FFIという用語自体に「関数(: function)」という言葉が含まれているが、多くのFFIでは単に他言語で書かれた関数が呼び出せるだけではなく、オブジェクトのメソッドを呼び出したり、その返り値を取得し、データ型やクラスを言語間で相互変換することができる。

概要

編集

主なFFIの機能は、呼び出し側の言語(ホスト言語)と呼び出し先の言語(ゲスト言語)の呼出規約やセマンティックスを擦り合わせることである。主に以下の方法などで実装される[4]

  • ゲスト言語の呼び出し先関数に対して、ホスト言語から利用可能な特定のプロトコルを実装することを要求する(例:Java Native Interface)。
  • ゲスト言語の関数を「ラップ」するグルーコードを記述したラッパーライブラリを作成する。(例:Haskell 98 FFI[5]
  • ゲスト言語に定義された関数が、ホスト言語の機能やセマンティックスのサブセットであることを要求する(例:C++からC言語の機能の利用)

なお、FFIの利用や実装には次のようなケースに注意が必要である。

  • 他方の言語がガベージコレクションの機能を持っていない場合、オブジェクトの参照や破棄が適切に行われない場合がある。場合によっては手動でオブジェクトの管理を行う必要がある。
  • 言語間でのデータ型やオブジェクトの変換が難しい場合がある。
  • 上記データ型の変換の問題などのために、言語間で同一のインスタンスへの参照が難しい場合がある。
  • 一方または両方の言語が仮想マシン上で動作している場合がある。また、2つの言語が異なる仮想マシンで動作していることもある。
  • 継承、オブジェクトや型の合成などが言語間で異なる場合。

編集

脚注

編集

関連項目

編集

外部リンク

編集

📚 Artikel Terkait di Wikipedia

アプリケーションプログラミングインタフェース

C++14の規格書の最終草案 ^ C11の規格書の最終草案 ウィキメディア・コモンズには、アプリケーションプログラミングインタフェースに関連するカテゴリがあります。 システムコール 呼出規約 Foreign function interface 名前修飾 プラグイン ソフトウェア開発キット 『API』 - コトバンク

Nim

続き型プログラミング、オブジェクト指向プログラミングをサポートしており、 コンパイル時のコード生成、代数的データ型、C言語のForeign function interface(FFI)、JavaScriptへのコンパイルなどの機能を提供している。Pythonのようなシンプルな構文で書かれるが、C言

Java Native Interface

Oracle Java SE 7 Documentation ^ Java Native Interface (JNI) | IBM Knowledge Center Foreign function interface Java Native Access: JNIを用いずにネイティブコードを呼び出すためのライブラリ

Javaバージョン履歴

レコード・パターン(第2プレビュー) JEP 433: Pattern Matching for Switch(第4プレビュー) JEP 434: Foreign Function & Memory API(第2プレビュー) JEP 436: 仮想スレッド(第2プレビュー) JEP 437: 構造化された並行性(第2インキュベーター)

Haskell

98のマイナーバージョンアップを目的としている。 Haskell 2010は他のプログラミング言語とのバインディングを可能にする Foreign Function Interface(FFI)を Haskell に追加し, いくつかの構文上の問題を修正する(正式な構文を変更する)。「n + k パターン」と呼ばれる構文を削除し

OCaml

CやFORTRANと互換性のある形式の効率的な数値配列(array)の言語サポートを含む、C言語のプリミティブをリンクするためのForeign function interface(FFI)が提供されている。OCamlは、Cの「main」プログラムにリンクできるOCaml関数のライブラリの作成もサポート

FFI

第二次世界大戦後期にフランスのレジスタンス勢力を統合して編成された軍事組織。 外国金融機関 (Foreign Financial Institution) 他言語関数インターフェース (Foreign function interface) - 別のプログラミング言語の関数を呼び出すインターフェース FFi ファイナルファイト

名前修飾

コンピュータ・アーキテクチャ オブジェクトファイル シンボルテーブル コールスタック アプリケーションバイナリインタフェース (ABI) Foreign function interface SWIG P/Invoke nm (UNIX) Itanium C++ ABI Summary c++filt — filter