Standard ML(しばしばSMLと略される)は、ML系に属する汎用の静的型付き関数型プログラミング言語である。強力な型システムと自動型推論によって、表現力と安全性を両立することを重視する。SMLのプログラムは簡潔で宣言的な書き方をとり、高階関数、パターンマッチング、代数的データ型を扱える。
主な特徴
- Hindley–Milner型推論とパラメトリック多相を備えた、静的で強い型付け。
- 代数的データ型と網羅的なパターンマッチングにより、明快で宣言的なデータ操作ができる。
- 構造、シグネチャ、ファンクタからなるモジュールシステムにより、抽象化と分離コンパイルを支える。
- 厳密評価、ガベージコレクション、例外、可変参照を備え、実用的なプログラミングに対応する。
- 「値制限」のような言語規則が、多相性と副作用の関係を制御する。
強力で形式的に定義された型システムと実用的なランタイムの組み合わせにより、SMLは堅牢なシステムソフトウェアの記述に向きつつ、形式的推論にも適している。
成立と発展
SMLは、エディンバラLCFプロジェクトの文脈で開発された元のML言語に由来し、主要な貢献者にはRobin Milnerとその同僚がいる。やがてコミュニティは標準化された方言へと収束した。文法と静的意味を正確に規定し、実装や研究の参照基準とするために、Standard MLの形式的な定義書が公表された。
用途と実装
Standard MLは、学術分野、プログラミング言語研究、ツール作成で広く用いられてきた。特にコンパイラの作成や、対話的定理証明器・証明支援系の一部(たとえばHOL系)でよく選ばれる。代表的な実装にはSML/NJ、MLton、Moscow MLがあり、性能、コンパイル戦略、対応プラットフォームが異なる。
OCamlのような他のML系言語と比べると、Standard MLは明快で形式的に定義された意味論と、影響力のあるモジュールシステムで知られる。その設計は後続の関数型言語に影響を与え、強い静的保証とモジュール化された抽象化が重要な場面で、今も教育や実用に使われている。