named let と定数畳み込みを実装 - Scheme VM を書く

named let を letrec に変換するようにした。今まではここには書けないような悲惨な方法で named let を実現していたのだがやっと排除できた。
これで約10%速くなった。
さて次は定数畳み込み。→一瞬で実装できてしまった。
$CONST な引数だけだったら事前に計算して結果を $CONST にすれば良い。


コンパイラ書き直しといろいろな最適化は一段落したので以前のバージョンとの性能比較をしてみた。
fibや竹内関数で15-25%速くなったようだ。
相変わらず VMGauche 上で動いているので C++ に移植した時が本当の勝負。
あとコンパイルに要する時間はそこまで大きな変化がない。(昔から遅いので最適化が占める割合はとても小さい)


次の一手はコアに対する影響が高そうなR6RS特有機能の絞り込み。
ざっと眺めてみた感じでは

あたりが早めに手をつけておいた方が良さそう。