Rdzeń jest językiem pośrednim GHC. Czytanie rdzenia może pomóc ci lepiej zrozumieć wydajność twojego programu. Ktoś poprosił mnie o dokumentację lub samouczki na temat czytania rdzenia, ale nie mogłem wiele znaleźć.
Jaka dokumentacja jest dostępna do odczytu GHC Core?
Oto, co znalazłem do tej pory:
Odpowiedzi:
GHC Core to język System FC , na który przetłumaczono wszystkie Haskell. (Przybliżona) gramatyka rdzenia jest podawana przez:
Rdzeń jest ściśle związana z prostszą i bardziej znanego systemu F . Wszystkie transformacje, które GHC wykonuje na poziomie podstawowym są refaktoryzacjami typu tej reprezentacji rdzenia, aby poprawić wydajność. I, nie tak dobrze znane, możesz pisać bezpośrednio w Core do programu GHC.
GHC Core pasuje do potoku kompilatora (tak jak w 2002 r., Sans-LLVM i CMM):
Podstawowymi dokumentami do poznania GHC Core są:
Powiązany materiał, który może pomóc w zrozumieniu:
Rdzeń z kolei jest tłumaczony na kod STG, który wygląda mniej więcej tak:
Śmieszne imiona w Core są zakodowane w „kodowaniu Z”:
Rodzaje i rodzaje GHC Core (z pracy Tolmacha):
Wreszcie, startery GHC pojawiają się regularnie w wynikach GHC Core, gdy zoptymalizujesz swój Haskell do podstawowych instrukcji, o których wie GHC. Zestaw pierwotny jest podany jako zestaw podstawowych funkcji we wstępnie przetworzonym pliku.
źródło
Wskazówka: jeśli nie zależy Ci na adnotacjach i koercjach, korzystaj
-ddump-simpl
z-dsuppress-all
opcji. Wyjście rdzenia powinno być znacznie bardziej czytelne.źródło
-dsuppress-all
jest naprawdę przydatne. Możesz także użyć,-dsuppress-coercions
jeśli chcesz pozbyć się rzutów (przydatne, gdy jest wiele nowych typów).Chociaż nie jest to dokładnie język GHC Core, jak wspomina Don, język STG jest dość podobny. Niedawno przeszedłem ćwiczenie sprawdzania bezpieczeństwa typu języka STG + maszyny, a potem odkryłem, że mogę łatwo zrozumieć Core.
Tekst, którego nauczyłem się STG, jest dość dostępny: Implementacja leniwych języków funkcjonalnych na standardowym sprzęcie: Bezobrotowa maszyna Tagless G autorstwa Simona Peytona-Jonesa. Znaczna część artykułu dotyczy szczegółów implementacji, ale zalecam sekcję 4, w szczególności jako ogólne wyjaśnienie języka STG, które daje motywację do niektórych sprzecznych z intuicją decyzji projektowych i dostarcza tłumaczenia podobnych przykładów
map
.źródło
„Zewnętrzna reprezentacja języka podstawowego GHC” to dokument, który można znaleźć w instalacji ghc (
share/doc/ghc/core.pdf
) lub w Internecie .źródło