【发布时间】:2011-09-01 13:04:12
【问题描述】:
Core 是 GHC 的中间语言。 Reading Core 可以帮助您更好地了解程序的性能。有人向我索要有关阅读 Core 的文档或教程,但我找不到太多。
哪些文档可用于阅读 GHC Core?
这是我目前发现的:
【问题讨论】:
标签: performance compiler-construction haskell ghc
Core 是 GHC 的中间语言。 Reading Core 可以帮助您更好地了解程序的性能。有人向我索要有关阅读 Core 的文档或教程,但我找不到太多。
哪些文档可用于阅读 GHC Core?
这是我目前发现的:
【问题讨论】:
标签: performance compiler-construction haskell ghc
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. 中作为一组核心函数给出
【讨论】:
提示:如果您不关心类型注释和强制转换,请使用 -ddump-simpl 和 -dsuppress-all 选项。核心输出应该更具可读性。
【讨论】:
-dsuppress-all 真的很有用。如果您只想摆脱演员表,也可以使用-dsuppress-coercions(当周围有很多新类型时很有用)。
虽然不完全是 GHC 核心语言,但正如 Don 提到的,STG 语言非常相似。最近做了一个证明STG语言+机器类型安全性的练习,后来发现自己可以轻松理解Core了。
我用来学习 STG 的文本很容易理解:Implementing Lazy Functional Languages on Stock Hardware: The Spineless Tagless G-machine,作者 Simon Peyton-Jones。这篇论文的大部分内容都与实现细节有关,但我特别推荐第 4 节作为对 STG 语言的自上而下的解释,它为一些违反直觉的设计决策提供了动机,并提供了熟悉示例的翻译,例如 @987654322 @。
【讨论】:
“An External Representation for the GHC Core Language”是一个文档,可以在安装 ghc (share/doc/ghc/core.pdf) 或 on the internet 中找到。
【讨论】: