初日は、スライドを半分ぐらい講義。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:
Post a Comment