TL;DR

コンパイル時の型検査と型推論を備えた、汎用でモジュール化された関数型プログラミング言語。ML の方言の 1 つで、仕様書 The Definition of Standard ML による形式的な定義を持つ。

なぜ必要か

Wikipedia によると、広く使われている言語の中で、形式的な仕様を持つ点が独特である。仕様書は 1990 年に Robin Milner、Mads Tofte、Robert Harper が書き、1997 年に David MacQueen を加えた改訂版が出た。発表によると、この仕様書は言語の振る舞いを形式的な推論規則で定め、実装の方法は定めていない。

仕組み

Wikipedia によると、主な機能は次のとおりである。

  • 型注釈なしで型を推論する
  • datatype で代数的データ型を定義し、パターンマッチで処理する。コンパイラは網羅性と冗長性を検査する
  • raise と handle による例外
  • シグネチャ(インタフェース)、ストラクチャ(モジュール)、ファンクタ(ストラクチャからストラクチャへの関数)からなるモジュールシステム

例

SML Family には、SML/NJ、MLton、Poly/ML、MLKit など、多くの処理系が並んでいる。Wikipedia によると、コンパイラ、プログラミング言語の研究、定理証明系の開発でよく使われ、HOL4 や Isabelle は SML で書かれている。

注意点

純粋な関数型言語ではなく、副作用を持つ機能もある。

関連

出典