Toy VM (9)
細々と進めていた内容をまとめよう。
SECD マシンから処理系のリストを取り常に動くものを改良していこう、という形で進めてきた。が、今となっては進め方は逆にすべきだったかもしれない。
つまり、タグ付きポインタで自前のリストを実装し、そのうえに SECD マシンを作るというやり方のほうが、シンプルで良かったかもしれないのだ。
さて、反省は反省として現状を書いておこう。
- メモリは make-array で保持するようになった。signed-byte 32 のワードの配列だ。これで処理系のコンシングは(コンパイル時をのぞけば)0になった。
- vm 命令はDUM,RAP 以外は実装済み。vm に対するconsをconsと書けるようになったので、見た目はschemeで書いたのと変わらない。
;; ビルトインのvm命令+ の定義。 (def-insn + (vm) (with-accessors ((sp sp-of)) vm (let* ((a (car sp)) (b (car (cdr sp))) (res (+ a b))) (setf sp (cons res (cdr (cdr sp)))))))
- ユニットテスト。まだまだ足りない。
- gc。コピーGCを実装しようと苦心しているところ。要は再帰的にリスト構造をコピーするだけ、なんだけど難しい。
- github http://github.com/cranebird/secd ひとさまに見せれるような状態ではないけど置いておく。
今後の方針を書いておこう。