昨日、CM.make が失敗するというISSUEを建てたが、それの原因がわかった。

発生していた問題は、分割コンパイルしているところで、StandardMLのBasis Libraryがautoloadされておらず、unbound structure: X in path ...というエラーメッセージが表示され、コンパイルができなかったことである。

原因と対処方法

SMLのライブラリはかなり破壊的な変更が加えられているので、『Standard ML入門』が書かれていた時期とはライブラリーの基本的な関数の引数やその型が変わっていることが多く見受けられる。

そこで、CMの新しいライブラリのpdfを読んで、そこに含まれるサンプルコードを見れば、以下のような記述がある。

Group is
    xxx.sml
    yyy.sml

    $/basis.cm

上記の通りに設定すれあ、分割コンパイルは成功した。

残っている疑問点

なお、CM.Library.known()で出力されるリストにはbasis.cmが含まれているし、失敗するところでのautoloadにも表示されているが、なぜかは不明。

教訓

公式ドキュメントを読もう。

sml