Standard ML of New Jersey (SML/NJ; Standard Meta-Language of New Jersey) is a
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
and
integrated development environment
An integrated development environment (IDE) is a Application software, software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, an ...
for the
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
Standard ML
Standard ML (SML) is a General-purpose programming language, general-purpose, High-level programming language, high-level, Modular programming, modular, Functional programming, functional programming language with compile-time type checking and t ...
. It is written in Standard ML, except for the
runtime system
In computer programming, a runtime system or runtime environment is a sub-system that exists in the computer where a program is created, as well as in the computers where the program is intended to be run. The name comes from the compile time ...
in
C language. It was originally developed jointly by
Bell Laboratories
Nokia Bell Labs, commonly referred to as ''Bell Labs'', is an American industrial research and development company owned by Finnish technology company Nokia. With headquarters located in Murray Hill, New Jersey, the company operates several lab ...
and
Princeton University
Princeton University is a private university, private Ivy League research university in Princeton, New Jersey, United States. Founded in 1746 in Elizabeth, New Jersey, Elizabeth as the College of New Jersey, Princeton is the List of Colonial ...
.
It is
free and open-source software
Free and open-source software (FOSS) is software available under a license that grants users the right to use, modify, and distribute the software modified or not to everyone free of charge. FOSS is an inclusive umbrella term encompassing free ...
released under a
permissive software license
A permissive software license, sometimes also called BSD-like or BSD-style license, is a free-software license which instead of copyleft protections, carries only minimal restrictions on how the software can be used, modified, and redistributed, ...
(BSD-like).
Its name is a reference both to the American state of
New Jersey
New Jersey is a U.S. state, state located in both the Mid-Atlantic States, Mid-Atlantic and Northeastern United States, Northeastern regions of the United States. Located at the geographic hub of the urban area, heavily urbanized Northeas ...
in which Princeton and Bell Labs are located, and to
Standard Oil of New Jersey
Exxon Mobil Corporation ( ) is an American multinational oil and gas corporation headquartered in Spring, Texas, a suburb of Houston. Founded as the largest direct successor of John D. Rockefeller's Standard Oil, the modern company was formed ...
, the famous oil
monopoly
A monopoly (from Greek language, Greek and ) is a market in which one person or company is the only supplier of a particular good or service. A monopoly is characterized by a lack of economic Competition (economics), competition to produce ...
of the early 20th century.
Features
SML/NJ extends the SML'97 Basis
Library
A library is a collection of Book, books, and possibly other Document, materials and Media (communication), media, that is accessible for use by its members and members of allied institutions. Libraries provide physical (hard copies) or electron ...
with several added top-level structures:
* ''System info'' – the
SysInfo
structure provides information about the runtime system, such as the
operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
kind, type and version and whether or not the machine supports
multiprocessing
Multiprocessing (MP) is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor or the ability to allocate tasks between them. The ...
.
* ''Weak pointers'' – the
Weak
structure provides support for
weak pointers.
* ''Lazy suspensions'' – the
Susp
structure implements the suspensions necessary for
lazy evaluation
In programming language theory, lazy evaluation, or call-by-need, is an evaluation strategy which delays the evaluation of an Expression (computer science), expression until its value is needed (non-strict evaluation) and which avoids repeated eva ...
(as opposed to
eager evaluation
In a programming language, an evaluation strategy is a set of rules for evaluating expressions. The term is often used to refer to the more specific notion of a ''parameter-passing strategy'' that defines the kind of value that is passed to the ...
).
* ''
Compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
internals'' – the
Internals
structure provides access to several of the compiler internals, including methods to instantiate and modify the signal table.
* ''Unsafe access'' – the
Unsafe
structure 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.
Also, 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
# 0, ''exp''1, ..., ''expn''−1">'exp''0, ''exp''1, ..., ''expn''−1/code> 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 (''apat''1 , ... , ''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.
Development
''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
GitHub () is a Proprietary software, proprietary developer platform that allows developers to create, store, manage, and share their code. It uses Git to provide distributed version control and GitHub itself provides access control, bug trackin ...
repository of TeX
Tex, TeX, TEX, may refer to:
People and fictional characters
* Tex (nickname), a list of people and fictional characters with the nickname
* Tex Earnhardt (1930–2020), U.S. businessman
* Joe Tex (1933–1982), stage name of American soul singer ...
documents which the community is expected to collaborate and grow the language. Successor ML features can be enabled using the command-line option -Cparser.succ-ml=true
.
Since at least 1998, ''MLton'' is the standard bootstrapping
In general, bootstrapping usually refers to a self-starting process that is supposed to continue or grow without external input. Many analytical techniques are often called bootstrap methods in reference to their self-starting or self-supporting ...
compiler, and includes some support for Successor ML.
In 2008, work began on ''HaMLet'', a reference implementation of ''Successor ML'' written entirely in Standard ML. , HaMLet remains the only complete implementation of Successor ML, with added novel features.
Since 2015, the evolution of SML/NJ geared towards evolving the Basis library and adding support for the ''Successor ML'' definition with the release of version 110.79.
At the end of 2020, 64-bit
In computer architecture, 64-bit integers, memory addresses, or other data units are those that are 64 bits wide. Also, 64-bit central processing units (CPU) and arithmetic logic units (ALU) are those that are based on processor registers, a ...
support was added with the release of version 110.99.
See also
* Extended ML
* Dependent ML
External links
*
*
*
*
Hamlet
References
{{ML programming
Procedural programming languages
ML programming language family
Bell Labs
Princeton University
Free and open source compilers
Free computer libraries
Programming languages created in 1988