Scheme Compiler の勉強 (5) - immediate constants

  • とりあえず、 llvmコンパイラが(とりあえず即値を扱う上では)若干簡単のようだ。とりあえずこれで少し進めて、 llvm の複雑さが重荷になってきたら拘泥せず戻ってこよう。
  • "1.2 immediate constants" にカタをつけよう。つまり runtime.c と compiler.scm に手を入れ、 tests-1.2-req.scm が通るようにしよう。
  • これで #t, #f, 30bit の fixnum, character が扱える(だけ)のコンパイラができたことになる。
  • 気をつけないと何をやっているか分からなくなるなぁ。scheme 式を与えると(今は数値やcharのみだけど)適当な llvm アセンブラを出力する、ことをやっている。

runtime.c 側はあくまで表示するだけ。つまりちゃんと意図通りの 32bit データが C 側で認識されているかを確認するために書いている。

  • tests-1.2-req.scm が通った。おお。「正解」が文書中に無いので若干不安だけど、test がちゃんとあるのはとてもいい。現時点でちょっと怖いのは、compiler.scm と runtime.c の双方を間違って実装してしまい、たまたま結果だけあっている、という状態。
  • #f, #t, (), \tab, etc は、runtime.c で特別扱いしている。
  • まだ llvm は単なる instruction set が定義されてるマシン、としてしか使っていない。本当はもっと面白い機能がいろいろあるらしいけど、当分は無視。
  • 1.3 Unary primitives ではコンパイラーをリファクタリングしつつ、プリミティブな手続きをいくつか定義する。さて、さらに面白くなるか、自分の力量を超えてしまうか。

続く。