读GHC核心

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

什么文件可用于阅读GHC核心?

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

  • 把Haskell写成和C一样快:利用严格性,懒惰和递归
  • Haskell与C一样快:在高空工作以降低性能
  • RWH:第25章。分析和优化
  • CUFP高性能Haskell讲​​座(幻灯片65-80)

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

    在这里输入图像描述

    核心与更简单,更知名的系统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的多态性和操作性读数的讨论。
  • 有助于理解的相关材料:

  • GHC -fext-core输出
  • 通过阅读GHC源文件,我花了很多时间学习Core。 有些内容在我的本科毕业论文中从2002年的第16页开始描述。
  • 从使用ghc-core工具,以一种格式生成Core,我觉得很愉快。
  • 核心反过来被翻译成STG代码,看起来像这样:

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

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

    在这里输入图像描述

    最后,当您将Haskell优化到GHC知道的基本指令时,GHC的primops将定期出现在GHC Core输出中。 primop集在预处理文件中作为一组核心函数给出。


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


    虽然不完全是GHC核心语言,但唐提到STG语言非常相似。 我最近经历了STG语言+机器的证明类型安全性的练习,之后我发现我可以很容易地理解Core。

    我用来学习STG的文本非常容易理解:在库存硬件上实现懒惰函数语言:Simon Peyton-Jones提供的Spineless Tagless G-machine。 大部分论文都关注实现细节,但我特别推荐第4部分作为STG语言的首要解释,它提供了一些反直觉设计决策的动机,并提供了像map这样的熟悉示例的翻译。

    链接地址: http://www.djcxy.com/p/33335.html

    上一篇: Reading GHC Core

    下一篇: Haskell ghc visual studio DLL weird behaviour