HOME

TheInfoList



OR:

Standard ML of New Jersey (SML/NJ; Standard Meta-Language of New Jersey) is a
free and open-source Free and open-source software (FOSS) is a term used to refer to groups of software consisting of both free software and open-source software where anyone is freely licensed to use, copy, study, and change the software in any way, and the sour ...
compiler and programming environment for the
Standard ML Standard ML (SML) 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 th ...
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
. Aside from its
runtime system In computer programming, a runtime system or runtime environment is a sub-system that exists both 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 ...
, which is written in C, SML/NJ is written in Standard ML. It was originally developed jointly by
Bell Laboratories Nokia Bell Labs, originally named Bell Telephone Laboratories (1925–1984), then AT&T Bell Laboratories (1984–1996) and Bell Labs Innovations (1996–2007), is an American industrial research and scientific development company owned by mult ...
and
Princeton University Princeton University is a private research university in Princeton, New Jersey. Founded in 1746 in Elizabeth as the College of New Jersey, Princeton is the fourth-oldest institution of higher education in the United States and one of the ...
. Its name is a reference both to the American state of
New Jersey New Jersey is a U.S. state, state in the Mid-Atlantic States, Mid-Atlantic and Northeastern United States, Northeastern regions of the United States. It is bordered on the north and east by the state of New York (state), New York; on the ea ...
in which Princeton and Bell Labs are located and to
Standard Oil of New Jersey ExxonMobil, an American multinational oil and gas corporation presently based out of Texas, has had one of the longest histories of any company in its industry. A direct descendant of John D. Rockefeller's Standard Oil, the company traces its ro ...
, the famous oil
monopoly A monopoly (from Greek language, Greek el, μόνος, mónos, single, alone, label=none and el, πωλεῖν, pōleîn, to sell, label=none), as described by Irving Fisher, is a market with the "absence of competition", creating a situati ...
of the early 20th century.


Features

SML/NJ extends the SML'97 Basis Library with several additional 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, software resources, and provides common services for computer programs. Time-sharing operating systems schedule tasks for efficient use of the system and may also ...
kind, type and version and whether or not the machine supports
multiprocessing Multiprocessing 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. There ar ...
. * 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 until its value is needed ( non-strict evaluation) and which also avoids repeated evaluations ( sharing). Th ...
(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 translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
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. 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 # '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, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, conti ...
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 -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. Etymology Tall boots may have a tab, loop or handle at the top known as a bootstrap, allowing one to use fingers ...
compiler, and it has some support for Successor ML. 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. 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 CPUs and ALUs are those that are based on processor registers, address buses, or data buses of that size. A co ...
support was added with the release of version 110.99.


See also

* Extended ML * Dependent ML


External links


Standard ML of New Jersey

Successor ML

Standard ML Basis Library

Hamlet


References

{{reflist Procedural programming languages ML programming language family Bell Labs Princeton University Free compilers and interpreters Free computer libraries Programming languages created in the 20th century