为了账号安全,请及时绑定邮箱和手机立即绑定

阅读GHC核心

/ 猿问

阅读GHC核心

holdtom 2019-10-12 14:45:39

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


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


查看完整描述

3 回答

?
慕森王

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


//img3.mukewang.com/5da176c10001aef605200570.jpg

核心与更简单,更知名的System F密切相关。GHC在核心级别执行的所有转换都是此核心表示形式的保留类型的重构,以提高性能。而且,并不是很知名,您可以直接在Core中编写GHC程序。


GHC Core适用于编译器管道(与2002年一样,为sans-LLVM和CMM):


//img.mukewang.com/5da176c60001d5ae03050400.jpg

了解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代码,如下所示:


//img.mukewang.com/5da176cd00018db903660412.jpg

Core中的有趣名称以“ Z编码”编码:


//img3.mukewang.com/5da176d00001d73803110580.jpg

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


//img2.mukewang.com/5da176d40001ed3c04810400.jpg

最后,将Haskell优化为GHC知道的基本说明后,GHC的primops会定期出现在GHC Core输出中。primop集作为预处理文件中的一组Core函数给出。


查看完整回答
反对 回复 2019-10-12
?
HUX布斯

正如Don所提到的,尽管不完全是GHC Core语言,但STG语言却非常相似。我最近进行了一次证明STG语言+机器的类型安全性的练习,此后我发现我可以轻松理解Core。


我用来学习STG的文字非常容易理解:在库存硬件上实现惰性功能语言: Simon Peyton-Jones 编写的无刺无标签G机。本文中的大部分内容都与实现细节有关,但我特别推荐第4节,作为对STG语言的从上到下的解释,它为某些违反直觉的设计决策提供了动力,并提供了类似示例的翻译map。


查看完整回答
反对 回复 2019-10-12
?
隔江千里

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


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 83 浏览
我要回答

相关问题推荐

慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信