>>836
>なるべくセルを使わずスタックで扱う様に気を使う。
>小さい数値を即値で表現する様にし、関数の引数をスタック上に作る。
>末尾呼び出しのフレーム除去等を管理し、環境も最初はスタック上に
>構築して、クロージャや継続フレームの生成段階で初めてヒープに移す。
>このとき、スタック上の環境はヒープへのリンクに変更する。

gaucheもそうやってるよ。gaucheの「コンパイラ」はかなり単純。

上の方針でのボトルネックのひとつは、クロージャや継続を「生成」
する時点でヒープへのコピーが発生すること。使われ方によっては
ファーストクラスである必要のないクロージャや継続がたくさん
あるので、ヒープへ移すのはlazyである方が良い。

クロージャに関してはフロー解析をすればある程度最適化できる。
継続でコピーをlazyにやる方法は"copyless continuation"で
探せば数本の論文が見つかると思う。

gcを自分で書くのなら、Henry BakerのCheney on the MTAの方法
も使えるかもしれない。オブジェクトは全てスタックアロケート、
手続き呼び出しは全て継続渡し、スタックがいっぱいになったらgcで
生きてるオブジェクトだけheapに移動、という方法だ。
chickenが使っている。

既存の処理系のコードを読んで、適宜論文を参照するようにすると
色々勉強になる。