Entries from 2008-02-07 to 1 day

β変換 その7 - Scheme VM を書く

大きめのコードで不要 let がきちんと動くようになった。 動かしてみて分かったのですがなかなか不要な let はないです(笑)。 一つ、はまったのが以下の入れ子の let の場合。正解は let が2つとも削除されて定数0 = ($CONST 0) なのだけど。 (let1 a 0 (l…

vector-ref / vetor-set!

Gauche拡張で vector-ref に3つ目の引数 fallback がある。 なので vector-set! のつもりで、誤って vector-refと打ち間違えても (vector-ref v 0 'a) とかやっても引数の個数違いでエラーにならず気づきにくいので注意。 もちろん fallback がある方がうれ…

β変換 その6 - Scheme VM を書く

単純な例で不要 let が削除されるようになった。 (let ([a 0]) a) (let ([a 0] [b 1]) b) うまくいかない例 (let ([a 0] [b 1]) a b) を調べよう。→ $SEQ の body の中を最適化していないからだった。 (let ([a 0] [b 1] [c (func 0)]) a b) ; => 初期値は $…

Code Reading すすまないなぁ

進んでも0.1%とかだとやる気が続かない。 うーむ。

インライン展開 その1 - Scheme VM を書く

インライン展開時できるかの判断に手続きが self recursive かどうかという情報が必要。 最適化で IForm をなめるときにクロージャを記録する仕組みをいれた。