阅读GHC核心

tib*_*bbe 190 compiler-construction performance haskell ghc

核心是GHC的中间语言.阅读核心可以帮助您更好地了解您的计划的性能.有人问我关于阅读Core的文档或教程,但我找不到多少.

有哪些文档可供阅读GHC Core?

这是我到目前为止所发现的:

Don*_*art 265

GHC Core是所有Haskell都被翻译成的System FC语言.Core的(近似)语法由下式给出:

在此输入图像描述

核心与更简单和更知名的系统F密切相关.GHC在Core级别上进行的所有转换都是此Core表示的类型保留重构,以提高性能.而且,不是那么出名,您可以直接在Core中编写GHC程序.

GHC Core适用于编译器管道(与2002年一样,sans-LLVM和CMM):

在此输入图像描述

了解GHC Core的主要文件是:

有助于理解的相关材料:

核心反过来被翻译成STG代码,看起来像:

在此输入图像描述

Core中有趣的名称以"Z编码"编码:

在此输入图像描述

GHC Core的类型和种类(来自Tolmach的论文):

在此输入图像描述

最后,当您将Haskell优化到GHC所知的基本指令时,GHC的初始值会定期出现在GHC Core输出中.primop集在预处理文件中作为一组Core函数给出.

  • 你给出的每一个答案总是荒谬地完成.再举行投票并继续投票; 我倚着堆. (60认同)
  • 我知道它已被提及,但我认为应该在答案中强调[__ghc-core__](http://hackage.haskell.org/package/ghc-core)的用处. (3认同)
  • Don和一般的Haskell社区通过SO发布的CC-wiki文档数量惊人。大家保持良好的Q和A! (2认同)

nom*_*olo 24

提示:如果您不关心类型注释和强制使用-ddump-simpl-dsuppress-all选项一起使用.核心输出应该更具可读性.

  • `-dsuppress-all`非常有用.如果你只想摆脱演员表,你也可以使用`-dsuppress-coercions`(当周围有很多新类型时很有用). (5认同)

acf*_*zer 8

虽然不完全是GHC核心语言,但Don提到STG语言非常相似.我最近经历了STG语言+机器的证明类型安全的练习,之后我发现我很容易理解Core.

我用来学习STG的文本很容易理解:在Stock硬件上实现懒惰的功能语言: Simon Peyton-Jones 的Spineless无标记G-machine.本文的大部分内容都与实现细节有关,但我特别推荐第4节作为STG语言的自上而下的解释,为一些反直觉的设计决策提供动机,并提供熟悉的例子的翻译map.