核心是GHC的中间语言。Reading Core可以帮助您更好地了解程序的性能。有人要求我提供有关阅读Core的文档或教程,但找不到很多。
哪些文档可用于阅读GHC Core?
到目前为止,这是我发现的内容:
核心是GHC的中间语言。Reading Core可以帮助您更好地了解程序的性能。有人要求我提供有关阅读Core的文档或教程,但找不到很多。
哪些文档可用于阅读GHC Core?
到目前为止,这是我发现的内容:
Answers:
GHC Core是所有Haskell都翻译成的System FC语言。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输出中。primop集作为预处理文件中的一组Core函数给出。
提示:如果您不关心类型注释和强制-ddump-simpl
,请与-dsuppress-all
选项一起使用。核心输出应更具可读性。
-dsuppress-all
真的很有用 您也可以使用-dsuppress-coercions
,如果你只是想摆脱铸件(有用的,当有很多newtypes左右)。
正如Don所提到的,尽管不完全是GHC Core语言,但STG语言却非常相似。最近,我进行了证明STG语言+机器的类型安全性的练习,之后我发现我可以轻松理解Core。
我用来学习STG的文字非常容易理解:在库存硬件上实现惰性功能语言: Simon Peyton-Jones 编写的无刺无标签G机。本文中的大部分内容都与实现细节有关,但我特别推荐第4节,作为对STG语言的从上到下的解释,它为某些违反直觉的设计决策提供了动力,并提供了类似的示例的翻译map
。
“ GHC核心语言的外部表示形式”是可在ghc(share/doc/ghc/core.pdf
)的安装中或在Internet上找到的文档。