MLNLFFI
=======

<!Cite(Blume01, ML-NLFFI)> is the no-longer-foreign-function interface
library for SML.

As of 20050212, MLton has an initial port of ML-NLFFI from SML/NJ to
MLton.  All of the ML-NLFFI functionality is present.

Additionally, MLton has an initial port of the
<:MLNLFFIGen:mlnlffigen> tool from SML/NJ to MLton.  Due to low-level
details, the code generated by SML/NJ's `ml-nlffigen` is not
compatible with MLton, and vice-versa.  However, the generated code
has the same interface, so portable client code can be written.
MLton's `mlnlffigen` does not currently support C functions with
`struct` or `union` arguments.

== Usage ==

* You can import the ML-NLFFI Library into an MLB file with
+
[options="header"]
|=====
|MLB file|Description
|`$(SML_LIB)/mlnlffi-lib/mlnlffi-lib.mlb`|
|=====

* If you are porting a project from SML/NJ's <:CompilationManager:> to
MLton's <:MLBasis: ML Basis system> using `cm2mlb`, note that the
following maps are included by default:
+
----
# MLNLFFI Library
$c                                      $(SML_LIB)/mlnlffi-lib
$c/c.cm                                 $(SML_LIB)/mlnlffi-lib/mlnlffi-lib.mlb
----
+
This will automatically convert a `$/c.cm` import in an input `.cm`
file into a `$(SML_LIB)/mlnlffi-lib/mlnlffi-lib.mlb` import in the
output `.mlb` file.

== Also see ==

* <!Cite(Blume01)>
* <:MLNLFFIImplementation:>
* <:MLNLFFIGen:>
