Foreign Function Interface

A foreign function interface (FFI) is a mechanism by which a program written in one programming language can call routines or make use of services written in another. The term comes from the specification for Common Lisp, which explicitly refers to the language features for inter-language calls as such; the term is also used officially by the Haskell programming language. Other languages use other terminology (the Ada programming language talks about "language bindings", while Java refers to its FFI as the Java Native Interface, or JNI). Foreign function interface has become generic terminology for mechanisms which provide such services.

Despite the name, FFIs are not necessarily restricted to function calls; many FFIs permit method calls on objects; and some even permit migration of non-trivial datatypes and/or objects across the language boundary.

The term foreign function interface is generally not used to describe multi-lingual runtimes such as the Microsoft Common Language Runtime, where a common "substrate" is provided which enables any CLR-compliant language to use services defined in any other. (However, in this case the CLR does include an FFI, P/Invoke, to call outside the runtime.) In addition, many distributed computing architectures such as the Java remote method invocation (RMI), RPC, CORBA, SOAP and D-Bus permit different services to be written in different languages; such architectures are generally not considered FFIs.

In most cases, a FFI is defined by a "higher-level" language, so that it may employ services defined and implemented in a lower level language, typically a systems language like C or C++. This is typically done to either access OS services in the language in which the OS' API is defined, or for performance considerations.

Many FFIs also provide the means for the called language to invoke services in the host language as well.

Read more about Foreign Function Interface:  Operation of An FFI, Examples

Famous quotes containing the words foreign and/or function:

    Oh, has the foul atmosphere of foreign lands extinguished all your self-respect? Do you come back sordid and sycophantic, and the slave of opinions you would once have utterly detested?
    Augusta Evans (1835–1909)

    Advocating the mere tolerance of difference between women is the grossest reformism. It is a total denial of the creative function of difference in our lives. Difference must be not merely tolerated, but seen as a fund of necessary polarities between which our creativity can spark like a dialectic.
    Audre Lorde (1934–1992)