ML (Programmiersprache)
# ML (Programmiersprache)

Meta Language (ML) beschreibt eine Familie funktionaler Programmiersprachen mit statischer Typisierung, Polymorphie, automatischer Speicherbereinigung und im Allgemeinen strenger Auswertung. ML ist allerdings keine rein funktionale Sprache wie Haskell, sondern erlaubt an manchen Stellen auch imperative Konstrukte und Wirkungen, beispielsweise für Dateizugriffe.
ML wurde 1973 von Robin Milner an der Universität Edinburgh als Teil eines Theorem-Beweis-Programms LCF (Logic of Computable Functions) entwickelt, welches automatisiert die Korrektheit von Programmen beweisen sollte. Seither hat sich ML zu einer vollständigen und eigenständigen Programmiersprache entwickelt, die insbesondere im wissenschaftlichen Umfeld verwendet wird. Die Sprache wird an einigen Universitäten als primäre Programmiersprache gelehrt.

## Die ML-Familienmitglieder

Unter rund einem Dutzend Varianten sind die bekanntesten Vertreter von ML „Standard ML“ (im folgenden SML genannt), „Lazy ML“ und „Caml“. Caml steht für „Categorical Abstract Machine + ML“ und wurde am INRIA (Institut National de Recherche Informatique et en Automatique) in Frankreich von Gérard Huet in den Jahren 1984–85 entwickelt und 1990 unter Xavier Leroy zu Objective CAML (OCaml) erweitert. OCaml vereinigt funktionale, imperative und objektorientierte Sprachkonzepte. Lazy ML ist ein Dialekt von ML, der mit dem Grundsatz der strikten Auswertung bricht und Bedarfsauswertung einführt. Standard ML hingegen war Robin Milners Versuch 1984, die Sprachdialekte von ML zu vereinigen. Neben dem ML-Kern sind auch andere Ideen, z. B. die Funktionsdeklaration durch Muster der Programmiersprache Hope, in SML eingeflossen. Es gibt eine 1997 überarbeitete Version von SML, die in der Literatur meist „Standard ML’97“ genannt wird, um sie von der Ursprungsversion zu unterscheiden. Die Referenzimplementierung von SML ist Standard ML of New Jersey (SML/NJ).