Domínios de Programação
-
Upload
lesley-dyer -
Category
Documents
-
view
29 -
download
1
description
Transcript of Domínios de Programação
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
ULA UC
CPU
E/S
instruções e dados (“piped”)
resultados(“piped”)
GARGALO de Von Newmann
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
Núcleo daMáquina
Interpretador de Macroinstruções
Sistema Operacional
Comp.PascalComp.
FORTRAN
Interp.LISP
Comp.C
Comp.Ada
Assembler
Interp.comandos
SO
...
O processo de compilaçãoPrograma-fonte
Analisador Léxico
Analisador Sintático
Analisador SemânticoGerador de código intermediário
Gerador de código
Máquina
OtimizaçãoTabela de símbolos
Resultados
tokens
parse trees
cód.intermediário
alto nível
ling. máquina - baixo níveldados deentrada
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