"An Incremental Approach to Compiler Construction" again

構造

  1. Common Lispコンパイラを書き、X86 または X86_64 アセンブラを生成する
  2. gccコンパイルし、共有ライブラリを作る。
  3. gcc で実行ファイルを作る。
  4. テストケースを書く
  5. gdb で実行し、問題があればデバッグする。
  6. 機能を拡張し、繰り返し

論文で使用されている X86 命令

  • movl データ転送命令
  • ret
  • addl 加算命令
  • cmpl 比較命令
  • sete 比較命令
  • sall 算術左シフト
  • orl 論理和命令
  • andl 論理積命令
  • jmp 無条件ジャンプ
  • je, jne 条件付きジャンプ
  • call 分岐命令
X86_64 命令

"An Incremental Approach to Compiler Construction" では、X86 アーキテクチャを前提にしている。X86_64 では使用する命令セットも関数への引数の渡し方も若干異なる。

CFFI

論文では、schemeアセンブラを生成し、ランタイムはC で書かれている。ランタイムとオブジェクトファイルをリンクし、実行ファイルを作成し、実行する。

GDB

GDB を使えば、作成した実行ファイルをステップ実行して、レジスタの状態を参照したりプリントしたりしながら進めることができる。これで二つの対話環境、Common Lisp の REPL と GDB を使うことになる。ターゲットマシンが Lisp マシーンであれば、Common Lisp だけでいいのだが残念なことだ。

link

Draft Version 0.99.5" 仕様書。