SMLのエコシステム(?)

κeenです。 どこかで紹介したつもりでしたが意外に書いてなかったのでSMLのツールとかそういうのを紹介します。

仕様

通称SML ‘97のThe Definition of Standard ML Revisedが現行の最新仕様です。最終更新は通称どおり1997年ですね。 もありますがGitHub版の方がアクセスが良いでしょう。

ポータル

SML Familyというところがあります。最終更新2016-04-04。大体の欲しい情報はここに書いてます。

コンパイラ

上記SML Familyに列挙されてます。一応口コミを書いておくと、以下が有名どころでしょうか

MLton: ソースはちょくちょく更新されてますが最終リリースは2013年。 実行速度が速い、拡張が多い、ランタイム表現も素敵と三拍子揃ったコンパイラですがwhole-program optimizationするためコンパイルはかなり遅いです。 Hello Worldするにも標準ライブラリごとコンパイルするので数秒かかります。

SML/NJ: 最終リリースは2017-10-16。 MLtonには劣りますがそれなりに速く拡張が(おそらく一番)豊富な処理系です。 ただしx86しかサポートしてないのとインタラクティブシステムがメインなので最近だとちょっと使いづらいかもです。

Poly/ML: 最終リリースは2917-11-27。 上記2つと比べて尖ったところはないですがピーキーなところもなく平均点を取るタイプのコンパイラです。 Isabelleはこれを使っています。

Moscow ML: 最終リリースは2014-08-28。 Caml lightのフロントエンドをSMLに仕立てたコンパイラです。OCaml並みに使いやすいんじゃないですかね。

SML#: 最終リリースは2017-08-31。 東北大で開発されているコンパイラです。実用的な処理系を目指して作られています。PolyやMoscowと何が違うのと言われると苦しいが個人的によく使います。 たまに謎拡張が入ります。

エディタ

EmacsとかVimとか古くからあるものはシンタックスハイライトとインデンティングくらいはサポートしてると思います。私はEmacsを使ってます。

ドキュメント

標準ライブラリ扱いのBasisのドキュメントがあります。

パッケージマネージャ

smackageというのがあります。最終更新 2016-03-07。 登録数は…21。正直smackageに頼るよりGitHub漁ったほうが良いです。

ビルドツール

smbtというのがあります。最終更新 2015-09-16。 一応処理系に依存せずにビルドを宣言的に書けるはずですがあまり期待せずに各処理系推奨のビルド方法を使ったほうが無難。 昔サンプルを書いたことがあるので適当に参考にして下さい。

テスト

SML#付属のSMLUnitがよさそう?

Lint

SML-Lintというのがあります。最終更新2013-03-24。

未来

流石に仕様が1997年から変わらないのはきついので有志で仕様の拡張をしようと言うプロジェクトがあります。 その名もSuccessor ML。 最終更新2017-07-26。 細かなシンタックスシュガーの追加やプレリュードの追加などが入っているようです。

同じくBasisを拡張しようとする動きもあります。最終更新 2016-08-16。 これは今見つけたので追えてませんがEitherが入ってたりするよう。

終わりに

SMLのエコシステムらしいものはありませんでしたね。 自分のブログざっと漁った感じ過去にこういうの書いてないらしいんですが本当ですかね?すごい既視感が…

Written by κeen