まあそんなことより、普通に負けててショックなんですが

yt@THALES /d/Programming/tests/grass
$ time let/let.byte.exe quine2.grass > z2

real    0m1.712s
user    0m0.010s
sys     0m0.010s

yt@THALES /d/Programming/tests/grass
$ time let/let.opt.exe quine2.grass > z1

real    0m0.151s
user    0m0.020s
sys     0m0.000s

↑Glid↓私の

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine2.grass > z3

real    0m2.003s
user    0m0.010s
sys     0m0.010s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine2.grass > z4

real    0m0.171s
user    0m0.010s
sys     0m0.010s

パーサを見直した。

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine2.grass > z5

real    0m1.982s
user    0m0.010s
sys     0m0.010s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine2.grass > z6

real    0m0.161s
user    0m0.020s
sys     0m0.000s

関数適用のときスタックを辿るのを関数と引数まとめてやってしまうようにした。

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine2.grass > z5

real    0m1.562s
user    0m0.020s
sys     0m0.000s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine2.grass > z6

real    0m0.171s
user    0m0.020s
sys     0m0.000s

関数を作るところでfunで書いていた部分を部分適用。

yt@THALES /d/Programming/tests/grass
$ time grass.byte.exe quine2.grass > z5

real    0m1.532s
user    0m0.020s
sys     0m0.000s

yt@THALES /d/Programming/tests/grass
$ time grass.opt.exe quine2.grass > z6

real    0m0.160s
user    0m0.020s
sys     0m0.000s

バイトコードはいいとして……opt版が速くならない……。(小手先の最適化しかしてないくせにどの口が)