Meta Language (ML) beschreibt eine Familiefunktionaler Programmiersprachen mit statischerTypisierung,Polymorphie,automatischer Speicherbereinigung und im Allgemeinenstrenger Auswertung. ML ist allerdings keine rein funktionale Sprache wieHaskell, sondern erlaubt an manchen Stellen auchimperative Konstrukte und Wirkungen, beispielsweise für Dateizugriffe.
ML wurde1973 vonRobin Milner an derUniversität Edinburgh als Teil einesTheorem-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.
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 amINRIA (Institut National de Recherche Informatique et en Automatique) in Frankreich vonGérard Huet in den Jahren 1984–85 entwickelt und 1990 unterXavier Leroy zuObjective CAML (OCaml) erweitert. OCaml vereinigt funktionale, imperative undobjektorientierte Sprachkonzepte. Lazy ML ist einDialekt von ML, der mit dem Grundsatz der striktenAuswertung bricht undBedarfsauswertung einführt. Standard ML hingegen warRobin Milners Versuch 1984, die Sprachdialekte von ML zu vereinigen. Neben dem ML-Kern sind auch andere Ideen, z. B. die Funktionsdeklaration durchMuster der ProgrammierspracheHope, 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 istStandard ML of New Jersey (SML/NJ).