2010/01/08
JIT コンパイルが再帰して困った
JIT コンパイラが Scheme で書かれているので、JIT コンパイラ自身も JIT コンパイルされる可能性があることに気付いた。そうすると
- 手続き A を JIT コンパイルしようとする。
- JIT コンパイラ中の手続き B が閾値を超えて call される。
- 手続き B を JIT コンパイルしようとする。
- JIT コンパイラ中の手続き B が閾値を超えて call される。
- 手続き B を JIT コンパイルしようとする。
と繰り返されてしまう。同じ手続き B が再帰的に何回も JIT コンパイルされるのが問題なので、手続き B にコンパイル中フラグをつければ良いかと思ったがそうも行かない。
例えば以下のような場合を考えれば分かる。
(define (jit-compile x) ... ... (map (lambda (x) (+ x 2)) lst) ...)
手続き B が (lambda (x) (+ x 2)) だとすると jit-compile の呼び出し毎に、新しい手続きがアロケーションされるので、ソースコード上は同じ手続きでも実行時には別の手続きなのだ。(コンパイラが賢ければ、(lambda (x) (+ x 2)) を静的にくくりだす事も可能だがそれはまた別の話なので置いておく)
上記のような事情から、JIT コンパイラは再帰的に起動しない。グローバルで JIT コンパイル中フラグを持つ。という方針にしようかと思う。ただし欠点があって良く呼ばれるであろう JIT コンパイラ自身が JIT の恩恵を受けられない。
もっと良い方法はないだろうか。
Permalink | コメント(8) | トラックバック(0) | 23:49
![]()
トラックバック - http://d.hatena.ne.jp/higepon/20100108/1262962179
リンク元
- 45 http://pipes.yahoo.com/pipes/pipe.info?_id=7ed2910a6358c42a7305fae463b19704
- 16 http://www14.cds.ne.jp/~not/antenna/
- 10 http://twitturls.com/
- 8 http://www.google.co.jp/reader/view/
- 8 http://www.monaos.org/
- 7 http://q.hatena.ne.jp/1244385392
- 6 http://www.diffbot.com
- 5 http://practical-scheme.net/wiliki/rssmix.cgi
- 5 http://www.google.co.jp/search?q=ひげぽん&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&client=firefox-a
- 4 http://d.hatena.ne.jp/
Profile
Mona OS - Free operating system
Contact
Search
Books
Articles
- 過去のおすすめ本一覧
- ハッカー養成塾:ハッカーへの遠回り
- 関数型言語の勉強の連載
- 一人読書会
- Ubuntu 7.10 Gutsy インストール
- Ubuntu 7.10 Gutsyへアップグレード
- Ubuntu 6.06 LTSインストール
- Ubuntu 6.10 Edgy インストール
- 計算機プログラムの構造と解釈
- Modern C++ Design読書会
- はてな退職のお知らせ
- プログラマとして最低限身につけるべき知識
Reading Gauche
Books
Swimming(m)
PV
23360560


