5

W ramach GHC jest etap tłumaczenia kodu źródłowego Haskell na Core, a następnie (niekoniecznie jako następny krok) tłumaczenia Core na STG. Jednak jedno zagadnienie uchodzi mi z mojego zrozumienia - kiedy mamy "normalny" kod (to znaczy zwykły tekst) i kiedy coś faktycznie żyje w pamięci, jak abstrakcyjne drzewa składniowe (AST)?Rurociąg GHC: Core, STG - ASTs lub tekst?

A żeby moje pytanie nieco bardziej precyzyjny, będę dzielić go na części:

1) w parsowania pliku źródłowego fazie Haskell, mamy natychmiast skonstruować ASTs języka podstawowej? Jeśli nie, to wydaje mi się, że musimy skonstruować AST pełnego Haskella (co wydaje się dziwne), a następnie albo przetransformować je do AST Rdzenia, albo najpierw do tekstowego przedstawienia ich w Rdzeniu i ponownie wywołać parsowanie w celu uzyskania AST AST.

2) prawie to samo pytanie dotyczy rdzenia do STG przejściowym (ale w tym przypadku myślę, że mogę zakładać, że to, co mamy, jest ASTs rdzenia - poprawne)

Odpowiedz

13

Źródłem Haskell jest najpierw analizowany pod AST pełnego Haskella, który następnie jest testowany.

Od tego momentu przechodzi do Core, przetłumaczony na STG, stamtąd do Cmm na kod zespołu lub LLVM. Wszystkie te fazy są budowane na AST, nie ma tekstowej reprezentacji żadnego z tych etapów aż do złożenia kodu/llvm, który jest następnie zapisywany do pliku i kompilowany przy użyciu zewnętrznych narzędzi.

To nie jest w porządku, aby mieć AST pełnego Haskella. W rzeczywistości jest to wymóg podania błędów typu w odniesieniu do kodu napisanego przez użytkownika, zamiast wykrycia błędów typu tylko na poziomie Core.

Możesz znaleźć AST dla Haskell w modułach od HsSym i AST of Core w CoreSyn.

+3

Teraz to jasne - dziękuję! Aha, i linki wydają się być zepsute ... – socumbersome

+0

Spójrz [tutaj] (https://github.com/ghc/ghc/tree/ghc-7.8/compiler/hsSyn), w szczególności [tutaj] (https: //github.com/ghc/ghc/blob/ghc-7.8/compiler/hsSyn/HsExpr.lhs), a następnie [tutaj] (https://github.com/ghc/ghc/blob/ghc-7.8/compiler/ coreSyn/CoreSyn.lhs) i [tutaj] (https://github.com/ghc/ghc/blob/ghc-7.8/compiler/stgSyn/StgSyn.lhs). –

+0

Naprawiono linki. Otrzymuję to za próbę stworzenia czystych linków https: // www.haskell.org/ghc/'zamiast dziwnych linków https: // downloads.haskell.org/~ ghc /'. –