Lettura di GHC Core


193

Core è il linguaggio intermedio di GHC. La lettura di Core può aiutarti a comprendere meglio le prestazioni del tuo programma. Qualcuno mi ha chiesto documentazione o tutorial sulla lettura di Core, ma non sono riuscito a trovare molto.

Quale documentazione è disponibile per la lettura di GHC Core?

Ecco cosa ho trovato finora:



skillsmatter.com/skillscasts/… potrebbe anche essere utile.
Erik Kaplun,

Risposte:


272

GHC Core è la lingua del System FC in cui tutto l'Haskell è tradotto. La grammatica (approssimativa) per Core è data da:

inserisci qui la descrizione dell'immagine

Il nucleo è strettamente correlato al Sistema F più semplice e meglio conosciuto . Tutte le trasformazioni che GHC esegue a livello di Core sono refactoring di conservazione del tipo di questa rappresentazione Core, per migliorare le prestazioni. E, non così noto, puoi scrivere direttamente in Core per programmare GHC.

GHC Core si inserisce nella pipeline del compilatore (come nel 2002, sans-LLVM e CMM):

inserisci qui la descrizione dell'immagine

I documenti principali per conoscere GHC Core sono:

Materiale correlato che può aiutare a comprendere:

  • L' output GHC -fext-core
  • Ho trascorso molto tempo ad imparare Core leggendo la fonte GHC. Alcuni sono descritti nella mia tesi di laurea del 2002, da pagina 16.
  • Dalla utilizzando il GHC-core strumento, per generare core in un formato ho gusti.

Il core a sua volta viene tradotto in codice STG, che assomiglia a:

inserisci qui la descrizione dell'immagine

I nomi divertenti in Core sono codificati nella "codifica Z":

inserisci qui la descrizione dell'immagine

Tipi e tipi di GHC Core (dall'articolo di Tolmach):

inserisci qui la descrizione dell'immagine

Infine, i primops di GHC compaiono regolarmente nell'output di GHC Core, quando hai ottimizzato Haskell in base alle istruzioni di base di cui GHC è a conoscenza. Il set primop viene fornito come set di funzioni Core in un file pre-elaborato.


61
Ogni singola risposta che dai è sempre ridicolmente completa. Avere un altro voto positivo e continuate così; Mi sto appoggiando a mucchi.
Robert Massaioli,

3
La quantità di documentazione CC-wiki che Don e la comunità generale di Haskell hanno rilasciato tramite SO è sconcertante. Continuate con le buone domande e risposte, tutti!
Dan Burton,

4
So che è menzionato, ma penso che l'utilità di ghc-core debba essere enfatizzata nella risposta.
Nikita Volkov,

24

Un consiglio: se non ti interessano le annotazioni e le coercizioni dei tipi, usate -ddump-simplinsieme -dsuppress-allall'opzione. L'output Core dovrebbe essere molto più leggibile.


5
-dsuppress-allè davvero utile. Puoi anche usarlo -dsuppress-coercionsse vuoi sbarazzarti dei cast (utile quando ci sono molti nuovi tipi in giro).
Tibet,

8

Sebbene non sia esattamente il linguaggio GHC Core, poiché Don menziona il linguaggio STG è abbastanza simile. Di recente ho svolto l'esercizio per dimostrare la sicurezza del tipo del linguaggio + macchina STG, e in seguito ho scoperto di poter capire facilmente Core.

Il testo che ho usato per imparare STG è abbastanza accessibile: implementazione di linguaggi funzionali pigri su hardware di serie: la G-machine senza tag senza spin di Simon Peyton-Jones. Gran parte del documento riguarda i dettagli di implementazione, ma raccomando in particolare la sezione 4 come una spiegazione dall'alto verso il basso del linguaggio STG che fornisce le motivazioni per alcune delle decisioni di progettazione contro-intuitive e fornisce traduzioni di esempi familiari come map.


STG è di livello molto più basso rispetto a Core. La pipeline della compilation è: Haskell -> Core -> STG -> C-- -> Machine Code
Akangka

3

"Una rappresentazione esterna per il GHC Core Language" è un documento che può essere trovato nell'installazione di ghc ( share/doc/ghc/core.pdf) o su Internet .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.