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

Slides:



Advertisements
Apresentações semelhantes

Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Seminários de Compiladores
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Alocação Dinâmida de Memória
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
Rafael Pinto Frederico Corrêa
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Construção de Compiladores
Gustavo Vieira Pereira
09/03/10 20:13 Claudio de Oliveira – 1/21.
Robson Godoi / Sandra Siebra
Otavio Bergmann e Raphael Miollo Parte 2 – Investigação e apresentação.
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Alocação Dinâmica de Memória Professor Mário Dantas
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Implementar Listas em Linguagem Funcional II
Adriano da Silva Castro
Linguagem de Programação II Parte IX
Sistemas Operacionais
INTELIGÊNCIA ARTIFICIAL
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
MapReduce Conceitos e Aplicações
Implementação de Linguagens Funcionais
Organização do Ambiente de Execução (Runtime System)
Estudo dos Conceitos e Paradigmas de Programação
Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Tópicos Avançados em Linguagens Computacionais – IF724
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Paradigma Funcional Apresentação de LF1.
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Ambiente de Execução - Rotinas
Paradigma funcional.
Computação L1: Infra-Estrutura Básica
Software Básico Nível ISA Capítulo 5 Mitsuo Takaki
Capítulo VIII Ambientes de Execução
Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje.
Documentação de Software
Introdução O que se espera de um sistema de computação?
Back-End Compilação aula-11-back-end.pdf.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
Lambda Cálculo & Programação Funcional
8088 Assembly Software Básico Mitsuo Takaki.
PCS - Departamento de Engenharia de Computação e Sistemas Digitais Projeto de Formatura – Turmas 2010 Integrantes: Professor Orientador: Co-orientador:
Algoritmos e Programação I
Resenha do Artigo Making a fast curry Push/enter vs eval/apply for higher- order languages Monique L. B. Monteiro (Simon Marlow, Simon.
Geração de Código Fase final do compilador
GARBAGE COLLECTOR 1 UNIVERSIDADE FEDERAL DO PARÁ - UFPA.
Computabilidade e Linguagens Formais
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Engenharia de Sistemas Embarcados Aula 4: O Ambiente de Desenvolvimento.
Lógicas Combinatoriais e Implementações Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco.
COMPILADORES 07 Prof. Marcos.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Estrutura de Dados Prof. André Cypriano M. Costa
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

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 {mlbm}@cin.ufpe.br

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

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

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

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

Alternativas de Implementação

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

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

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

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

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

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!

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

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

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

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”

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

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

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

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 {mlbm}@cin.ufpe.br