O núcleo é a linguagem intermediária do GHC. O Reading Core pode ajudá-lo a entender melhor o desempenho do seu programa. Alguém me pediu documentação ou tutoriais sobre a leitura do Core, mas não consegui encontrar muita coisa.
Que documentação está disponível para leitura do GHC Core?
Aqui está o que eu encontrei até agora:
Respostas:
O GHC Core é o idioma do System FC para o qual todo o Haskell é traduzido. A gramática (aproximada) do Core é dada por:
O Core está intimamente relacionado ao Sistema F mais simples e mais conhecido . Todas as transformações que o GHC realiza no nível Core são refatorações de preservação de tipo dessa representação Core, para melhorar o desempenho. E, não tão conhecido, você pode escrever diretamente no Core para programar o GHC.
O GHC Core se encaixa no pipeline do compilador (como em 2002, sans-LLVM e CMM):
Os documentos principais para aprender sobre o GHC Core são:
Material relacionado que pode ajudar a entender:
O Core, por sua vez, é traduzido para o código STG, que se parece com:
Os nomes engraçados no Core são codificados na "codificação Z":
Tipos e tipos do GHC Core (do artigo de Tolmach):
Finalmente, as instruções do GHC aparecem regularmente na saída do GHC Core, quando você otimiza seu Haskell com as instruções básicas que o GHC conhece. O conjunto de primop é fornecido como um conjunto de funções principais em um arquivo pré-processado.
fonte
Uma dica: se você não se importa com as anotações e coações de tipo, use
-ddump-simpl
junto com a-dsuppress-all
opção A saída Core deve ser muito mais legível.fonte
-dsuppress-all
é realmente útil. Você também pode usá--dsuppress-coercions
lo se quiser se livrar das transmissões (útil quando houver muitos tipos novos por aí).Embora não seja exatamente o idioma central do GHC, como Don menciona, o idioma STG é bastante semelhante. Recentemente, passei pelo exercício de provar a segurança de tipo da linguagem STG + machine e depois descobri que podia entender o Core facilmente.
O texto que eu aprendi sobre STG é bastante acessível: Implementando Idiomas Funcionais Preguiçosos no Hardware de Estoque: A máquina G Spineless Tagless de Simon Peyton-Jones. Grande parte do artigo está relacionada aos detalhes da implementação, mas eu recomendo a seção 4, em particular, como uma explicação de cima para baixo da linguagem STG que fornece motivações para algumas das decisões de design contra-intuitivas e fornece traduções de exemplos conhecidos
map
.fonte
"Uma representação externa para a linguagem principal do GHC" é um documento que pode ser encontrado na instalação do ghc (
share/doc/ghc/core.pdf
) ou na internet .fonte