[英]Reading GHC Core
Core 是 GHC 的中间语言。 Reading Core 可以帮助您更好地了解程序的性能。 有人向我询问有关阅读 Core 的文档或教程,但我找不到太多。
哪些文档可用于阅读 GHC Core?
这是我到目前为止发现的:
GHC Core 是系统 FC语言,所有 Haskell 都被翻译成该语言。 Core 的(近似)语法由下式给出:
Core 与更简单、更广为人知的System F密切相关。 GHC 在核心级别所做的所有转换都是此核心表示的类型保留重构,以提高性能。 而且,不太为人所知,您可以直接在 Core 中编写 GHC 程序。
GHC Core 适合编译器管道(就像 2002 年一样,sans-LLVM 和 CMM):
了解 GHC Core 的主要文件是:
有助于理解的相关材料:
核心又被翻译成 STG 代码,看起来像:
Core 中有趣的名字被编码在“Z 编码”中:
GHC Core 的类型和种类(来自 Tolmach 的论文):
最后,当您将 Haskell 优化到 GHC 知道的基本指令时,GHC 的primops会定期出现在 GHC Core output 中。 primop 集作为预处理文件中的一组核心函数给出。
提示:如果您不关心类型注释和强制,请使用-ddump-simpl
simpl 和-dsuppress-all
选项。 核心 output 应该更具可读性。
虽然不完全是 GHC 核心语言,但正如 Don 提到的 STG 语言非常相似。 最近做了一个证明STG语言+机器类型安全的练习,后来发现自己可以轻松理解Core了。
我用来学习 STG 的文本很容易理解:在 Stock Hardware 上实现惰性函数式语言:Simon Peyton-Jones 的 Spineless Tagless G-machine 。 这篇论文的大部分内容都与实现细节有关,但我特别推荐第 4 节作为对 STG 语言的自上而下的解释,它为一些违反直觉的设计决策提供了动机,并提供了map
等熟悉示例的翻译。
“GHC 核心语言的外部表示”是一个文档,可以在 ghc 的安装 ( share/doc/ghc/core.pdf
) 或互联网上找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.