Sunday, 25 November 2018

GHC 読み会

土曜日の休みをはさんで、また朝から。

  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: