土曜日の休みをはさんで、また朝から。
type.hs と typecheck.hs
ここで型推論、つまり、Unificationしてるわけですが...
occur check 大変だから、近似で
とか書いてある。つまり、ループチェックとかはしないみたい。結構、たくさんコメントがあって、
sound とか complete
とかいろいろ言い訳が。Functor a => とか型 class とかもあって、type family とか大変らしいです。
午後は、コード生成読むか〜 で、
compiler/nativeGen/X86/CodeGen.hs
なんですが、ここにはどうも、
Cmm Procedure / Data からのコード生成
しか書いてないらしい。Cmm ってなんだ?
compiler/cmm
を見ると、
CmmLex.x CmmParse.y
え? まさか、C minus minus ? なるほどね。どうも、C minus minus (Cの下位言語で正確な型を持つもの)を中間形式として使っていうらしいです。
生成されるコードは、
case 文に来る変数が値があるかどうかをチェックして、なければclosueを返す
あれば下位3bitで分類して分岐
必要なデータ構造をallocateして
次の関数に飛ぶか
GC関連の部分に戻る
みたいな感じで生成されるみたい。Stg から Cmm の生成部分を読むとだいたいつながるみたい。
今回もコンパイラを誰もbuildできなくて、実際のコンパイラのトレースできなかったのはちょっと残念だったかな。
まぁ、また、トライすればいいか。
No comments:
Post a Comment