ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

像 C 一样快地编写 Haskell:利用严格性、惰性和递归

Haskell 和 C 一样快:在高海拔地区工作以获得低水平性能

RWH:第 25 章。分析和优化

CUFP 的高性能 Haskell 演讲(幻灯片 65-80)


s
sjakobi

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

https://i.stack.imgur.com/RP6fQ.png

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

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

https://i.stack.imgur.com/PtsCf.png

了解 GHC Core 的主要文件是:

GHC 核心语言的外部表示,Tolmach,2001

GHC.Core.Expr,GHC 定义本身

Glasgow Haskell 编译器内联器的秘密,Peyton Jones 和 Marlow,1999 年。核心在第 2.3 节中描述,包括出现分析注释的详细信息。

Haskell、Peyton Jones 和 Santos,1998 年的基于转换的优化器。Core 在 S3 中进行了描述,包括对 Core 的多态性和操作读数的讨论。

有助于理解的相关材料:

GHC -fext-core 输出

我花了很多时间通过阅读 GHC 源码来学习 Core。有些在我 2002 年的本科论文中有所描述,从第 16 页开始。

从使用 ghc-core 工具,到生成我喜欢的格式的 Core。

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

https://i.stack.imgur.com/Gaj9X.png

Core 中有趣的名字是用“Z 编码”编码的:

https://i.stack.imgur.com/J9pqR.png

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

https://i.stack.imgur.com/eNvd2.png

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


你给出的每一个答案总是荒谬的完整。再进行一次投票并保持下去;我在倾斜堆。
Don 和一般 Haskell 社区通过 SO 发布的 CC-wiki 文档数量惊人。保持良好的 Q 和 A,大家!
我知道有人提到它,但我认为答案中应该强调 ghc-core 的用处。
到 GHC 的 -fext-core 的链接已经烂掉了,而且最近的 GHC 似乎不再有这个标志了。我可以在用户指南中找到此部分的最新 GHC 是 7.8:downloads.haskell.org/~ghc/7.8.4/docs/html/users_guide/…。更新此参考的最佳方法是什么?改为链接到 -ddump-simpl 的文档?!只需删除引用?!
@sjakobi,确实,该功能在几年前就被删除了——开发人员认为不值得维护它。
n
nominolo

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


-dsuppress-all 非常有用。如果您只想摆脱强制转换,也可以使用 -dsuppress-coercions(当周围有很多新类型时很有用)。
-dsuppress-coercions -dsuppress-type-applications 消除最糟糕的噪音,同时保留您想要的大部分内容。
a
acfoltzer

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

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


STG比Core低很多。编译流水线为:Haskell -> Core -> STG -> C-- -> Machine Code
R
Roman Cheplyaka

“GHC 核心语言的外部表示”是一个文档,可以在 ghc (share/doc/ghc/core.pdf) 或 on the internet 的安装中找到。