1 / 20

Resenha do Artigo

Monique L. B. Monteiro {mlbm}@cin.ufpe.br. Resenha do Artigo. Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I). (Simon L. Peyton Jones}. Essência do Artigo. Propor um modelo otimizado e simplificado de compilação de linguagens funcionais

marli
Download Presentation

Resenha do Artigo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Monique L. B. Monteiro {mlbm}@cin.ufpe.br Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones}

  2. Essência do Artigo • Propor um modelo otimizado e simplificado de compilação de linguagens funcionais • Expor em detalhes o funcionamento da Spineless Tagless G-Machine

  3. Relevância para o HS.NET • Entender o modelo básico de compilação utilizado pelo GHC • Promover maior intimidade com a compilação de linguagens funcionais em geral

  4. STG – Visão geral • Máquina abstrata projetada para linguagens funcionais não estritas de alta ordem • Utiliza uma linguagem intermediária funcional – STG Language • C como linguagem alvo • Eficiente • Linguagens fortemente tipadas, puramente funcionais e lazy

  5. Várias transformações... Compilação de Haskell

  6. Alternativas de Implementação

  7. Implementação • Combinação de várias outras técnicas • Origens em técnicas de redução de grafos • Representação de • Funções-valor • Dados • Expressões não avaliadas • Aplicação de funções • Estruturas case em dados de tipos algébricos

  8. Closures Closures • Objetos do heap • Head normal form (ou valores) • Objetos não avaliados (thunks) • Head Normal form • Função-valor • Dados • Normal Form • Não contém thunks

  9. Variáveis Livres Código Funções - Computação “suspensa” - Bloco de código compartilhado - Denominado closure - Para entrar na closure: ponteiro de ambiente aponta para a mesma

  10. Thunks • Computação “suspensa” • Representados por closures • Atualizados na primeira avaliação • Não são aplicações parciais • Não são construtores

  11. Atualizações • Naïve reduction model • Atualiza após cada redução • Um thunk pode ser atualizado com outro: atualização repetida • Cell model (Modelo de célula) • Flag de status • Já foi avaliado: retorna o valor • Não foi avaliado: “entra”, calcula o valor • Código chamador atualiza o valor e a flag

  12. Atualizações • Self-updating model (Auto-atualização) • Utilizado pela STG • Atualização feita pelo código interno ao thunk • Valor é computado e atualizado OU simplesmente retornado • Valor pode ser representado por indireção • Não há testes • Deve possuir ponteiro para código • Nem sempre a atualização precisa ser feita!

  13. Antes de atualizar Variáveis Livres Depois de atualizar (valor grande) Depois de atualizar (valor pequeno) Head Tail Código de indireção Atualização: Exemplo • Modelo de auto-atualização Código Valor Código do Cons

  14. Antes de atualizar 0 1 Variáveis Livres Código Atualização: Exemplo • Modelo de célula Depois de atualizar Valor

  15. Aplicação de Funções • Currificação • Tipo de f pode ser a -> (b -> a) (f 1 2) = ((f 1) 2) (map (f 1) xs) f x y = x

  16. Aplicação da Funções • Modelo eval-apply • Funcao é avaliada • Argumentos são avaliados • Valor-função é aplicado ao argumento • Avaliação trivial para funções conhecidas • Modelo push-enter (STG, G-machine, TIM) • Baseado em redução de grafo • Coloca-se o argumento na pilha de avaliação • Tail-call (ou entra) a função • Não há “return”

  17. Modelo push-enter • Adequado para uso de funções currificadas • Os 3 argumentos são empilhados apply f x y z = f x y z

  18. Modelo push-enter • Não há alocação explícita de quadros de ativação • Pilha de avaliação contígua ao invés de lista ligada de quadros alocados na heap • Melhor performance (localidade espacial) • Outra alternativa: v,G-machine • Espaço de trabalho alocado em cada closure • Mal uso de espaço • Aplicação parcial: cópia dos argumentos para a closure da aplicação • Espaço alocado pode não ser suficiente

  19. Tipos Algébricos • Compiladores implementam tipos built-in de forma “mágica” • Pior performance para tipos algébricos definidos pelo usuário • Mecanismo genérico para compilação de tipos algébricos deveria ser eficiente para tipos built-in! • Compilação de expressões case

  20. Monique L. B. Monteiro {mlbm}@cin.ufpe.br Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones}

More Related