コンパイラ/VM書き換え完了 - Scheme VM を書く

Pass1 と Pass3 をあわせてコンパイラScheme のコードで約1000行。
この大改造で

になった。


この改造は速度的に向上するであろうという目的で行われたが速度はどうであろうか。
正確な測定ではなく速報値だが

  • コンパイラが 50% 遅くなった
  • 実行が 10 % 速くなった
  • トータルの実行時間が 8-9% ほど速くなった

という状況。


今は GaucheコンパイラVM が動いているが、どちらも C++ で動くようになると特性も変わることが予想される。


さて作業が重かったので経緯を忘れてる。ChangeLog メモによれば

  • Pass2 の実装中に欠陥が見つかる
    • Pass1 で変数の区分けを free, local, global としてしまうと矛盾が生じる
    • local, global の2種類に分けるように変更が必要
  • ついでにコンパイラの構造を複雑にしている問題にも対処
    • let を lambda と同じく display 化対応する

という経緯だった。
じゃあ Pass2 に戻って最適化を続ければ良いのだな。さてがんばりましょう!。