Standard ML of New Jersey
Encyclopedia
Standard ML of New Jersey (SML/NJ) is a compiler and programming environment for Standard ML
. Aside from its runtime system, which is written in C, SML/NJ is written in Standard ML. It was developed jointly by Bell Laboratories
and Princeton University
.
Its name is a reference both to Princeton's home state and to Standard Oil of New Jersey, the famous oil monopoly
of the early 20th century.
Standard ML
Standard ML is a general-purpose, modular, functional programming language with compile-time type checking and type inference. It is popular among compiler writers and programming language researchers, as well as in the development of theorem provers.SML is a modern descendant of the ML...
. Aside from its runtime system, which is written in C, SML/NJ is written in Standard ML. It was developed jointly by Bell Laboratories
Bell Labs
Bell Laboratories is the research and development subsidiary of the French-owned Alcatel-Lucent and previously of the American Telephone & Telegraph Company , half-owned through its Western Electric manufacturing subsidiary.Bell Laboratories operates its...
and Princeton University
Princeton University
Princeton University is a private research university located in Princeton, New Jersey, United States. The school is one of the eight universities of the Ivy League, and is one of the nine Colonial Colleges founded before the American Revolution....
.
Its name is a reference both to Princeton's home state and to Standard Oil of New Jersey, the famous oil monopoly
Monopoly
A monopoly exists when a specific person or enterprise is the only supplier of a particular commodity...
of the early 20th century.
Features
SML/NJ extends the SML'97 Basis Library with several additional top-level structures:- System info – this module provides information about the runtime system, such as the Operating SystemOperating systemAn operating system is a set of programs that manage computer hardware resources and provide common services for application software. The operating system is the most important type of system software in a computer system...
kind, type and version and whether or not the machine supports multiprocessingMultiprocessingMultiprocessing is the use of two or more central processing units within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them...
. - Weak pointers – a weak pointer is one that is not sufficient to keep an object alive. If a heap value is referenced via ordinary pointers then it will remain alive, but if it is only referenced via weak pointers then it will be garbage collected.
- Lazy suspensions – this module implements the suspensions necessary for lazy evaluationLazy evaluationIn programming language theory, lazy evaluation or call-by-need is an evaluation strategy which delays the evaluation of an expression until the value of this is actually required and which also avoids repeated evaluations...
(as opposed to eager evaluationEager evaluationIn computer programming, eager evaluation or greedy evaluation is the evaluation strategy in most traditional programming languages. In eager evaluation an expression is evaluated as soon as it gets bound to a variable. The term is typically used to contrast lazy evaluation, where expressions are...
). - CompilerCompilerA compiler is a computer program that transforms source code written in a programming language into another computer language...
internals – SML/NJ provides access to several of the compiler internals, including methods to instantiate and modify the signal table. - Unsafe access – these modules provide unsafe access to data structures and runtime-system functions.
- Compiler modules – SML/NJ also includes a structure that provides control of the ML compiler, which contains substructures for execution profiling, control of compiler error-message printing and warnings, and customizable pretty printing.