O Tipo e o Tempo
-
Upload
andrei-formiga -
Category
Technology
-
view
664 -
download
0
description
Transcript of O Tipo e o Tempo
![Page 1: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/1.jpg)
O Tipo e o TempoAndrei de A. Formiga
Universidade Federal da Paraíba
![Page 2: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/2.jpg)
Tipagem Estática vs. Dinâmica
![Page 3: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/3.jpg)
Sobre
![Page 4: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/4.jpg)
Sobre (2)
• Vale Tudo: Tipagem Estática vs. Dinâmica
• Um caminho do meio
![Page 5: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/5.jpg)
Palestrante
• Graduação em Eng. Elétrica
• Experiência Profissionalo SGBD
o Jogos
o Monitoramento e Controle
![Page 6: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/6.jpg)
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
![Page 7: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/7.jpg)
Tipologia Básica
![Page 8: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/8.jpg)
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
![Page 9: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/9.jpg)
Fun calculus!
• Expressões:o fun x = Eo F E
• Regraso (fun x = E1) E2 E1[x=E2]
![Page 10: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/10.jpg)
Fun Calculus: Constantes
• Booleanos: true, false
• Inteiros: 0, 1, …
• Operações: +, -, *, /, …
![Page 11: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/11.jpg)
Fun Calculus: Exemplos
• quad fun x = x * x
• quad 5
• quad 5 (fun x = x * x) 5 5 * 5
![Page 12: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/12.jpg)
Fun Calculus: Problemas
• quad true
• 5 + true
• 3 / 0
?
![Page 13: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/13.jpg)
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)
![Page 14: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/14.jpg)
Exemplos
• quad fun x: Int = x * x
• quad: IntInt
• true: Bool
• quad true: ? Erro de tipo!
![Page 15: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/15.jpg)
-Cálculo com tipos simples
![Page 16: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/16.jpg)
Mais Detalhes
• Types and Programming Languages
• Benjamin Pierce
![Page 17: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/17.jpg)
Garantias
• Corretudeo Type safety/soundnesso “Well-typed programs can’t go wrong”
• Completude
![Page 18: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/18.jpg)
Estático ou Dinâmico?
• Duas etapas de avaliação
• Tende p/ verificação estática
• Cálculo não prescreve momento de verificar
![Page 19: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/19.jpg)
Estático e Dinâmico
![Page 20: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/20.jpg)
Interpretação
Interpretador
Entrada
Programa
Saída
![Page 21: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/21.jpg)
Compilação
Programa Compilado
Entrada
Programa
Saída
Compilador
Verificação estática
![Page 22: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/22.jpg)
Compilação como Otimização
• Fazer parte da avaliação antes
• Incluindo verificações estáticas
• Avaliação Parcial (partial evaluation)
![Page 23: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/23.jpg)
Confiabilidade
• Efeito colateral da compilação
• Tipos vs. testes:o Unit testing isn’t enough, you need static
typingo http://bit.ly/RlqUzJ
![Page 24: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/24.jpg)
Mais Estágios?
• Macros
• Aspectos
• Multi-Stage Programming
![Page 25: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/25.jpg)
Verificação vs. Declaração
• Declarar os tipos ou não? o (declaração opcional)
• Verificar os tipos estatica ou dinamicamente?
![Page 26: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/26.jpg)
Declaração/Estática
• C, C++, Java, etc.
• Visão geral da tipagem estática
![Page 27: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/27.jpg)
Sem Declaração/Dinâmica
• Python, Ruby, JavaScript, etc
• Visão geral da tipagem dinâmica
![Page 28: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/28.jpg)
Decl. Opcional/Estática
• ML, Haskell
• Variáveis locais: C#, Scala, etc
![Page 29: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/29.jpg)
Decl. Opcional/Dinâmica
• Common Lisp, Julia, Dart
• Possibilidade de Verificação Estática
![Page 30: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/30.jpg)
Sistemas de TiposMais e mais features
![Page 31: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/31.jpg)
Limitações dos Tipos Simples
• Tipos compostos
• Containers
• Hierarquias de tipos
![Page 32: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/32.jpg)
Registros / Classes
• Possibilidade de criar novos tipos
• type Point = { x: Int; y: Int }
![Page 33: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/33.jpg)
Registros / Classes
![Page 34: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/34.jpg)
Polimorfismo Paramétrico
• Containers
• Ex.: pontos inteiros ou float
• type PointI = { x: Int; y: Int }
• type PointF = { x: Float; y: Float }
![Page 35: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/35.jpg)
Polimorfismo Paramétrico
• Construtor com parâmetro de tipo
• type Point[T] = { x: T; y: T }
![Page 36: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/36.jpg)
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
![Page 37: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/37.jpg)
Subtipos
• Relações hierárquicas entre tipos
• Geral/Específico
• Relaciondo à herança em OO
• A <: B
![Page 38: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/38.jpg)
Subtipos
![Page 39: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/39.jpg)
Mais• Phantom Types
• GADTs
• Higher-kinded Types
• Bounded quantification
• Tipos existenciais
![Page 40: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/40.jpg)
Linguagens Atuais
• Haskell (+extensões)o Polimorfismo paramétricoo Phantom Typeso GADTso Higher-Kinded Types
• OCamlo Polimorfismo paramétricoo Phantom Typeso GADTs
![Page 41: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/41.jpg)
Linguagens Atuais
• Javao Polimorfismo paramétricoo Tipos existenciais (wildcards)
• Scalao Polimorfismo paramétricoo Higher-kinded typeso Anotações de variânciao GADTso etc…
![Page 42: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/42.jpg)
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”
![Page 43: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/43.jpg)
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
![Page 44: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/44.jpg)
Sistemas Híbridos e Exemplos
![Page 45: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/45.jpg)
Sistemas Híbridos
• Gradual Typing
• Blame calculus
![Page 46: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/46.jpg)
Common Lisp
• Declaração opcional de tipos
• Objetivo: otimização
• Possível fazer verificações estáticas
![Page 47: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/47.jpg)
Common Lisp
(iter (for el in number-list) (count (oddp el))))
(iter (for el in number-list) (declare (fixnum el)) (count (oddp el))))
![Page 48: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/48.jpg)
Typed Racket
• Declaração opcional de tipos
• Verificação estática quando possível
• Verificação dinâmica quando necessário
![Page 49: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/49.jpg)
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)))]))
![Page 50: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/50.jpg)
Dart
• Declaração opcional de tipos (Dynamic)
• Objetivo: Documentação e verificações
• Tipagem dinâmica com verificações estáticas
![Page 51: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/51.jpg)
Julia
• Declaração opcional + verif. Dinâmica
• Objetivo principal: Desempenho
• Possível para verificação estática
![Page 52: O Tipo e o Tempo](https://reader036.fdocumentos.tips/reader036/viewer/2022081414/54b550d04a7959a77c8b46c4/html5/thumbnails/52.jpg)
Perguntas?
• Twitter: @andreiformiga
• Blog: http://andreiformiga.com/blog