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:
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:
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):
[[0]}podstawowe dokumenty, aby dowiedzieć się o GHC Core to:- zewnętrzna Reprezentacja języka GHC , Tolmach, 2001
- [[28]}ghc / kompilator / CoreSyn , sama definicja GHC
- tajemnice Glasgow Haskell Compiler inliner, Peyton Jones i Marlow, 1999. Rdzeń jest opisany w punkcie 2.3, w tym szczegóły dotyczące występowania adnotacje do analizy.
- Optymalizator oparty na transformacji dla Haskell, Peyton Jones i Santos, 1998. Rdzeń jest opisany w S3, w tym omówienie polimorfizmu i odczytów operacyjnych rdzenia.
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:
Śmieszne nazwy W Core są zakodowane w "z-encoding":
Typy i rodzaje rdzenia GHC (z pracy Tolmacha):
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.
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.
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
.
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 .
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