[電車の中でコツコツScheme処理系を書く日記] 7駅目
時間がないので移動電車の中でコツコツScheme処理系を書いています。現在はVM・コード生成。
コード生成の部分でちょっと悩むところがあり、Gaucheのソースを読んでました。
Gaucheの起動オプションで、-fdebug-compiler
というのを発見。
式の評価時に、生成/実行されたバイトコードを見ることができます。
$ gosh -fdebug-compiler --- goshの初期化処理のバイトコードが大量に表示されるので省略 --- gosh> 3 main_code (name=%toplevel, code=0x9f0d760, size=2, const=0, stack=0): args: #f 0 CONSTI(3) 1 RET 3 gosh> (if #t (display "foo")) main_code (name=%toplevel, code=0x9e91c58, size=10, const=2, stack=4): args: #f 0 CONST #t 2 BF 9 ; (if #t (display "foo")) 4 CONST-PUSH "foo" 6 GREF-TAIL-CALL(1) #<identifier user#display>; (display "foo") 8 RET 9 CONSTU-RET foo#<undef>
こりゃおもしれー