Core es el lenguaje intermedio de GHC. Reading Core puede ayudarlo a comprender mejor el rendimiento de su programa. Alguien me pidió documentación o tutoriales sobre lectura de Core, pero no pude encontrar mucho.
¿Qué documentación hay disponible para leer GHC Core?
Esto es lo que he encontrado hasta ahora:
Respuestas:
GHC Core es el lenguaje de System FC al que se traduce todo Haskell. La gramática (aproximada) para Core viene dada por:
Core está estrechamente relacionado con el Sistema F más simple y mejor conocido . Todas las transformaciones que GHC realiza en el nivel Core son refactorizaciones de preservación de tipo de esta representación Core, para mejorar el rendimiento. Y, no tan conocido, puede escribir directamente en Core para programar GHC.
GHC Core encaja en la tubería del compilador (como lo fue en 2002, sin LLVM y CMM):
Los documentos principales para aprender sobre GHC Core son:
Material relacionado que puede ayudar a comprender:
Core a su vez se traduce en código STG, que se parece a:
Los nombres divertidos en Core están codificados en la "codificación Z":
Tipos y clases de GHC Core (del artículo de Tolmach):
Finalmente, los primops de GHC aparecen regularmente en la salida de GHC Core, cuando ha optimizado su Haskell a las instrucciones básicas que GHC conoce. El conjunto primop se proporciona como un conjunto de funciones principales en un archivo preprocesado.
fuente
Un consejo: si no le interesan las anotaciones de tipo y las coacciones, úselas
-ddump-simpl
junto con la-dsuppress-all
opción La salida del núcleo debería ser mucho más legible.fuente
-dsuppress-all
Es realmente útil. También puede usarlo-dsuppress-coercions
si solo desea deshacerse de los moldes (útil cuando hay muchos tipos nuevos).Aunque no es exactamente el lenguaje GHC Core, como Don menciona, el lenguaje STG es bastante similar. Recientemente realicé el ejercicio de probar la seguridad de tipo de la máquina STG language +, y luego descubrí que podía entender Core fácilmente.
El texto que solía aprender STG es bastante accesible: Implementación de lenguajes funcionales perezosos en hardware de stock: la máquina G sin etiqueta sin espinas de Simon Peyton-Jones. Gran parte del documento se refiere a los detalles de implementación, pero recomiendo la sección 4 en particular como una explicación de arriba a abajo del lenguaje STG que brinda motivaciones para algunas de las decisiones de diseño contra intuitivas y proporciona traducciones de ejemplos familiares como
map
.fuente
"Una representación externa para el lenguaje principal de GHC" es un documento que se puede encontrar en la instalación de ghc (
share/doc/ghc/core.pdf
) o en Internet .fuente