to maintain references to the same instance of a mutable object, due to the mapping issue above. One or both languages may be running on a virtual machine (VM); moreover, if both are, these will probably be different VMs. Cross-language inheritance and other differences, such as between type systems or between object-composition models, may be especially difficult. By language Examples of FFIs include: Ada language bindings, allowing not only to call foreign functions but also to export its functions and methods to be called from non-Ada code. C++ has a trivial FFI with C, as the languages share a significant common subset. The primary effect of the declaration in C++ is to disable C++ name mangling. Clean provides a bidirectional FFI with all languages following C or the stdcall calling convention. Common Lisp CNI, alternative to JNI used in the GNU compiler environment. One of the bases of the Component Object Model is a common interface format, which natively uses the same types as Visual Basic for strings and arrays. D does it the same way as C++ does, with extern "C" through extern (C++) Dart includes dart:ffi library to call native C code for mobile, command-line, and server applications Dynamic languages, such as Python, Perl, Tcl, and Ruby, all provide easy access to native code written in C/C++ (or any other language obeying C/C++ calling conventions). Factor has FFIs for C, Fortran, Objective-C, and Windows COM; all of these enable importing and calling arbitrary shared libraries dynamically. Fortran 2003 has a module ISO_C_BINDING which provides interoperable data types (both intrinsic types and POD structs), interoperable pointers, interoperable global data stores, and mechanisms for calling C from Fortran and for calling Fortran from C. It has been improved in the Fortran 2018 standard. Go can call C code directly via the "C" pseudo-package. GWT, in which Java is compiled to JavaScript, has an FFI called JSNI which allows Java source to call arbitrary JavaScript functions, and for JavaScript to call back into Java. Haskell JNI, which provides an interface between Java and C/C++, the preferred systems languages on most systems where Java is deployed. JNA provides an interface with native libraries without having to write glue code. Another example is JNR LuaJIT, a just-in-time implementation of Lua, has an FFI that allows "calling external C functions and using C data structures from pure Lua code". Nim has an FFI which