Sunday 7 December 2014

GHC 読み会完結編

初日は、スライドを半分ぐらい講義。60ページなので、コード生成のあたりで残りは読み飛ばしました。

STGを生成して見たりすると、スライドとも少し違う感じ。でも、STGって、型変数とかを明示して渡したりしているので、

* Agdaと同じ dependent type じゃん

という印象を強く持ちました。System F にCを付け加えたものらしい。

で、コンパイラをtraceしようとするんだけど、


Setting から DynFlang を作って、HscEnv を作るところでこける

こけるメッセージが、

> ss <- SysTools.initSysTools ( Just "/usr/local/lib/ghc-7.9.20141204" )
> let df = DynFlags.defaultDynFlags ss
> HscMain.newHscEnv df
ld: library not found for -l:ghc3000_847.dylib
clang: error: linker command failed with exit code 1 (use -v to see invocation)

うーん。わからん。ghc RTSで落ちてるっぽい。

ところがなんと、

Linux では出ないらしい

というわけなので、どうも OS X 版のバグっぽいです。これで compiler を :step することはできました。

でも、

相互参照を.boot-hsとかで参照するのは、:break できないらしい

しかも、:break 出来ても「そこにきました」程度しかわからないみたい。

ちなみに、lldb で ghc を debug することもできますが、ちょっとつらいみたいですね。

どうも「Haskell ではdebuggerは使わない」「Haskell(or GHC)では単体テストはしない」ってことらしいな。

ソースコードは、HscMain から Lexer, Parser を読んで、Desugar から、CoreSyn を見るあたりまででした。

去年はpypyだったが、pypy の方が読んだ気がしたなんていう感想が出てました。 来年は、もう少し読めるかも。

No comments: