読者です 読者をやめる 読者になる 読者になる

本当は怖い情報科学

情報系大学院生の趣味&実益ブログ。

[電車の中でコツコツ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>

こりゃおもしれー

【広告】