Standard ML of New Jersey (SML/NJ) is a compiler and programming environment for the Standard ML programming language. It was originally developed jointly at Bell Laboratories and Princeton University, and is now a joint project between researchers at Bell Laboratories (Lucent Technologies), Princeton University, Yale University (The FLINT Project), and AT&T Research.The current release of SML/NJ is Version 110, which implements the SML '97 revision of the Standard ML language, including the new Standard Basis library.
SML/NJ is distributed free of charge with source code, but with no warranty. You may use, copy, modify, and distribute the software provided that you preserve the copyright notice and don't mention Bell Labs or Lucent Technologies in your advertising without prior written agreement; see the license and copyright notice for details.
Standard ML of New Jersey is written in Standard ML (except for the runtime system, which is written in C). SML/NJ has been used to implement a significant number of large systems, mainly in the fields of applied logic and verification (HOL 90, Isabelle, Step), and program analysis and advanced compilers. See Andrew Appel's projects page.
Here is a summary of some of the major features of the SML/NJ system.
- The core of the SML/NJ system is an agressively optimizing compiler that produces native machine code for most commonly used architectures: x86 (IA32), Sparc, MIPS, IBM Power 1 (PowerPC), HPPA, and Alpha.
- SML/NJ runs under Windows 95 and NT as well as many flavors of Unix. Renewed support for MacOS is planned for the next release.
- SML/NJ provides an interactive top level based on incremental compilation, but it can produce stand-alone executables using the exportFn function.
- SML/NJ uses Matthias Blume's Compilation Manager, CM, to greatly simplify the development of large software projects.
- A variety of general-purpose data structures, algorithms and utilities (such as finite sets and maps, regular expressions, pretty-printing) are provided by the SML/NJ library.
- Concurrent programming in SML is supported by the Concurrent ML library.
- eXene is a graphical interface toolkit for X-windows based on Concurrent ML.
- SML/NJ extends the SML '97 language with higher-order functors, OR-patterns, first-class continuations, and a number of other useful features.
- Support for manipulating "object languages" (e.g. logics, calculi, simple programming languages, specification languages) is provided by a simple quote/anitquote mechanism.