CarveScheme

書いておかないと時間が経って後でどうしようもなくなることが分かったので、断片でも書くようにする。

目標

  • 簡潔でメンテナンス可能なネイティブSCHEMEコンパイラ。フルの RnRS を実装する。n が幾つかは状況による。
  • SECD マシンになるか、"An Incremental Approach to Compiler Construction" のアプローチになるかは未決定。いまのところ後者。
  • ターゲットは Intel X86_64

中間言語

S-式で中間言語を導入する。 X86_64 の命令セットに近い、低レベル/無限個レジスタの表現とする。
COINS LIR を一時検討したが、複雑であることと型付きで抽象化されておりい今回のボトムアップのアプローチと合わないと判断して不採用。
単なるシンボルのリストにしていたが、CLOSのオブジェクトのリストにする途中。オブジェクトにしておくと表示を制御できるのと、エラー処理しやすいと期待。

仮想レジスタマシン

デバッグ用に上記の中間言語を実行するレジスタマシンを作る。

コード生成

レジスタ割り付けを行う。まだじゃっかん怪しく、バグが入っている可能性あり。
現時点ではあらかじめCで作った簡単なドライバがあり、makeコマンドで実行ファイルを生成。

GDB

デバッグGDBを利用する。Emacs のバージョンをあげたら M-x gdb が正常に動作しなくなった。調査中。