新旧VM比較 - Scheme VM を書く

新旧VMで速度が大分違うのでいろいろ比較する。
compiler.scm で wiki.scm のコンパイルをする。

項目 VM VM
実行時間 1.9sec 3.1sec
実行命令数 1339557 1159274
最大スタック使用量 409 930
FRAME作成回数 36921 34271
ENTER(let)作成回数 13888 0

これ以外に各命令の実行回数、Gaucheのプロファイル結果(gosh -ptime)を利用していろいろ調べた。
結論としては let のために導入した ENTER/LEAVE のスタック操作コスト、let を維持するために増えたレジスタ退避/復帰のスタック操作コストがそのまま動作速度に影響している模様。

これはつまり let の仕組みの部分はなくそうってことだな。