读GHC核心
核心是GHC的中间语言。 阅读核心可以帮助您更好地了解程序的性能。 有人问我阅读Core的文档或教程,但我找不到太多内容。
什么文件可用于阅读GHC核心?
这是我到目前为止发现的:
GHC Core是所有Haskell翻译成的系统FC语言。 Core的(近似)语法由下式给出:
核心与更简单,更知名的系统F密切相关。GHC在核心层面所做的所有转换都是对该核心表示进行类型保留重构,以提高性能。 而且,还不是很清楚,你可以直接在Core编写GHC程序。
GHC Core适用于编译器管道(与2002年一样,sans-LLVM和CMM):
要了解GHC Core的主要文档是:
有助于理解的相关材料:
核心反过来被翻译成STG代码,看起来像这样:
Core中有趣的名字用“Z-encoding”编码:
GHC Core的类型和种类(来自Tolmach的论文):
最后,当您将Haskell优化到GHC知道的基本指令时,GHC的primops将定期出现在GHC Core输出中。 primop集在预处理文件中作为一组核心函数给出。
提示:如果您不关心类型注释和强制, -ddump-simpl
-dsuppress-all
与-dsuppress-all
选项一起使用。 核心输出应该更具可读性。
虽然不完全是GHC核心语言,但唐提到STG语言非常相似。 我最近经历了STG语言+机器的证明类型安全性的练习,之后我发现我可以很容易地理解Core。
我用来学习STG的文本非常容易理解:在库存硬件上实现懒惰函数语言:Simon Peyton-Jones提供的Spineless Tagless G-machine。 大部分论文都关注实现细节,但我特别推荐第4部分作为STG语言的首要解释,它提供了一些反直觉设计决策的动机,并提供了像map
这样的熟悉示例的翻译。
上一篇: Reading GHC Core