Standard ML of New Jersey
|Paradigm||Multi-paradigm: functional, imperative|
110.99 / 24 December 2020
|Typing discipline||strong, static, inferred|
Standard ML of New Jersey (SML/NJ; Standard Meta-Language of New Jersey) is a free and open-source compiler and programming environment for the Standard ML programming language. Aside from its runtime system, which is written in C, SML/NJ is written in Standard ML. It was originally developed jointly by Bell Laboratories and Princeton University.
SML/NJ extends the SML'97 Basis Library with several additional top-level structures:
- System info – the
SysInfostructure provides information about the runtime system, such as the operating system kind, type and version and whether or not the machine supports multiprocessing.
- Weak pointers – the
Weakstructure provides support for weak pointers.
- Lazy suspensions – the
Suspstructure implements the suspensions necessary for lazy evaluation (as opposed to eager evaluation).
- Compiler internals – the
Internalsstructure provides access to several of the compiler internals, including methods to instantiate and modify the signal table.
- Unsafe access – the
Unsafestructure provides unsafe access to data structures and runtime-system functions.
- Visible compiler structures – SML/NJ also includes structures that provide access to the ML compiler, which contains substructures for execution profiling, control of compiler error-message printing and warnings, and customizable pretty printing.
Additionally, SML/NJ provides some syntactic constructs that are not standard features of SML'97:
- Vector expressions and patterns – SML/NJ allows the creation of vectors with the
#[exp0, exp1, ..., expn−1]syntax and allows pattern-matching on them with analogous syntax.
- Or-patterns – SML/NJ extends the syntax of SML'97 patterns to allow for a matching multiple patterns in a single rule, provided each pattern has the same type, using
(apat1 | ... | apatn) => exp.
- Object language embedding – SML/NJ provides the quote/antiquote syntax that permits the embedding of expressions in an object language's concrete syntax within ML expressions and programs.
- Higher-order modules – SML/NJ supports the parametrization of functors by allowing functors to be components of structures, in addition to Standard ML's parametric modules in the form of functors.
Successor ML is a term used to describe the next version of the language. The documents describing it have been extracted from the SML/NJ '97 files and made available as a GitHub repository of TeX documents which the community is expected to collaborate and grow the language. Successor ML features can be enabled using the command-line option
In 2008, work began on HaMLet, a reference implementation of Successor ML written entirely in Standard ML. As of 2018, HaMLet remains the only complete implementation of Successor ML, with additional novelties.
- "Standard ML of New Jersey License". www.smlnj.org.
- "SML/NJ background information". www.smlnj.org. Retrieved 2018-09-05.
- "SML/NJ Special Features". www.smlnj.org. Retrieved 2018-09-05.
- "The SYS_INFO signature". www.smlnj.org. Retrieved 2018-09-05.
- "The WEAK signature". www.smlnj.org. Retrieved 2018-09-05.
- "The SUSP signature". www.smlnj.org. Retrieved 2018-09-05.
- "The INTERNALS signature". www.smlnj.org. Retrieved 2018-09-05.
- "The Unsafe structure". www.smlnj.org. Retrieved 2018-09-05.
- "The Visible Compiler". www.smlnj.org. Retrieved 2018-09-05.
- "SML/NJ Quote/Antiquote". www.smlnj.org. Retrieved 2018-09-05.
- "Successor ML Definition".
- "Standard ML of New Jersey version 110.79 NEWS". 2015-10-04.
- "MLton 1999-03-19 change notes".
- "The MLton repository".
- "Three implementation efforts to support Successor ML".
- Andreas Rossberg. "HaMLet S: To Become Or Not To Become Successor ML" (PDF).
- "SML reference interpreter".
- "Standard ML of New Jersey Change Log for v110.99".
- "The Standard ML Basis Library".