Standard ML
# Standard ML

Standard ML (SML) ist eine von ML abstammende funktionale Programmiersprache mit einigen imperativen Merkmalen (zum Beispiel im Bereich File IO).

ML-Schöpfer Robin Milner schlug SML 1983 vor, um die verschiedenen Dialekte von ML zu standardisieren. Die Sprache wurde von 1984 bis 1988 entwickelt und schließlich 1990 von Robin Milner, Mads Tofte und Robert Harper formalisiert. 1997 wurde mit SML'97 eine Revision der Sprache veröffentlicht, die neben einigen Vereinfachungen auch eine SML-Basisbibliothek enthält.

Wichtige Merkmale von SML sind unter anderem die statische Typisierung, Polymorphie auf Funktions- und Datentypsebene, automatische Speicherbereinigung sowie strenge Auswertung und Ausnahmebehandlung. Außerdem unterstützt SML Funktionen höherer Ordnung, Module und sogenannte Funktoren, die hier parametrisierte Datentypen bezeichnen.

Eine Besonderheit von SML ist, dass die Sprache vollständig formal definiert ist. Dadurch können wichtige Eigenschaften der Sprache mathematisch bewiesen werden.

## Programmbeispiele

### Rekursive Berechnung der Fakultät

Die Fakultät einer natürlichen Zahl kann man in SML mittels folgenden Programms berechnen:

### Rekursive Berechnung der Fibonaccizahlen

Die n-te Fibonacci-Zahl kann man in SML mittels folgenden Programms berechnen:

## Implementierungen

Es existieren verschiedene Compiler für SML, die entweder Bytecode oder Maschinencode generieren. Die Referenzimplementierung ist SML/NJ. Sml2c ist ein besonderer Compiler, der SML in C Code übersetzt.

* HaMLet
* MLton (stark optimierender Compiler)
* Moscow ML(alte Webseite verfügbar unter http://www.itu.dk/~sestoft/mosml.html)
* Standard ML of New Jersey
* Alice ML
* Poly/ML
* sml2c (C Code)
* SML.NET (Bytecode)
* Poplog (IDE für Forschung und Lehre im Bereich Künstliche Intelligenz)
* CakeML
* SOSML
