阅读 GHC 核心

Posted

技术标签:

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

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

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

这是我目前发现的:

Write Haskell as fast as C: exploiting strictness, laziness and recursion Haskell as fast as C: working at a high altitude for low level performance RWH: Chapter 25. Profiling and optimization High-Performance Haskell talk at CUFP(幻灯片 65-80)

【问题讨论】:

另见***.com/questions/6048194/… skillsmatter.com/skillscasts/… 也可能有用。 【参考方案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 的主要文档有:

An External Representation for the GHC Core Language,托尔马赫,2001 年 ghc/compiler/CoreSyn,GHC 定义本身 Secrets of the Glasgow Haskell Compiler inliner,Peyton Jones 和 Marlow,1999 年。第 2.3 节描述了核心,包括有关出现分析注释的详细信息。 A transformation-based optimiser for Haskell,Peyton Jones 和 Santos,1998 年。在 S3 中描述了 Core,包括对 Core 的多态性和操作读数的讨论。

有助于理解的相关材料:

GHC -fext-core output 我花了很多时间通过阅读 GHC 源码来学习 Core。我在 2002 年的 undergraduate thesis 中描述了一些内容,从第 16 页开始。 从使用ghc-core 工具,到生成我喜欢的格式的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 中找到。

【讨论】:

以上是关于阅读 GHC 核心的主要内容,如果未能解决你的问题,请参考以下文章

安装 GHC 7.8 时可以确保安装分析库吗?

GHC 内部结构:类型系统是不是有 C 实现?

《Python核心编程(第3版)》epub下载在线阅读,求百度网盘云资源

高效阅读源码的关键:构建核心抽象模型

如何阅读核心数据描述?

golang martini 源码阅读笔记之martini核心