Domínios de Programação

Propaganda
Domínios de Programação
•
•
•
•
•
•
Aplicações Científicas
Aplicações Comerciais
Inteligência Artificial
Programação de Sistemas
Linguagens de Scripting
Linguagens para Propósitos Especiais
Domínios de Programação
Aplicações Científicas
•
•
•
•
Estruturas de dados simples: matrizes
Operações aritméticas em ponto flutuante
FORTRAN, ALGOL 60
Nenhuma linguagem é significativamente
melhor do que o FORTRAN até hoje
Domínios de Programação
Aplicações Comerciais
• Facilidade para produzir relatórios
• Exemplo: COBOL (60)
• Há pouco desenvolvimento nas linguagens
de aplicação comercial, além do que foi
feito para COBOL (usado ainda hoje)
Domínios de Programação
Inteligência Artificial
• Computações simbólicas, e não numéricas
• LISP
• PROLOG
Domínios de Programação
Programação de Sistemas
• Desenvolvimento de software básico
(sistemas operacionais)
• Linguagens para programação de sistemas
exigem execução rápida
• PL/S (IBM), BLISS (Digital), Extended
ALGOL (Burroughs)
• Unix e C (poucas restrições de segurança)
Domínios de Programação
Linguagens de Scripting
• Script é uma lista de comandos em um
arquivo, para serem executados “em lote”
• sh
• ksh (Bell Labs)
• awk (Aho, Wienberger e Kernighan)
• tcl
• Perl
Critérios de Avaliação de
Linguagens
•
•
•
•
Legibilidade
Facilidade de Escrita (“writability”)
Confiabilidade
Custo
Critérios de Avaliação de Linguagens
Legibilidade
• Simplicidade: poucos componentes básicos, cuidado
com a multiplicidade de recursos, overloading inteligente
de operadores
• Ortogonalidade: conjunto consistente de regras para
combinar construções primitivas, com poucas exceções
• Instruções de controle
• Tipos e estruturas de dados
• Sintaxe
Critérios de Avaliação de Linguagens
Facilidade de escrita
• Simplicidade: grande número de construções
diferentes leva a dificuldades para escrever programas
• Suporte para abstração: capacidade de definir
estruturas/operações complexas ignorando detalhes.
Abrstração pode ser em dados e em código.
• Expressividade: adequação das formas de especificar
computações
Critérios de Avaliação de Linguagens
Confiabilidade
•
•
•
•
Verificação de tipos
Tratamento de exceções
Aliasing
Pouca legibilidade ou pouca facilidade de
escrita tendem a gerar programas pouco
confiáveis
Critérios de Avaliação de Linguagens
Custo
•
•
•
•
•
•
•
Treinamento
Escrita de código
Compilação
Execução
Implementação
Manutenção
da má confiabilidade
Influências sobre o Projeto de
Linguagens
• Arquitetura dos computadores
• Metodologias de programação ao longo da
história
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
• Últimos 40 anos: imensa maioria das
linguagens de programação foi projetada em
função da arquitetura Von Neumann
• As linguagens baseadas nesta arquitetura
são denominadas linguagens imperativas
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
Modelo da arquitetura de Von Newmann
MEMÓRIA
resultados
(“piped”)
GARGALO de
Von Newmann
ULA
instruções
e dados (“piped”)
UC
CPU
E/S
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
• Execução de código numa máquina Von
Newmann: ciclo “fetch-execute”
• Programas: residem na memória mas são
executados na CPU (cada instrução é
transferida da memória para o processador)
• Endereço da próxima instrução: mantido
num registro chamado “program counter”
Influências sobre o Projeto de Linguagens
Arquitetura dos computadores
EXECUÇÃO
• inicialize o program counter
• repeat forever
– fetch
– decode
– execute
Influências sobre o Projeto de Linguagens
Metodologias de Programação
• Final anos 60: Programação Estruturada
• Anos 70: projeto “top-down”, refinamento,
modularidade, verificação de tipos, mais instruções de
controle
• Final anos 70: abstração de dados
• Anos 80: programação orientada a objetos
• Anos 90: concorrência, internet
Categorias de Linguagens
• Imperativas: Pascal, C...
– Ordem específica das instruções é importante
• Orientadas a Objetos: C++, Delphi, Java...
– Hierarquização, classificação, extrema
modularização/abstração (código e dados)
• Funcionais (LISP) e Lógicas (Prolog)
– Baseadas na computação de funções ou regras
de inferência. A recursão é um conceito natural
nestas linguagens
“Trade-offs” no Projeto de
Linguagens
• Confiabilidade vs. Custo de manutenção
• Expressividade vs. Legibilidade
• Flexibilidade vs. Segurança
Métodos de Implementação
• Compilação
• Interpretação Pura
• Sistemas híbridos
Interface de computadores virtuais
Comp.
Comp.Pascal FORTRAN
Comp.
C
Sistema Operacional
Interpretador de
Macroinstruções
Comp.
Ada
Núcleo da
Máquina
Interp.
LISP
Interp.
comandos
SO
...
Assembler
O processo de compilação
Programa-fonte
alto nível
Analisador Léxico
tokens
Analisador Sintático
parse trees
Tabela de
símbolos
Analisador Semântico
Gerador de código intermediário
Gerador de código
ling. máquina - baixo nível
dados de
entrada
Máquina
Resultados
Otimização
cód.
intermediário
Interpretação pura
• Programas são interpretados por outro
programa (interpretador), sem conversão
• Interpretador = simulador de software,
máquina virtual cujas instruções são um
programa em ling. alto nível
• vantagem: facilidade de depuração
• desvantagem: lentidão, muito espaço de
memória
• Exemplos: Linguagens de scripting, LISP...
Sistemas Híbridos
• Perl
• Implementações iniciais de Java
–
–
–
–
–
código intermediário de Java = “código de bytes”
portabilidade
cód. bytes + interpretador = Java Virtual Machine
hoje: tradução do cód. bytes p/ cód. máquina
applets Java = são baixados em código de bytes
Download