スタック消費量を調べる - Scheme VM を書く

VM で compiler.scm を実行したらスタックオーバーフローになったので原因を調べる。古いVMでは起きなかったので設計ミスやバグが予想される。
まずは VM に仕掛けをほどこし、最大でスタックをどれだけ消費したかを実行後に出力するようにした。新旧 VM にいくつかのコードを食わせてスタック消費量を比較。

項目 VMの消費量 VMの消費量 備考
簡単な100回再帰 8 12 FRAME2回分の差
wikiのコード 37 68
compilerでwikiコンパイル 409 930
A正規化したcompilerでwikiコンパイル 391 2301

結果的には

  • FRAME 命令で以前と比べてスタックを多く消費するようになった
  • A正規化で let1 がたくさん出てくる

の2つが原因で大きなバグではなさそう。