o tipo e o tempo

Post on 14-Jan-2015

664 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Palestra sobre sistemas de tipos e sistemas híbridos entre tipagem estática e dinâmica apresentada no QConSP 2012.

TRANSCRIPT

O Tipo e o TempoAndrei de A. Formiga

Universidade Federal da Paraíba

Tipagem Estática vs. Dinâmica

Sobre

Sobre (2)

• Vale Tudo: Tipagem Estática vs. Dinâmica

• Um caminho do meio

Palestrante

• Graduação em Eng. Elétrica

• Experiência Profissionalo SGBD

o Jogos

o Monitoramento e Controle

Palestrante (2)• Mestrado e Doutorado

o Linguagens de Programação

o Proc. de Documentos, Rec. de Padrões

• Pesquisao Linguagens

o Comp. Paralela

o Aprendizado de Máquina

Tipologia Básica

Tipos: o que são?

• Tipo é um conjunto de valores

• Valores pertencem a um ou mais tipos

• Variável V tem Tipo T: V só pode assumir valores do conjunto T

Fun calculus!

• Expressões:o fun x = Eo F E

• Regraso (fun x = E1) E2 E1[x=E2]

Fun Calculus: Constantes

• Booleanos: true, false

• Inteiros: 0, 1, …

• Operações: +, -, *, /, …

Fun Calculus: Exemplos

• quad fun x = x * x

• quad 5

• quad 5 (fun x = x * x) 5 5 * 5

Fun Calculus: Problemas

• quad true

• 5 + true

• 3 / 0

?

Tipos Simples• Expressões

o fun x: T = Eo F E

• Regras de Tiposo E: T2, (fun x: T1 = E): T1T2o F: T1T2, E:T1, (F E): T2

• Regra de Avaliação (igual)

Exemplos

• quad fun x: Int = x * x

• quad: IntInt

• true: Bool

• quad true: ? Erro de tipo!

-Cálculo com tipos simples

Mais Detalhes

• Types and Programming Languages

• Benjamin Pierce

Garantias

• Corretudeo Type safety/soundnesso “Well-typed programs can’t go wrong”

• Completude

Estático ou Dinâmico?

• Duas etapas de avaliação

• Tende p/ verificação estática

• Cálculo não prescreve momento de verificar

Estático e Dinâmico

Interpretação

Interpretador

Entrada

Programa

Saída

Compilação

Programa Compilado

Entrada

Programa

Saída

Compilador

Verificação estática

Compilação como Otimização

• Fazer parte da avaliação antes

• Incluindo verificações estáticas

• Avaliação Parcial (partial evaluation)

Confiabilidade

• Efeito colateral da compilação

• Tipos vs. testes:o Unit testing isn’t enough, you need static

typingo http://bit.ly/RlqUzJ

Mais Estágios?

• Macros

• Aspectos

• Multi-Stage Programming

Verificação vs. Declaração

• Declarar os tipos ou não? o (declaração opcional)

• Verificar os tipos estatica ou dinamicamente?

Declaração/Estática

• C, C++, Java, etc.

• Visão geral da tipagem estática

Sem Declaração/Dinâmica

• Python, Ruby, JavaScript, etc

• Visão geral da tipagem dinâmica

Decl. Opcional/Estática

• ML, Haskell

• Variáveis locais: C#, Scala, etc

Decl. Opcional/Dinâmica

• Common Lisp, Julia, Dart

• Possibilidade de Verificação Estática

Sistemas de TiposMais e mais features

Limitações dos Tipos Simples

• Tipos compostos

• Containers

• Hierarquias de tipos

Registros / Classes

• Possibilidade de criar novos tipos

• type Point = { x: Int; y: Int }

Registros / Classes

Polimorfismo Paramétrico

• Containers

• Ex.: pontos inteiros ou float

• type PointI = { x: Int; y: Int }

• type PointF = { x: Float; y: Float }

Polimorfismo Paramétrico

• Construtor com parâmetro de tipo

• type Point[T] = { x: T; y: T }

Tipos Recursivos

• Definir tipos em função deles mesmos

• Uma árvore é:o Uma árvore vazia; ouo Um nó com dois filhos que são árvores

Subtipos

• Relações hierárquicas entre tipos

• Geral/Específico

• Relaciondo à herança em OO

• A <: B

Subtipos

Mais• Phantom Types

• GADTs

• Higher-kinded Types

• Bounded quantification

• Tipos existenciais

Linguagens Atuais

• Haskell (+extensões)o Polimorfismo paramétricoo Phantom Typeso GADTso Higher-Kinded Types

• OCamlo Polimorfismo paramétricoo Phantom Typeso GADTs

Linguagens Atuais

• Javao Polimorfismo paramétricoo Tipos existenciais (wildcards)

• Scalao Polimorfismo paramétricoo Higher-kinded typeso Anotações de variânciao GADTso etc…

Muito Complexo?• Benjamin Pierce, “Types Considered Harmful”

• Luca Cardelli: “I was not the only one to suspect that I was getting lost in type theory”

• Erik Meijer, “Static Typing Where Possible, Dynamic Typing When Needed”

Tipos e Proposições

• Verificador de tipos é um provador de teoremas

• Tipagem 100% estática exige provar tipos em todo o código

• Tipagem 100% dinâmica joga fora informação útil

Sistemas Híbridos e Exemplos

Sistemas Híbridos

• Gradual Typing

• Blame calculus

Common Lisp

• Declaração opcional de tipos

• Objetivo: otimização

• Possível fazer verificações estáticas

Common Lisp

(iter (for el in number-list) (count (oddp el))))

(iter (for el in number-list) (declare (fixnum el)) (count (oddp el))))

Typed Racket

• Declaração opcional de tipos

• Verificação estática quando possível

• Verificação dinâmica quando necessário

Typed Racket

#lang typed/racket(: sum-list ((Listof Number) -> Number))(define (sum-list l) (cond [(null? l) 0] [else (+ (car l) (sum-list (cdr l)))]))

Dart

• Declaração opcional de tipos (Dynamic)

• Objetivo: Documentação e verificações

• Tipagem dinâmica com verificações estáticas

Julia

• Declaração opcional + verif. Dinâmica

• Objetivo principal: Desempenho

• Possível para verificação estática

Perguntas?

• Twitter: @andreiformiga

• Blog: http://andreiformiga.com/blog

top related