ML is a family of impure, call-by-value, statically typed, polymorphic, higher-order, functional programming languages with advanced parametric module systems whose major representatives are Standard ML and Objective Caml.

ML stands for "metalanguage", since it was first developed (at Edinburgh University) as a means for manipulating proofs in LCF (Logic of Computable Functions), the object language using the Curry-Howard isomorphism.

ML supports parametrizable algebraic datatypes, and is particularly well-known for its type inference feature, and its extremely powerful parametrizable module system. Unlike Haskell, ML supports imperative features like destructive update and exceptions directly; however this reduces some of the polymorphism that would otherwise be available in the language (this is the so-called value restriction).

Objective Caml has only one implementation, which is nevertheless quite well-supported; Standard ML has several, including perhaps most notably the industrial-strength Standard ML of New Jersey, Peter Sestoft's lightweight Moscow ML and MLton, a whole-program optimizing implementation.

ML and its offshoots have inspired, and continue to inspire, the majority of the academic research on (statically) typed functional programming languages.

Abbreviation of millilitre, a unit of volume equal to 1 1000th of a litre, and also equal to one cubic centimetre, or cc.

This is the genealogy of the programming language ML:

ML was born in year 1983.
It became SML in year 1984.
Then it begat Caml in year 1987.
It became SML 90 in year 1990.
It became SML '97 in year 1997, and has not changed much since that time.

This genealogy is brought to you by the Programming Languages Genealogy Project.

"ML" is an abbreviation of megalitre, a unit of volume equal to 1000000 litres. "mL" is an abbreviation of millilitre, 1 1000th of a litre. Since e2 is case ambiguous, both need to be covered here.

ML is indeed a pretty cool Functional Programming Language. It is a language whose semantics are close enough to those of lamba calculus to make proving things about ML programs in a mathematically rigorous way possible.

I first came across ML as a first-year undergraduate at Cambridge University, where it is used as a teaching language with which very few students have had prior experience (most are already familiar with several imperative languages e.g. C/Pascal).

The first piece of ML code I ever saw was this one:
fun fact 0 = 1
 |  fact n = n * fact (n-1);

This function can be used to calculate the factorial of a positive integer. It should be fairly clear how it works: The language uses a (polymorphic) type checker which interprets the first matching "type instance" satisfied in a function definition (c.f. Prolog clauses!). The | symbol can be read as "or".

Of course, ML gets far more complicated (and exciting!) than this. It has concepts of lazy evaluation and its datatype operator can provide hours of fun.

Log in or registerto write something here or to contact authors.