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:
4 answers
GHC Core es el lenguaje System FC al que se traduce todo Haskell. La gramática (aproximada) para Core viene dada por:
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):
Los documentos principales para aprender sobre GHC Core son:
- Una Representación Externa para el Lenguaje GHC Core , Tolmach, 2001
- ghc/compiler / CoreSyn, la propia definición de GHC
- Secretos del compilador de Glasgow Haskell inliner, Peyton Jones and Marlow, 1999. Core se describe en la sección 2.3, incluyendo detalles sobre la ocurrencia anotaciones de análisis.
- Un optimizador basado en la transformación para Haskell, Peyton Jones y Santos, 1998. Core se describe en S3, incluyendo una discusión del polimorfismo y las lecturas operativas de Core.
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:
Los nombres divertidos en Core están codificados en la "codificación Z":
Tipos y tipos de GHC Core (del documento de Tolmach):
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.
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.
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
.
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.
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