21

我在哪里可以获得一些描述 Haskell 编译器实际工作原理的论文/文档/任何内容?我阅读了很多 GHC 的文档,但在头痛后停止了。因此,不需要博士学位即可理解它并且不是以“您应该已经熟悉它”的风格编写的东西会更可取。如果它真的很长并且需要一些时间来理解它,这不是问题。

PS:最有趣的是关于 GHC 的事情,但任何事情都可以。

4

6 回答 6

31

你可以从马的嘴里得到答案!Simon Peyton Jones(GHC 向导)写了一本书,解释如何实现函数式编程语言。它现已绝版,可在线免费获取:http ://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/

当然,自本书编写以来,GHC 已经继续前进,但它仍然非常重要。

于 2010-12-08T08:30:00.747 回答
17

您是否正在寻找有关编译惰性评估的详细信息?Max Bolingbroke 提到了 Simon Peyton-Jones 的书,详细介绍 Clean 实现的书也在网上:

http://wiki.clean.cs.ru.nl/Functional_Programming_and_Parallel_Graph_Rewriting

如果你有大学附属机构并且想要更小的东西,你可以尝试购买这些书(Henderson & Diller 肯定已经绝版):

Antoni Diller “编译函数语言” ISBN 0 471 92027 4

Peter Henderson“函数式编程应用与实现”ISBN 0-13-331579-7

AJT Davie “使用 Haskell 的函数式编程系统简介” ISBN 0 521 27724 8

Diller 通过组合子约简为惰性语言(在 Pascal 中实现)提供了完整的编译器。这是 David Turner 为 SASL 发明的实现技术。Henderson 为 LISPkit 提供了许多编译器部分,LISPkit 是 Lisp 的微型、惰性变体。Davie 详细介绍了编译惰性语言的许多机制,例如,对 STG 的描述比 Simon Peyton-Jones 的书要短得多(STG 是用于 Haskell 的抽象机器 SPJ)。

如果您查看他们的出版物列表,Clean 开发人员有很多关于实现 SAPL(一种简单应用语言)的信息:

https://clean.cs.ru.nl/Publications

最后,有相当多的论文记录了 Utrecht Haskell Compiler UHC(和 EHC)的各个方面。我认为大部分信息是编译器是如何组织的(使用属性语法和“Shuffle”)以及类型系统(EHC 中有不同级别的类型系统)是如何实现的,而不是后端如何“编译”作品。

于 2010-12-08T09:40:44.850 回答
5

编译器是一个巨大的主题,在这里不可能完整地解释它们。但这里是通用编译器的概述。希望这会给您一些理解,这可能会使阅读有关 GHC 的内容更容易理解。

编译器通常通过前端和后端两部分的一系列转换来工作。

第一个转换是将纯文本变成更容易遍历的东西。这本身通常分为两部分:

词法分析或标记化- 将纯文本转换为小块(通常是运算符、标识符、文字等)的行为。

句法分析或解析- 将这些小块变成树结构。(通常是AST,抽象语法树

下一阶段是语义分析。在这个阶段,编译器通常会向 AST 添加信息(如类型信息)并构建符号表。前端到此结束。

下一个转换将 AST 转换为IR,即中间表示。现在,这通常是一种 SSA 形式,即单一静态分配

然后通过常量传播、死代码分析、向量化等对其进行优化。

最后一个转换是代码生成。将 IR 转换为机器代码。这可能非常复杂。它有时也被称为降低。

有关更多信息,我推荐此维基百科页面

于 2010-12-08T08:05:45.753 回答
4

不幸的是,我怀疑您要查找的内容不存在。编译器理论和形式语言理论是计算机科学中相当复杂的主题,而 Haskell 绝不是起点。

首先,您可能应该在以下方面打下良好的基础:

我怀疑任何解释 Haskell 内部的任何东西都需要对上述主题有更好的理解,而不是 C 语言。

到目前为止,我已经上了一门关于这个主题的课程,所以我没有正式的文献可以推荐,但我确信有很多好的资源。

于 2010-12-08T07:41:18.560 回答
2

维基百科对 GHC 的内部有很好的可读性概述(类似于@dan_waterworth 的解释,但特定于 Haskell 和 GHC):

http://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler#Architecture

于 2011-05-18T17:51:50.283 回答
0

我读过的关于该主题的最佳论文之一是:

于 2019-06-13T10:38:52.140 回答