Make a Lispをやってみている
はじめに
後期に入ってからどうも体調が優れず、もう大体3ヶ月ぐらいまともにモノを書けてない。
リハビリを兼ねて、RustでそれなりにしっかりしたVM式のLisp処理系を書いてみることにした。
Lispは一番実装しなれてるアプリケーションなので、肩慣らしに丁度いいだろうと判断。
malというClojureに似た小さなLispを実装する。
malにはステップバイステップの実装ガイドがあり、すでにかなり多くの数の言語で実装されている。
参考になる実装がたくさんあるので、挫折しにくそう。ガイドもあるのでコードを書く負担も軽い。
malのガイドは素朴なインタプリタを実装するもので、VMまでは扱わない。VMの実装はちょっとしたチャレンジになる。
sole
https://github.com/takoeight0821/sole
単純なリーダー(いわゆるパーサー)を実装済み
今はchumskyというRustのパーサコンビネータライブラリを使って実装している。
将来的にはtree-sitterを使ったインクリメンタルパースをしたい。
VMはとりあえずSECDマシンをベースにしようと考えている
かなり古くからあるスタックベースのVM。スタック、環境、コード、ダンプの4つの連結リストを使ってプログラムを実行する。
関数型言語をターゲットにしている。後世の関数型言語処理系に大きな影響を与えた。