Standard ML」カテゴリーアーカイブ

バイトコードVMのための調査

LunarMLの今年の目標に「REPLとインタープリターを実装する」というのがある。これまではLunarMLをLuaやJavaScriptをターゲットとするコンパイラーとして実装してきたけど、

  • REPLによるインタラクティブな実行
  • 書いたSMLコードを直接実行(一旦LuaやJavaScriptコードを生成するのではなく)

できると嬉しいよね、という話だ。(REPLを備えたStandard ML処理系は色々あるが、LunarMLとコンパチブルなREPLが欲しければ自分で作るしかない。)

つまりインタープリターだが、構文木を走査するインタープリターは遅そうだ。効率的な実行のためには、バイトコードとVMを設計したい。

バイトコードへのコンパイラーはSMLで、VM(ランタイム)はSMLによる実装とC言語による実装の両方を用意することをイメージしている。

C言語による実装を用意することで、高速な実行が期待できるだけではなく、「コンパイル済みバイトコード+C言語で書かれたランタイムによるbootstrap問題の解決」もできる。つまり、現状の「LunarMLを動かすためにはSMLコンパイラーが必要」という状態から「CコンパイラーまたはSMLコンパイラーがあればLunarMLが動く」という状態にできる。

ではバイトコードと抽象機械はどうやって設計するか?

続きを読む

LunarMLが自身をコンパイルできるようになった

LunarML進捗報告、号外です。前回の記事

からそんなに時間が経っていませんが、「自分自身をコンパイルできるようにする」という重要なマイルストーンを達成したので報告します。

続きを読む

LunarML進捗・2022年4月

月刊LunarML進捗報告です。前回は

で、3月はHaskellの記事を書くのに忙しかったので休刊でした。

今月の進捗を一言で言うと、JavaScriptバックエンドの実装を進めました。

面白いと思った方はGitHubにスターをつけてください:

続きを読む

Successor MLの話

Successor MLとは

Standard MLの仕様は、1997年に出版されたThe Definition of Standard ML (Revised)が最後の版である。しかし、その後も仕様を修正・改良しようという努力が断続的に行われており、Successor MLと呼ばれている。

現行の仕様は以下のGitHubリポジトリーで管理されている:

https://github.com/SMLFamily/Successor-ML

現在のLaTeXではそのままでは処理できないので、https://github.com/SMLFamily/Successor-ML/pull/46の変更を参考にされたい。また、電子的に閲覧したい場合はdefinition/root.texの

%\usepackage{hyperref}

をコメント解除すると良いだろう。ClutTeXを使うと

cd definition && cluttex -epdflatex --bibtex=bibtex root.tex

で処理できる。

ゼロ年代の古いWikiは以下のリンクから辿れる:

https://smlfamily.github.io/successor-ml/

続きを読む