o tipo e o tempo
Post on 14-Jan-2015
664 Views
Preview:
DESCRIPTION
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