首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell编译器是如何工作的?

Haskell编译器是如何工作的?
EN

Stack Overflow用户
提问于 2010-12-08 15:34:21
回答 4查看 4.9K关注 0票数 21

我在哪里可以找到一些描述Haskell编译器实际工作方式的论文/文档/任何东西?我读了很多GHC的文档,但在头痛之后就停了下来。因此,不需要PhD就能理解它,并且不是用You're-supposed-to-be-already-familiar-with-it风格编写的东西会更好。如果它真的很长,并且需要一些时间来理解它,那么这不是问题。

PS:最有趣的是关于GHC的一些东西,但是任何东西都可以。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-08 16:30:01

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

当然,自从这本书出版以来,GHC已经向前迈进了一步,但它仍然非常相关。

票数 31
EN

Stack Overflow用户

发布于 2010-12-08 17:40:45

你在寻找特别是关于编译惰性评估的细节吗?有一本书是Simon Peyton-Jones的书,Max Bolingbroke提到了这本书,还有一本书详细介绍了Clean的实现:

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

如果你有大学背景,想要更小的书,你可以试着买这些书(Henderson & Diller的书肯定已经绝版了):

Antoni Diller“编译函数语言”ISBN0471 92027 4

彼得·亨德森“函数式程序设计应用与实现”ISBN 0-13-331579-7

AJT Davie "An Introduction to Functional Programming Systems using Haskell“ISBN 0521 27724 8

Diller通过combinator reduction为一种惰性语言(用Pascal实现)提供了一个完整的编译器。这是David Turner为SASL发明的实现技术。亨德森有一个针对LISPkit的编译器的许多部分,它是Lisp的一个缩影,懒惰的变体。Davie详细介绍了编译懒惰语言的相当多的机制,例如,对STG的描述比Simon Peyton-Jones的书要短得多( STG是用于Haskell的抽象机器SPJ )。

如果你浏览他们的出版物列表,Clean developers有相当多关于实现SAPL (一种简单的应用语言)的信息:

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

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

票数 17
EN

Stack Overflow用户

发布于 2010-12-08 16:05:46

编译器是一个庞大的主题,在这里完全解释它们是不可能的。但这里是一个通用编译器的概述。希望这能给你一些理解,让阅读关于GHC的东西更容易理解一些。

编译器通常通过两个部分进行一系列转换,即前端和后端。

第一种转换是将纯文本转换为更容易遍历的内容。它本身通常被分成两部分:

Lexical Analysis or Tokenization -将纯文本转换为小块(通常是运算符、标识符、文字等)的行为。

Syntactic Analysis or Parsing -将这些小块转换为树结构。(通常为AST, an Abstract Syntax Tree)

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

下一个转换将AST转换为IR, an Intermediate Representation。这通常是现在的an SSA form, a Single Static Assignment

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

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

有关更多信息,我推荐this wikipedia page

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4385160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档