ボトムアップ(2)
compile.scm を追いかける前の準備。shiro さんに教えてもらったVMへのフラグを使うと、最適化前の命令列が手に入る。これはとてもいい。
gosh> (vm-dump-code (compile-pass3 (compile-pass1 '(+ 1 2)))) main_code (name=%toplevel, code=0x5cd590, size=3, const=0, stack=0): args: #f 0 CONST 3 2 RET #<undef> gosh> (vm-compiler-flag-set! SCM_COMPILE_NOINLINE_LOCALS) gosh> (vm-compiler-flag-set! SCM_COMPILE_NOINLINE_GLOBALS) gosh> (vm-dump-code (compile-pass3 (compile-pass1 '(+ 1 2)))) main_code (name=%toplevel, code=0xb9578, size=10, const=1, stack=5): args: #f 0 CONST 1 2 PUSH 3 CONST 2 5 PUSH 6 GREF #<identifier gauche.internal#+>; + 8 TAIL-CALL(2) ; (+ 1 2) 9 RET #<undef>
まだまだ知識が断片的だけど。
余談。検索すると Maeve の scinfaxi さんの日記が見つかった。3年前かぁ。
この shiro さんのコメントは記憶に残っているなぁ。この記事は一度以上読んでいて、しかし意味を理解できていなかったようだ。少し理解が追いついてきたか。