Principais questões no projeto de uma linguagem
\pause Tipos de dados
- Sistemas de tipo
- Checagem de tipo
- Equivalência, Compatibilidade, Inferência de tipos
\pause Controle de Fluxo
- Avaliação de expressões (aritméticas, atribuição)
- Fluxo estruturado e não-estruturado
\pause Abstração de controle – subprogramas
- Registros de ativação
- Modos de passagem de parâmetros
\pause Abstração de dados – orientação a objeto
- Encapsulamento e herança
- Composição e polimorfismo
\pause Concorrência
Processamento de dados
- Manipulação em dados
- Mudanças de estado
\pause Computador IAS (1952)
- Um dos primeiros a misturar código e dados em memória
- Ausência de clock para regular o tempo das instruções
- Tempo da adição: 62
${μ}s$ – multiplicação: 713${μ}s$
Reservar, acessar e manipular regiões de memória
Utilização mais simples, clara
\pause Problemas
- Dados são diferentes
1 1.0 "Aurora"
- Tamanho dos dados são diferentes
- Operações válidas e inválidas
1 + 1 = 2 1 + "Aurora" = ?
\pause Solução: Tipos de dados de variáveis
Determinam a classe de valores que podem ser
- Armazenados em uma variável em memória
- Passados como parâmetro
- Resultantes de uma expressão
\pause Informação de tipo é usada para
- Prevenir ou detectar construções incorretas
- Determinar métodos de representação de dados
- Definir métodos de manipulação de dados
Facilita o entendimento de um algoritmo
\pause Possibilita detectar vários erros
1 + "Aurora"
a_number + a_string
strcat (a_number, a_string)
\pause Por exemplo, o compilador pode
- Determinar o espaço necessário para variáveis
- Como proceder para a implementação das operações
\pause Existe alguma desvantagem?
- \pause Considerando que é mais fácil escrever código correto do que provar que escrevemos um código correto
- \pause Escolha entre tipagem estática versus dinâmica
Tipos são importantes
\pause Fortran
- Tipos simples (inteiros, reais)
- Tipos estruturados (arranjos)
\pause Cobol
- Registros
\pause Lisp
- Listas
\pause Algol68
- Tipos definidos pelo usuário
\pause Simula67, Smalltalk
- Tipos abstratos de dados, classes
\pause Qual o próximo?