久しぶりの進捗報告です。
前回の記事:
続きを読む私は現在、Standard ML処理系であるLunarMLを開発しています。しかし、Standard MLはほぼ進化の止まった言語です。一応Successor MLという取り組みがありますが、準拠を目指している処理系は多くはありません。
LunarMLが成功するためには、言語標準という枠に囚われずに「モダン」な機能を積極的に取り入れていくことが重要だと考えられます。つまり、拡張機能です。
Standard MLに足りない機能は何でしょうか。LunarMLにどんな拡張を入れれば、使いやすい言語になるでしょうか。
過去の記事ではすでにいくつか機能を挙げ、いくつかは実際に実装しました:
実装済みの拡張機能については以下に説明を書いています:
ここではもうちょっと色々アイディアを出してみます。
続きを読むこの記事では、私が数年前から作っているStandard ML処理系「LunarML」の今年の進捗を振り返ります。
これまでの進捗報告記事は以下です:
LunarMLの今年の目標に「REPLとインタープリターを実装する」というのがある。これまではLunarMLをLuaやJavaScriptをターゲットとするコンパイラーとして実装してきたけど、
できると嬉しいよね、という話だ。(REPLを備えたStandard ML処理系は色々あるが、LunarMLとコンパチブルなREPLが欲しければ自分で作るしかない。)
つまりインタープリターだが、構文木を走査するインタープリターは遅そうだ。効率的な実行のためには、バイトコードとVMを設計したい。
バイトコードへのコンパイラーはSMLで、VM(ランタイム)はSMLによる実装とC言語による実装の両方を用意することをイメージしている。
C言語による実装を用意することで、高速な実行が期待できるだけではなく、「コンパイル済みバイトコード+C言語で書かれたランタイムによるbootstrap問題の解決」もできる。つまり、現状の「LunarMLを動かすためにはSMLコンパイラーが必要」という状態から「CコンパイラーまたはSMLコンパイラーがあればLunarMLが動く」という状態にできる。
ではバイトコードと抽象機械はどうやって設計するか?
続きを読む