簡體   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