Odczyt rdzenia GHC

Rdzeń jest językiem pośrednim GHC. Reading Core pomoże Ci lepiej zrozumieć wydajność Twojego programu. Ktoś poprosił mnie o dokumentację lub tutoriale na temat reading Core, ale nie mogłem znaleźć zbyt wiele.

Jaka dokumentacja jest dostępna do odczytu GHC Core?

Oto co znalazłem do tej pory:

Author: Don Stewart, 2011-05-25

4 answers

GHC rdzeń jest system FC język, w którym wszystkie Haskell jest tłumaczony. (Przybliżona) Gramatyka dla rdzenia jest podana przez:

Tutaj wpisz opis obrazka

Rdzeń jest ściśle związany z prostszym i lepiej znanym układem F . Wszystkie przekształcenia wykonywane przez GHC na poziomie rdzenia są refaktoringami zachowującymi Typ tej reprezentacji rdzenia, w celu poprawy wydajności. I, nie tak dobrze znane, można pisać bezpośrednio w Core do programu GHC.

GHC core pasuje do kompilatora rurociąg (jak to było w 2002 roku, sans-LLVM i CMM):

Tutaj wpisz opis obrazka

[[0]}podstawowe dokumenty, aby dowiedzieć się o GHC Core to:

Powiązane materiały, które mogą pomóc w zrozumieniu:

  • Wyjście GHC-fext-core
  • spędziłem dużo czasu ucząc się rdzenia czytając GHC source. Niektóre są opisane w mojej pracy licencjackiej z 2002 roku, z strona 16.
  • z użyciem narzędzia ghc-core do wygenerowania rdzenia w formacie, który uważam za przyjemny.

Rdzeń z kolei jest tłumaczony na kod STG, który wygląda mniej więcej tak:

Tutaj wpisz opis obrazka

Śmieszne nazwy W Core są zakodowane w "z-encoding":

Tutaj wpisz opis obrazka

Typy i rodzaje rdzenia GHC (z pracy Tolmacha):

Tutaj wpisz opis obrazka

Wreszcie, GHC primops pojawiają się regularnie w GHC core output, po zoptymalizowaniu Haskell w dół do podstawowych instrukcji GHC wie o. Zbiór primop jest podany jako zbiór podstawowych funkcji w wstępnie przetworzonym pliku.

 253
Author: Don Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 01:23:19

Wskazówka: Jeśli nie dbasz o adnotacje typu i przymusy, użyj -ddump-simpl razem z opcją -dsuppress-all. Wyjście rdzenia powinno być znacznie bardziej czytelne.

 24
Author: nominolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-26 15:08:17

[1]}Chociaż nie jest to język podstawowy GHC, jak wspomina Don, język STG jest dość podobny. Niedawno przeszedłem ćwiczenie udowodnienia bezpieczeństwa typu maszyny STG language +, a potem odkryłem, że mogę łatwo zrozumieć Core.

Tekst, którego uczyłem się STG, jest dość przystępny: Implementowanie leniwych języków funkcyjnych na stockowym sprzęcie: Spineless Tagless G-machine autorstwa Simona Peyton-Jonesa. Duża część artykułu dotyczy szczegółów realizacji, ale Polecam w szczególności sekcję 4 jako wyjaśnienie od góry do dołu języka STG, które daje motywacje do niektórych intuicyjnych decyzji projektowych i zapewnia tłumaczenia znanych przykładów, takich jak map.

 8
Author: acfoltzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-26 03:57:08

" Zewnętrzna reprezentacja dla języka GHC " jest dokumentem, który można znaleźć w instalacji ghc (share/doc/ghc/core.pdf) lub w Internecie .

 3
Author: Roman Cheplyaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 08:01:36