Scheme Compiler の勉強(33)

いままで(未完成の)テキストを参考にやっていたけど、改めて論文の方(「An Incremental Approach to Compiler Construction」)に従うように後戻りした。
まずは Integers, Immediate Constants, Unary Primitives, Binary Primitives, Local Variables, Conditional Expressions, まではほぼ一直線。変更もほとんど名前程度を会わせて、確認が主体。Binary Primitives では、論文ではスタックを使うようになっている。LLVM IR でどうするかしばらく迷う。LLVM の機能をほとんど使わないという手も考えたが、結局今まで通りスタックは使わずにすませる。
そして Heap Allocation 。やっぱりひどい勘違いしていた、、、とても説明しづらいが恥ずかしい間違い。tagged pointer の意味を完全に間違えていた。それでも再び cons まで動くようになった。
次は Procedure Call, Closures, Proper Tail Calls etc だ。今度こそ。

おぼろげなまとめ。Incremental ... では、アセンブリに近いところから組み立てていくボトムアップ的アプローチ。逆は scheme をより機能の限定的な中間言語に落とし、CPS 変換などでさらにアセンブリに近づけていく、というアプローチ。

追記;
うわ、やっぱりまだ tagged pointer を理解できていないらしい。。

追記2;
よし、今度は理解した、多分。メモリの扱いって面倒だなぁ。