-
Portability. Runs on the following platforms:
-
ARM: Linux (Debian).
-
Alpha: Linux (Debian).
-
AMD64: Darwin (Mac OS X), FreeBSD, Linux (Debian, Fedora, Ubuntu, …), OpenBSD, Solaris (10 and above).
-
HPPA: HPUX (11.11 and above), Linux (Debian).
-
IA64: HPUX (11.11 and above), Linux (Debian).
-
PowerPC: AIX (5.2 and above), Darwin (Mac OS X), Linux (Debian, Fedora).
-
PowerPC64: AIX (5.2 and above).
-
S390: Linux (Debian).
-
Sparc: Linux (Debian), Solaris (8 and above).
-
X86: Cygwin/Windows, Darwin (Mac OS X), FreeBSD, Linux (Debian, Fedora, Ubuntu, …), MinGW/Windows, NetBSD, OpenBSD, Solaris (10 and above).
-
-
Robustness.
-
Supports the full SML 97 language as given in The Definition of Standard ML (Revised).
-
A complete implementation of the Basis Library.
-
Generates standalone executables.
-
Compiles large programs.
-
Support for large amounts of memory (up to 4G on 32-bit systems; more on 64-bit systems).
-
Support for large array lengths (up to 231 - 1 on 32-bit systems; up to 263-1 on 64-bit systems).
-
Support for large files, using 64-bit file positions.
-
-
Performance.
-
Executables have excellent running times.
-
Generates small executables.
-
Untagged and unboxed native integers, reals, and words.
-
Unboxed native arrays.
-
Multiple garbage collection strategies.
-
Fast arbitrary-precision arithmetic based on the GMP.
-
-
Tools.
-
Source-level profiling for both time and allocation.
-
MLLex lexer generator.
-
MLYacc parser generator.
-
MLNLFFIGEN foreign-function-interface generator.
-
-
Extensions.
-
A simple and fast C FFI that supports calling from SML to C and from C to SML.
-
The ML Basis system for programming in the very large.
-
Libraries for continuations, finalization, interval timers, random numbers, resource limits, resource usage, signal handlers, object size, system logging, threads, weak pointers, and world save and restore.
-
-
GMP (GNU Multiple Precision arithmetic library)
-
binutils (
ar
,ranlib
,strip
, …) -
miscellaneous Unix utilities (
diff
,find
,grep
,gzip
,patch
,sed
,tar
,xargs
, …) -
Standard ML compiler and tools to bootstrap:
-
MLton (
mlton
,mllex
, andmlyacc
) recommended. Pre-built binary packages for MLton can be installed via an OS package manager or (for select platforms) obtained fromhttp://mlton.org
. -
SML/NJ (
sml
,ml-lex
,ml-yacc
) supported, but not recommended.
-
-
(optional, for documentation only) TeX, AsciiDoc, Pygments, GraphicsMagick or ImageMagick, …
On typical platforms, building MLton requires no configuration and can be accomplished via:
$ make all
A small set of Makefile
variables can be used to customize the build:
-
CC
: Specify C compiler. Can be used for alternative tools (e.g.,CC=clang
orCC=gcc-7
). -
WITH_GMP_DIR
,WITH_GMP_INC_DIR
,WITH_GMP_LIB_DIR
: Specify GMP include and library paths, if not on default search paths. (IfWITH_GMP_DIR
is set, thenWITH_GMP_INC_DIR
defaults to$(WITH_GMP_DIR)/include
andWITH_GMP_LIB_DIR
defaults to$(WITH_GMP_DIR)/lib
.) -
MLTON_RUNTIME_ARGS
,MLTON_COMPILE_ARGS
: Specify runtime and compile arguments given to (the to-be-built)mlton
when compiling distributed executables ((self-compiled)mlton
,mllex
,mlyacc
,mlprof
, andmlnlffigen
). Can be used for testing (e.g.,MLTON_COMPILE_ARGS="-codegen c"
) or for downstream packaging. -
BOOTSTRAP_MLTON_RUNTIME_ARGS
,BOOTSTRAP_MLTON_COMPILE_ARGS
: Specify runtime and compile arguments given to "old"mlton
when compiling "bootstrapped"mlton
. Can be used to work around bugs in "old"mlton
when compiling "bootstrapped"mlton
.
For example:
$ make CC=clang WITH_GMP_DIR=/opt/gmp MLTON_COMPILE_ARGS="-codegen c" all
The build artifacts are located under ./build
. The just-built mlton
can be
executed via ./build/bin/mlton
.
Building documentation can be accomplished via:
$ make docs
On typical platforms, installing MLton (after performing make all
and,
optionally, make docs
) to /usr/local
can be accomplished via:
$ make install
A small set of Makefile
variables can be used to customize the installation:
-
PREFIX
: Specify the installation prefix.
For example:
$ make PREFIX=/opt/mlton install
A .tgz
or .tbz
binary package can be extracted at any location, yielding
README.adoc
(this file), CHANGELOG.adoc
, LICENSE
, Makefile
, bin/
,
lib/
, and share/
. The compiler and tools can be executed in-place (e.g.,
./bin/mlton
).
A small set of Makefile
variables can be used to customize the binary package
via make update
:
-
CC
: Specify C compiler. Can be used for alternative tools (e.g.,CC=clang
orCC=gcc-7
). -
WITH_GMP_DIR
,WITH_GMP_INC_DIR
,WITH_GMP_LIB_DIR
: Specify GMP include and library paths, if not on default search paths. (IfWITH_GMP_DIR
is set, thenWITH_GMP_INC_DIR
defaults to$(WITH_GMP_DIR)/include
andWITH_GMP_LIB_DIR
defaults to$(WITH_GMP_DIR)/lib
.)
For example:
$ make CC=clang WITH_GMP_DIR=/opt/gmp update
On typical platforms, installing MLton (after optionally performing
make update
) to /usr/local
can be accomplished via:
$ make install
A small set of Makefile
variables can be used to customize the installation:
-
PREFIX
: Specify the installation prefix.
For example:
$ make PREFIX=/opt/mlton install
-
mailing lists
Submit an issue if you need any help. We welcome pull requests with bug fixes or changes.