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

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

Implementação de Linguagens Funcionais

Apresentações semelhantes


Apresentação em tema: "Implementação de Linguagens Funcionais"— Transcrição da apresentação:

1 Implementação de Linguagens Funcionais
Eudes Raphael Thiago Arrais

2 Roteiro Arquitetura Lambda-calculus Lambda Lifting Redução de Grafos
Máquina de Templates Referências

3 Arquitetura

4 Lambda-calculus Modelo teórico sob o qual se baseiam a semântica e a implementação de linguagens funcionais. lx. E : É uma função que assume um argumento x e retorna uma expressão E (que pode depender de x)

5 Lambda-calculus Bound X free variables Seja lx.x (lz.x y z) (y z)
x é bound da abstração mais externa y não é bound para ambas abstrações Z é bound apenas na abstração mais interna Uma abstração l sem variáveis livres é um combinator

6 Lambda-calculus b – conversion: Operação de substituição bidirecional
(lx.E) E’ «b E[E’/x] Reduz a aplicação de uma abstração l

7 Lambda-calculus Redex: Reducible Expression
ou um uma aplicação de uma abstração ou uma aplicação de uma função pre-definida Uma expressão l está na forma normal se ela não possui nenhum redex

8 Lambda-calculus Avaliação: Seqüência de reduções
Applicative-order reduction Eager Evaluation Normal-order reduction Lazy Evaluation Uma expressão está na WHNF Quando não mais é possível realizar reduções na Normal-order reduction

9 Lambda-calculus Strict functions: precisam de fato do valor de seus argumentos g é restrita ao segundo argumento se e somente se g x ^ z = ^ Lazy functions: Podem ser avaliadas na falta de algum argumento

10 Lambda-lifting Consiste em técnica de transformar programas funcionais com definições locais, em um programa contendo apenas definições globais Cada ocorrência de uma variável livre no corpo da função é substituída pela adição de um novo parâmetro formal

11 Lambda-lifting Permite full laziness, pela maximização do compartilhamento de definições Evita a criação de closures em tempo de execução

12 Super-combinadores Free expression é uma expressão que não contém nenhuma instância de uma bound variable Maximal free variables (mfv) são expressões livres que não contém nenhuma outra expressão livre. Super-combinadores são funções que abstraem suas mfvs como parâmetros

13 Super-combinadores Exemplo:

14 Redução de Grafos Núcleo da execução de um programa funcional
Consiste em substituir uma expressão redutível (redex) por sua forma reduzida Lambda-Calculus a b e h-conversão

15 Redução de Grafos Expressões representadas em forma de grafo
Cada nó é fisicamente representado em células, que podem ter tamanho fixo ou variável Valores Boxed e Unboxed

16 Redução de Grafos - Algoritmo
Até que não haja mais nenhum redex (forma normal) Selecione o redex mais externo (Normal-order reduction) Reduza-o (a b e h-reduction) Substitua o redex pelo resultado da redução Obs: Se uma função for restrita a algum argumento, ele pode ser avaliado antes

17 Redução de aplicações b - Reduction
1.Função definida pelo usuário (supercombinador) Substituir o nó de aplicação pelo corpo da função, e os parâmetros formais por ponteiros para os argumentos 2.Função pré-definida (primitivas) Se os argumentos não estiverem reduzidos, reduzir Avaliar a função

18 Redução de Grafos - Compartilhamento de cópias
Se dois grafos são semelhantes, apenas uma cópia é preciso. Aumenta o compartilhamento no grafo Uma implementação que maximiza o compartilhamento é dita Fully Lazy Garbage Collection se faz necessária

19 Redução de Grafos – Um exemplo
square x = x * x ; main = square (square 3) @ / \ square @ / \ square 3 1 main

20 Redução de Grafos – Um exemplo
@! / \ square @ / \ square 3 @! / \ @ \ / * / \ square 3 1

21 Redução de Grafos – Um exemplo
@ / \ @ \ / * / \ square 3 @ / \ @ \ / * / \ square 3 2.1 @ / \ @ \ / * / \ @ \ / \__ * 1

22 Redução de Grafos – Um exemplo
@ / \ @ \ / * / \ @ \ / \__ * @! / \ @ \ / \__ 9 * 2.2 2.2 81

23 Redução de Grafos - Função projetora: é uma função cujo corpo é apenas uma variável Causam perda de compartilhamento Seja head [f E] Substituir o nó faz com que a aplicação (f E) seja duplicada Solução: Nó de indireção (ponteiro para outro nó)

24 Redução de Grafos - Nós de indereção são ineficientes
Deve ser testada indireção toda vez que uma operação for realizada Pode formar correntes de indireção Solução: Boa parte dos argumentos pode ser avaliada antes da aplicação da função projetora

25 Máquina de Templates Máquina de estados
Stack: Pilha de endereços, relativos ao heap Dump: Pilha de pilhas Heap: Lista de nós identificadas por endereços Globals: Lista os endereços dos supercombinadores

26 Máquina de Templates Transições de Estado Aplicação Instanciação T1 T2

27 Máquina de Templates Estrutura principal Compile
> runProg = showResults . eval . compile . Parse Compile Transforma um programa em um estado inicial

28 Máquina de Templates Estágio de Avaliação T1 T2
> apStep :: TiState -> Addr -> Addr -> TiState > apStep (stack, dump, heap, globals, stats) a1 a2 > = (a1 : stack, dump, heap, globals, stats) T1 > scStep :: TiState -> Name -> [Name] -> CoreExpr -> TiState > scStep (stack, dump, heap, globals, stats) sc_name arg_names body > = (new_stack, dump, new_heap, globals, stats) > where > new_stack = result_addr : (drop (length arg_names+1) stack) > > (new_heap, result_addr) = instantiate body heap env > env = arg_bindings ++ globals > arg_bindings = zip2 arg_names (getargs heap stack) T2

29 Máquina de Templates Instanciação de supercombinador
Função instantiate Consiste em percorrer o nó do corpo do supercombinador, substituindo os parâmetros formais pelos argumentos

30 Máquina de Templates Atualização
Para evitar avaliar uma expressão mais de uma vez, adiciona-se um novo tipo de nó: um nó de indireção > NInd a1 É preciso adicionar uma nova transição T3

31 Máquina de Templates Atualização
Ao avaliar-se um supercombinador, substitui-se o nó no heap por um nó de indireção Avaliações subseqüentes só precisam seguir o nó de indireção T2

32 Garbage Collection Mark-scan collection Marcar os nós acessíveis
Escanear todo o heap, eliminando nós não marcados

33 Referências Jones, S. e Lester, D. Implementing Functional Languages: a tutorial Functional Programming - UWA


Carregar ppt "Implementação de Linguagens Funcionais"

Apresentações semelhantes


Anúncios Google