核心是GHC的中间语言。Reading Core可以帮助您更好地了解程序的性能。有人要求我提供有关阅读Core的文档或教程,但找不到很多。
哪些文档可用于阅读GHC Core?
GHC Core是所有Haskell都翻译成的System FC语言。Core的(近似)语法由下式给出:
核心与更简单,更知名的System F密切相关。GHC在核心级别执行的所有转换都是此核心表示形式的保留类型的重构,以提高性能。而且,并不是很知名,您可以直接在Core中编写GHC程序。
GHC Core适用于编译器管道(与2002年一样,为sans-LLVM和CMM):
了解GHC Core的主要文档是:
GHC核心语言的外部代表,Tolmach,2001年
ghc / compiler / CoreSyn,GHC定义本身
格拉斯哥Haskell编译器的机密,Peyton Jones和Marlow,1999年。内核在2.3节中进行了描述,包括有关发生分析注释的详细信息。
Haskell的基于转换的优化器,Peyton Jones和Santos,1998年。S3中介绍了Core,包括对多态性的讨论和对Core的操作性阅读。
可以帮助理解的相关材料:
该GHC -fext核心输出
我花了很多时间通过阅读GHC资料来学习Core。在2002年我的本科论文第16页中对此进行了描述。
通过使用ghc-core工具,以令人愉悦的格式生成Core。
依次将核心翻译成STG代码,如下所示:
Core中的有趣名称以“ Z编码”编码:
GHC Core的类型和种类(摘自Tolmach的论文):
最后,将Haskell优化为GHC知道的基本说明后,GHC的primops会定期出现在GHC Core输出中。primop集作为预处理文件中的一组Core函数给出。
正如Don所提到的,尽管不完全是GHC Core语言,但STG语言却非常相似。我最近进行了一次证明STG语言+机器的类型安全性的练习,此后我发现我可以轻松理解Core。
我用来学习STG的文字非常容易理解:在库存硬件上实现惰性功能语言: Simon Peyton-Jones 编写的无刺无标签G机。本文中的大部分内容都与实现细节有关,但我特别推荐第4节,作为对STG语言的从上到下的解释,它为某些违反直觉的设计决策提供了动力,并提供了类似示例的翻译map。
提示:如果您不关心类型注释和强制-ddump-simpl
,请将该-dsuppress-all
选项与该选项一起使用。核心输出应更具可读性。
举报