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) Monique L. B. Monteiro

Apresentações semelhantes


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

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

2 Resenha de Artigo - Projeto CIn/UFPE – Essência do Artigo Propor um modelo otimizado e simplificado de compilação de linguagens funcionaisPropor um modelo otimizado e simplificado de compilação de linguagens funcionais Expor em detalhes o funcionamento da Spineless Tagless G-MachineExpor em detalhes o funcionamento da Spineless Tagless G-Machine

3 Resenha de Artigo - Projeto CIn/UFPE – Relevância para o HS.NET Entender o modelo básico de compilação utilizado pelo GHCEntender o modelo básico de compilação utilizado pelo GHC Promover maior intimidade com a compilação de linguagens funcionais em geralPromover maior intimidade com a compilação de linguagens funcionais em geral

4 Resenha de Artigo - Projeto CIn/UFPE – STG – Visão geral Máquina abstrata projetada para linguagens funcionais não estritas de alta ordemMáquina abstrata projetada para linguagens funcionais não estritas de alta ordem Utiliza uma linguagem intermediária funcional – STG LanguageUtiliza uma linguagem intermediária funcional – STG Language C como linguagem alvoC como linguagem alvo EficienteEficiente Linguagens fortemente tipadas, puramente funcionais e lazyLinguagens fortemente tipadas, puramente funcionais e lazy

5 Resenha de Artigo - Projeto CIn/UFPE – Compilação de Haskell Várias transformações...

6 Alternativas de Implementação

7 Resenha de Artigo - Projeto CIn/UFPE – Implementação Combinação de várias outras técnicasCombinação de várias outras técnicas Origens em técnicas de redução de grafosOrigens em técnicas de redução de grafos Representação deRepresentaçã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 Resenha de Artigo - Projeto CIn/UFPE – Closures Objetos do heapObjetos do heap –Head normal form (ou valores) –Objetos não avaliados (thunks) Head Normal formHead Normal form –Função-valor –Dados Normal FormNormal Form –Não contém thunks Closures

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

10 Resenha de Artigo - Projeto CIn/UFPE – Thunks Computação “suspensa”Computação “suspensa” Representados por closuresRepresentados por closures Atualizados na primeira avaliaçãoAtualizados na primeira avaliação Não são aplicações parciaisNão são aplicações parciais Não são construtoresNão são construtores

11 Resenha de Artigo - Projeto CIn/UFPE – Atualizações Naïve reduction modelNaï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)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 Resenha de Artigo - Projeto CIn/UFPE – Atualizações Self-updating model (Auto-atualização)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!Nem sempre a atualização precisa ser feita!

13 Resenha de Artigo - Projeto CIn/UFPE – Atualização: Exemplo Modelo de auto-atualizaçãoModelo de auto-atualização Código Variáveis Livres Antes de atualizar Depois de atualizar (valor pequeno) TailHead Código do Cons Depois de atualizar (valor grande) Código de indireção Valor

14 Resenha de Artigo - Projeto CIn/UFPE – Atualização: Exemplo Modelo de célulaModelo de célula 0 Código Variáveis Livres Antes de atualizarDepois de atualizar 1 Valor

15 Resenha de Artigo - Projeto CIn/UFPE – Aplicação de Funções CurrificaçãoCurrificação –Tipo de f pode ser a -> (b -> a) (f 1 2) = ((f 1) 2) (f 1 2) = ((f 1) 2) (map (f 1) xs) (map (f 1) xs) f x y = x

16 Resenha de Artigo - Projeto CIn/UFPE – Aplicação da Funções Modelo eval-applyModelo 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)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 Resenha de Artigo - Projeto CIn/UFPE – Modelo push-enter Adequado para uso de funções currificadasAdequado para uso de funções currificadas Os 3 argumentos são empilhadosOs 3 argumentos são empilhados apply f x y z = f x y z

18 Resenha de Artigo - Projeto CIn/UFPE – Modelo push-enter Não há alocação explícita de quadros de ativaçãoNã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 heapPilha de avaliação contígua ao invés de lista ligada de quadros alocados na heap Melhor performance (localidade espacial)Melhor performance (localidade espacial) Outra alternativa:  v,G  -machineOutra 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 Resenha de Artigo - Projeto CIn/UFPE – Tipos Algébricos Compiladores implementam tipos built-in de forma “mágica”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!Mecanismo genérico para compilação de tipos algébricos deveria ser eficiente para tipos built-in! Compilação de expressões caseCompilação de expressões case

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


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

Apresentações semelhantes


Anúncios Google