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).
Literatur
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
Weblinks
- Standard ML of New Jersey (englisch)
- The OCaml Language (englisch/französisch)
- Chris Beach: <templatestyles src="Webarchiv/styles.css" />{{#if:20041012221419
| {{#ifeq: 20041012221419 | *
| {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20041012221419}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20041012221419}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: History of ML | {{#invoke:WLink|getEscapedTitle|History of ML}} | {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20041012221419|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.bath.ac.uk/~cs1cb/ML/index.htm}}
|| {{#if: || }}
}}{{#if: History of ML
| {{#if: {{#invoke:WLink|isBracketedLink|History of ML}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.bath.ac.uk/~cs1cb/ML/index.htm%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.bath.ac.uk/~cs1cb/ML/index.htm%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.bath.ac.uk/~cs1cb/ML/index.htm }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (englisch)