enables it to use source from C, C++, and Objective-C. It can also interface with Javascript. JavaScript: JavaScript is usually run inside web browser runtimes that don't provide direct access to system libraries or commands to run, but there are few exceptions: Node.js provides functions to open precompiled modules that in turn may provide access to non-builtin resources. Deno, provides kind of FFI interface via functions. Julia has ccall keyword to call C (and other languages, e.g. Fortran); while packages, providing similar no-boilerplate support, are available for some languages e.g. for Python (to e.g. provide OO support and GC support), Java (and supports other JDK-languages, such as Scala) and R. Interactive use with C++ is also possible with Cxx.jl package. PhoneGap (was called by the name Apache Callback, but now Apache Cordova) is a platform for building native mobile applications using HTML, CSS and JavaScript. Additionally has FFIs via JavaScript callback functions for access to methods and properties of mobile phone's native features including Accelerometer, Camera (also PhotoLibrary and SavedPhotoAlbum), Compass, Storage (SQL database and localStorage), Notification, Media and Capture (playing and recording or audio and video), File, Contacts (address book), Events, Device and Connection information.,. PHP provides FFI to C. Python provides the ctypes and cffi modules. For example, the ctypes module can load C functions from shared libraries/DLLs on-the-fly and translate simple data types automatically between Python and C semantics as follows: import ctypes libc = ctypes.CDLL('/lib/libc.so.6') # Under Linux/Unix t = libc.time(None) # Equivalent C code: t = time(NULL) print(t) P/Invoke, which provides an interface between the Microsoft Common Language Runtime and native code. Racket has a native FFI based heavily on macros that enables importing arbitrary shared libraries dynamically. Raku can call Ruby, Python, Perl, Brainfuck, Lua, C, C++, Go, Scheme Guile/Gambit and Rust Ruby provides FFI either through the ffi gem, or through the standard library fiddle. require 'fiddle' libm = Fiddle.dlopen('/lib/libm.so.6') # Equivalent to: double floor(double x); floor = Fiddle::Function.new( libm.sym('floor'), # ptr is a referenced function(, or symbol), of a Fiddle::Handle. [Fiddle::TYPE_DOUBLE], # args is an Array of arguments, passed to the ptr function. Fiddle::TYPE_DOUBLE # ret_type is the return type of the function ) # Equivalent to: floor(3.14159); floor.call(3.14159) #=> 3.0 Rust defines a foreign function interface to functions with various standard ABIs. There is also a library for interfacing with Elixir, Rustler. Visual Basic has a declarative syntax that allows it