繁体   English   中英

GHC管道:核心,STG - AST还是文本?

[英]GHC pipeline: Core, STG - ASTs or text?

在GHC的流程中,有一个阶段是将Haskell源代码转换为Core,然后(不一定是紧接的下一步)将Core转换为STG。 但是,有一个问题让我无法理解 - 我们什么时候有一个“普通”代码(即纯文本),什么东西真的存在于内存中,比如抽象语法树(ASTs)?

为了使我的问题更精确,我将它分成几部分:

1)在解析Haskell源文件阶段时,我们是否立即构建了Core语言的AST? 如果没有,那么在我看来,我们必须构建完整Haskell的AST(这似乎很奇怪),然后将它们转换为Core的AST,或者首先在Core中对它们进行文本表示,然后再次调用解析来获得Core的AST。

2)几乎相同的问题适用于Core to STG转换(但在这种情况下,我认为我可以假设我们拥有的是Core的AST - 正确吗?)

首先将Haskell源解析为完整Haskell的AST,然后进行类型检查。

从那时起,它变得黯然失色,转换为STG,从那里到Cmm再到汇编或LLVM代码。 所有这些阶段都建立在AST之上,在汇编/ llvm代码之前没有任何这些阶段的文本表示,然后将其写入文件并使用外部工具进行编译。

拥有完整Haskell的AST并不是一件容易的事。 实际上,需要根据用户编写的代码给出类型错误,而不是仅在Core级别上检测类型错误。

您可以在HsSym的模块中找到Haskell的AST,在CoreSyn找到 AST的核心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM