Lectura del Núcleo GHC


Core es el lenguaje intermedio de GHC. Reading Core puede ayudarte a entender mejor el rendimiento de tu programa. Alguien me pidió documentación o tutoriales sobre reading Core, pero no pude encontrar mucho.

¿Qué documentación está disponible para leer GHC Core?

Esto es lo que he encontrado hasta ahora:

Author: Don Stewart, 2011-05-25

4 answers

GHC Core es el lenguaje System FC al que se traduce todo Haskell. La gramática (aproximada) para Core viene dada por:

introduzca la descripción de la imagen aquí

Core está estrechamente relacionado con el sistema más simple y mejor conocido F. Todas las transformaciones que GHC hace en el nivel del Núcleo son refactorizaciones que preservan el tipo de esta representación del Núcleo, para mejorar el rendimiento. Y, no tan conocido, puede escribir directamente en el núcleo para programar GHC.

GHC Core encaja en el compilador pipeline (como en 2002, sans-LLVM y CMM):

introduzca la descripción de la imagen aquí

Los documentos principales para aprender sobre GHC Core son:

Material relacionado que puede ayudar a la comprensión:

  • La salida GHC-fext-core
  • Pasé mucho tiempo aprendiendo Core leyendo GHC source. Algunos se describen en mi tesis de pregrado de 2002, de página 16.
  • Usando la herramienta ghc-core, para generar Core en un formato que me parece agradable.

Core a su vez se traduce en código STG, que se ve algo así como:

introduzca la descripción de la imagen aquí

Los nombres divertidos en Core están codificados en la "codificación Z":

introduzca la descripción de la imagen aquí

Tipos y tipos de GHC Core (del documento de Tolmach):

introduzca la descripción de la imagen aquí

Finalmente, los primops de GHC aparecen regularmente en la salida GHC Core, cuando has optimizado tu Haskell hasta las instrucciones básicas que GHC conoce. El conjunto primop se da como un conjunto de funciones Principales en un archivo preprocesado.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 01:23:19

Un consejo: Si no le importa escribir anotaciones y coerciones use -ddump-simpl junto con la opción -dsuppress-all. La salida del núcleo debe ser mucho más legible.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-26 15:08:17

Aunque no es exactamente el lenguaje GHC Core, como Don menciona el lenguaje STG es bastante similar. Recientemente pasé por el ejercicio de probar el tipo de seguridad de la máquina STG language+, y después descubrí que podía entender Core fácilmente.

El texto que utilicé para aprender STG es bastante accesible: Implementando Lenguajes Funcionales Perezosos en Hardware de Stock: The Spineless Tagless G-machine por Simon Peyton-Jones. Gran parte del documento se refiere a los detalles de la implementación, pero Recomiendo la sección 4 en particular como una explicación de arriba a abajo del lenguaje STG que da motivaciones para algunas de las decisiones de diseño contra-intuitivas y proporciona traducciones de ejemplos familiares como 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-26 03:57:08

"Una Representación externa para el lenguaje GHC Core" es un documento que se puede encontrar en la instalación de ghc (share/doc/ghc/core.pdf) o en Internet.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-25 08:01:36