SML#の2021年トピックを紹介

# はじめに

[SML#コンパイラ](https://smlsharp.github.io/ja/about/features/)はStandard MLの定義に従った実装の1つです。
このSML#は日本生まれ日本育ちのプログラミング言語です。
1993年に沖電気工業の研究所で開発が始まり、北陸先端科学技術大学を経て東北大学にて研究開発が続いています。
2012年に晴れてバージョン1.0.0がリリースされ、現在の最新バージョンは4.0.0となっています。

そんなSML#、私の好きな言語の1つでもあります。
ふと2021年を振り返ると、SML#にとって大きな変革があった年だと思います。
そこで本稿では、SML#の2021年トピックを紹介します。

内容の多くは[ニュース - SML#プロジェクト](https://smlsharp.github.io/ja/news/)からの焼きましとなっています。

# 1/4 SML# 3.7.0リリース

2020/5/29にリリースされた3.6.0以来のリリースです。
実験的機能としてexistential type variable declararionが導入されました。
`_dynamiccase`を使って、多相型の値を特定のスコープ内で消費するのを強制できるようです。

```sml:'aを_dynamiccase外に出そうとするとエラー
$ smlsharp
SML# 3.7.1 (2021-03-15 09:13:25 JST) for x86_64-pc-linux-gnu with LLVM 10.0.0
#  fun apply x = _dynamiccase x of {'a} (f:'a -> int, x:'a) => f x;
val apply = fn : ['a. 'a Dynamic.dyn -> int]
#  fun apply x = _dynamiccase x of {'a} (f:'a -> 'a, x:'a) => f x;
(interactive):2.38-2.62(128) Error:
  (type inference 092) User type variable cannot be generalized: 'a
```

SML# 3系はJSONサポート、動的型サポート、DB連携の強化、などが中心に行われてきました。
より実用的なプログラミング言語を意識しているのかなと思います。

また、3.1.0-3.6.0に同梱のJSONパーサに脆弱性が発見され、3.7.0へのアップデートが推奨されています。

# 3/15 SML# 3.7.1リリース

バグ修正とLLVM12対応が入りました。

# 4/2 SML# のライセンスがMITに変更

[MITライセンスに変更します - SML#プロジェクト](https://smlsharp.github.io/ja/news/2021/04/02/relicensing/)、にあるようにソースがMITライセンスになりました。
以前は3条項BSDライセンスをベースにしたSMLSharpライセンスでした。
ライセンスは難しく、OSS利用時の難点です。
より一般的なライセンスになったことで、利用がより楽になったと思います。

# 4/6 SML# 4.0.0リリース

上記のMITライセンスへの変更と、下記のプロジェクトの移行が通知されました。
またLLVM11.1対応が入りました。

# 4/7 SML# プロジェクトのGitHubへの移行が完了

SML#の開発がついにGitHubで公開されるようになりました。

**ここから追記**
プロジェクトの全貌は [SML# Project](https://github.com/orgs/smlsharp/repositories) が見やすいです。
**ここまで追記**

今までSML#のソースは公開されていましたが、開発レポジトリは非公開でした。
また、バグ報告やパッチの窓口はメールでした。
それが今ではGitHub上でIssue/PRを受けて入れいます。
合わせてSML#プロジェクトのウェブページも、[東北大学のサーバ](https://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/)から[GitHub Pages](https://smlsharp.github.io/ja/)に移動しました。


同時に、SML#について情報交換や議論ができるフォーラムも開設されました。

- [SML#日本語フォーラム](https://github.com/smlsharp/forum_ja/discussions)
- [SML#英語フォーラム](https://github.com/smlsharp/forum/discussions)

日本語フォーラムがあるのは、英語が苦手な自分にはたいへん助かります。

実は、以前からGitHubにsmlsharpというレポジトリがありました。
これは私を始めとするSML#ユーザによる非公式レポジトリでした。
SML#のリリースがあるたびに、メンバーがちまちまとコミットしていました。
非公式レポジトリでしたが、SML#開発者の1人である上野さんがメンバーに入っており「ときどきIssue覗くよ」という運営でした。
以前の非公式なGitHubは[Unofficialブランチ](https://github.com/smlsharp/smlsharp/commits/unofficial)として残っています。

# 4/14 書籍「SML#で始める実践MLプログラミング」発売

<a href="https://www.amazon.co.jp/SML-%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8B%E5%AE%9F%E8%B7%B5ML%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%A4%A7%E5%A0%80-%E6%B7%B3/dp/4320124715?_encoding=UTF8&qid=1639639934&sr=8-3&linkCode=li2&tag=blackthief-22&linkId=14f9a03ebe7dc911940343bb1db8974c&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4320124715&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=blackthief-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=blackthief-22&language=ja_JP&l=li2&o=9&a=4320124715" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

大堀淳先生と上野雄大先生によるSML#の新しい本がでました。
SML#を使ったプログラミングの基礎から始まり、オセロゲームやグラフ描画のような実践的な内容まで網羅しています。
特に、演習問題にSML#のモジュールファイルからインタフェースファイルを生成する問題があり、「それ公式ツールでほしいやつ！」と思うくらいに実践的でした。

# 11/11 書籍「プログラミング言語Standard ML入門 改訂版」発売

<a href="https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EStandard-ML%E5%85%A5%E9%96%80-%E6%94%B9%E8%A8%82%E7%89%88-%E5%A4%A7%E5%A0%80-%E6%B7%B3/dp/4320124804?pd_rd_w=0zsdj&pf_rd_p=949e26f5-c2ef-4c96-bfde-49d7614d0317&pf_rd_r=NG5BP3EZ0AZP4G6SZN1G&pd_rd_r=686937d5-df5e-47c8-a2b9-6f3054dd437c&pd_rd_wg=wfkDB&pd_rd_i=4320124804&psc=1&linkCode=li2&tag=blackthief-22&linkId=5f096ac34a69df8b700f0031d2ed14ea&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4320124804&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=blackthief-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=blackthief-22&language=ja_JP&l=li2&o=9&a=4320124804" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

以前からあったSMLの書籍が、改訂版としてリニューアル発売しました。
誤字脱字のや古い情報の修正、SML#最新版への追従などが行われたようです。
先の書籍と比べると、プログラミングの基本をより丁寧に解説した書籍になっています。
関数型プログラミングに初めて触れてみたい、という方におすすめできる書籍です。

# おわりに

日本生まれ日本育ちのSML#が今年はGitHubで公開され、今後の躍進がますます楽しみです！

https://twitter.com/exoego/status/1469165493240360961