A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones} Monique L.

Apresentações semelhantes


Apresentação em tema: "Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones} Monique L."— Transcrição da apresentação:

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

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 Várias transformações...

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 Objetos do heap Closures Head Normal form Normal Form
Head normal form (ou valores) Objetos não avaliados (thunks) Head Normal form Função-valor Dados Normal Form Não contém thunks Closures

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

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 Cell model (Modelo de célula)
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 Depois de atualizar (valor grande) Depois de atualizar (valor pequeno)
Atualização: Exemplo Modelo de auto-atualização Variáveis Livres Antes de atualizar Código Depois de atualizar (valor grande) Código de indireção Depois de atualizar (valor pequeno) Tail Head Valor Código do Cons

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

15 Aplicação de Funções Currificação f x y = x
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 Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones} Monique L. B. Monteiro


Carregar ppt "Resenha do Artigo Implementing lazy functional languages on stock hardware: the Spineless Tagless G-Machine (Parte I) (Simon L. Peyton Jones} Monique L."

Apresentações semelhantes


Anúncios Google