【问题标题】:Reading GHC Core阅读 GHC 核心
【发布时间】:2011-09-01 13:04:12
【问题描述】:

Core 是 GHC 的中间语言。 Reading Core 可以帮助您更好地了解程序的性能。有人向我索要有关阅读 Core 的文档或教程,但我找不到太多。

哪些文档可用于阅读 GHC Core?

这是我目前发现的:

【问题讨论】:

标签: performance compiler-construction haskell ghc


【解决方案1】:

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

Core 与更简单且广为人知的System F 密切相关。所有transformations GHC does on the Core level 都是此Core 表示的类型保留重构,以提高性能。而且,不太为人所知,您可以直接在 Core 中编写 GHC 程序。

GHC Core 适合编译器管道(就像 2002 年一样,无 LLVM 和 CMM):

了解 GHC Core 的主要文档有:

有助于理解的相关材料:

Core 又被翻译成 STG 代码,如下所示:

Core 中的搞笑名字是用“Z-encoding”编码的:

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

最后,当您将 Haskell 优化到 GHC 知道的基本指令时,GHC 的 primops 会定期出现在 GHC 核心输出中。 primop 集在a pre-processed file. 中作为一组核心函数给出

【讨论】:

  • 你给出的每一个答案总是非常完整。再进行一次投票并保持下去;我正在倾斜。
  • Don 和一般 Haskell 社区通过 SO 发布的 CC-wiki 文档数量惊人。保持良好的 Q 和 A,大家!
  • 我知道有人提到过,但我认为ghc-core的用处应该在答案中强调。
【解决方案2】:

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

【讨论】:

  • -dsuppress-all 真的很有用。如果您只想摆脱演员表,也可以使用-dsuppress-coercions(当周围有很多新类型时很有用)。
【解决方案3】:

虽然不完全是 GHC 核心语言,但正如 Don 提到的,STG 语言非常相似。最近做了一个证明STG语言+机器类型安全性的练习,后来发现自己可以轻松理解Core了。

我用来学习 STG 的文本很容易理解:Implementing Lazy Functional Languages on Stock Hardware: The Spineless Tagless G-machine,作者 Simon Peyton-Jones。这篇论文的大部分内容都与实现细节有关,但我特别推荐第 4 节作为对 STG 语言的自上而下的解释,它为一些违反直觉的设计决策提供了动机,并提供了熟悉示例的翻译,例如 @987654322 @。

【讨论】:

  • STG 比 Core 低很多。编译流水线为:Haskell -> Core -> STG -> C-- -> Machine Code
【解决方案4】:

“An External Representation for the GHC Core Language”是一个文档,可以在安装 ghc (share/doc/ghc/core.pdf) 或 on the internet 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多