= と + を native call ではなく instruction にする - Scheme VM を書く
数値比較の 「=」手続きは、C言語の Object numberEqualProc(Object obj) にマッピングされている。
これを VM の instruction にすれば速くなるんじゃ?的なプロジェクトです。
(= 3 4 5)
のような呼出し例が考えられるけど、引数を2つに限定してあとは展開すれば良いよね。
accumulator とスタック上に置かれた値を比較して、結果を accumulator に置けば良かろう。
(= 3 a)
の場合だったら
(const 3 (argument (refer-local 0 (number-equal (next))))
と展開されれば良い。
(= 3 4 5)
は
(if (= 3 4) (= 4 5) #f)
と展開してからコンパイルしてあげれば良い。
リスト操作かわいいよリスト操作。
続いて + 。
(+ 1 2) => (const 1 (argument (const 2 (number-add (next))))) (+ 1 2 3) => (+ 1 (+ 2 3))
どちらも出来た。速度比較は次の記事へ。