Vous êtes sur la page 1sur 58

Aspectos preliminares

Linguagens de Programação

Marco A L Barbosa

cba
Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.

http://github.com/malbarbo/na-lp-copl
Conteúdo

Razões para estudar conceitos de linguagens de programação

Domı́nios de programação

Critérios para avaliação de linguagens

Influências no projeto de linguagens

Categorias de linguagens

Métodos de implementação

Referências
Razões para estudar conceitos de linguagens de
programação
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias

4 / 27
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias


I Melhorar as condições de escolha da linguagem apropriada
para cada problema

4 / 27
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias


I Melhorar as condições de escolha da linguagem apropriada
para cada problema
I Aumentar a capacidade de aprender novas linguagens

4 / 27
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias


I Melhorar as condições de escolha da linguagem apropriada
para cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens já conhecidas

4 / 27
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias


I Melhorar as condições de escolha da linguagem apropriada
para cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens já conhecidas
I Entender a importância da implementação

4 / 27
Razões para estudar conceitos de linguagens de
programação

I Aumentar a capacidade de expressar ideias


I Melhorar as condições de escolha da linguagem apropriada
para cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens já conhecidas
I Entender a importância da implementação
I Avanço da área de computação

4 / 27
Domı́nios de programação
Domı́nios de programação

I Aplicações cientı́ficas

6 / 27
Domı́nios de programação

I Aplicações cientı́ficas
I Estruturas simples (arranjos e matrizes)
I Muitas operações com pontos flutuantes
I Fortran, Algol, C/C++
I Fortress, Mathlab (Octave), numpy (Python)

6 / 27
Domı́nios de programação

I Aplicações cientı́ficas
I Estruturas simples (arranjos e matrizes)
I Muitas operações com pontos flutuantes
I Fortran, Algol, C/C++
I Fortress, Mathlab (Octave), numpy (Python)
I Aplicações comerciais

6 / 27
Domı́nios de programação

I Aplicações cientı́ficas
I Estruturas simples (arranjos e matrizes)
I Muitas operações com pontos flutuantes
I Fortran, Algol, C/C++
I Fortress, Mathlab (Octave), numpy (Python)
I Aplicações comerciais
I Produção de relatórios
I Formatação de números decimais e caracteres
I Cobol

6 / 27
Domı́nios de programação

I Aplicações cientı́ficas
I Estruturas simples (arranjos e matrizes)
I Muitas operações com pontos flutuantes
I Fortran, Algol, C/C++
I Fortress, Mathlab (Octave), numpy (Python)
I Aplicações comerciais
I Produção de relatórios
I Formatação de números decimais e caracteres
I Cobol
I Inteligência artificial

6 / 27
Domı́nios de programação

I Aplicações cientı́ficas
I Estruturas simples (arranjos e matrizes)
I Muitas operações com pontos flutuantes
I Fortran, Algol, C/C++
I Fortress, Mathlab (Octave), numpy (Python)
I Aplicações comerciais
I Produção de relatórios
I Formatação de números decimais e caracteres
I Cobol
I Inteligência artificial
I Manipulação de sı́mbolos (lista ligada)
I Criação e execução de código
I Lisp, Prolog
I C/C++

6 / 27
Domı́nios de programação

I Software de sistema

7 / 27
Domı́nios de programação

I Software de sistema
I Eficiência devido ao uso contı́nuo
I C/C++
I D, Go, Rust

7 / 27
Domı́nios de programação

I Software de sistema
I Eficiência devido ao uso contı́nuo
I C/C++
I D, Go, Rust
I Web

7 / 27
Domı́nios de programação

I Software de sistema
I Eficiência devido ao uso contı́nuo
I C/C++
I D, Go, Rust
I Web
I Código dentro do documento
I Javascript, PHP, Java, Ruby, Python

7 / 27
Critérios para avaliação de linguagens
Critérios para avaliação de linguagens

I Facilidade de leitura (legibilidade)


I Facilidade de escrita
I Confiabilidade
I Custo

9 / 27
Critérios para avaliação de linguagens

I Facilidade de leitura
I Simplicidade
I Um conjunto bom de caracterı́sticas e construções
I Poucas formas de expressar cada operação
I Mı́nima sobrecarga de operador
I Muito simples não é bom (assembly)

10 / 27
Critérios para avaliação de linguagens

I Facilidade de leitura
I Simplicidade
I Um conjunto bom de caracterı́sticas e construções
I Poucas formas de expressar cada operação
I Mı́nima sobrecarga de operador
I Muito simples não é bom (assembly)
I Ortogonalidade
I Poucas caracterı́sticas podem ser combinadas de várias
maneiras
I Uma caracterı́stica deve ser independente do contexto que é
usada (exceções a regra são ruins)
I Muito ortogonalidade não é bom (Algol68)
I Linguagens funcionais oferecem uma boa combinação de
simplicidade e ortogonalidade

10 / 27
Critérios para avaliação de linguagens

I Facilidade de leitura
I Tipos de dados
I Tipos pré-definidos adequados

11 / 27
Critérios para avaliação de linguagens

I Facilidade de leitura
I Tipos de dados
I Tipos pré-definidos adequados
I Sintaxe
I Flexibilidade para nomear identificadores
I Forma de criar instruções compostas
I A forma deve ter relação com o significado

11 / 27
Critérios para avaliação de linguagens

I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construções e um conjunto consistente de formas de
combinação

12 / 27
Critérios para avaliação de linguagens

I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construções e um conjunto consistente de formas de
combinação
I Suporte para abstração
I Definir e usar estruturas e operações de maneira que os
detalhes possam ser ignorados
I Suporte a subprogramas
I Suporte a tipos abstratos de dados

12 / 27
Critérios para avaliação de linguagens

I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construções e um conjunto consistente de formas de
combinação
I Suporte para abstração
I Definir e usar estruturas e operações de maneira que os
detalhes possam ser ignorados
I Suporte a subprogramas
I Suporte a tipos abstratos de dados
I Expressividade
I Maneira conveniente de expressar a computação

12 / 27
Critérios para avaliação de linguagens

I Confiabilidade
I Verificação de tipos

13 / 27
Critérios para avaliação de linguagens

I Confiabilidade
I Verificação de tipos
I Manipulação de exceções

13 / 27
Critérios para avaliação de linguagens

I Confiabilidade
I Verificação de tipos
I Manipulação de exceções
I Apelidos

13 / 27
Critérios para avaliação de linguagens

I Confiabilidade
I Verificação de tipos
I Manipulação de exceções
I Apelidos
I Facilidade de leitura e escrita

13 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas
I Compilar programas

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas
I Compilar programas
I Executar programas

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas
I Compilar programas
I Executar programas
I Confiabilidade

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas
I Compilar programas
I Executar programas
I Confiabilidade
I Manutenção

14 / 27
Critérios para avaliação de linguagens

I Custo
I Treinar programadores
I Escrever programas
I Compilar programas
I Executar programas
I Confiabilidade
I Manutenção
I Maior peso no custo: escrita, manutenção e confiabilidade

14 / 27
Critérios para avaliação de linguagens

I Outros critérios
I Portabilidade
I Padronização

15 / 27
Critérios para avaliação de linguagens

I Outros critérios
I Portabilidade
I Padronização
I Diferentes visões
I Programador
I Projetista da linguagem
I Implementador da linguagem

15 / 27
Influências no projeto de linguagens
Influências no projeto de linguagens

I Arquitetura do Computador
I Arquitetura de von Neumann
I Arquiteturas multicore
I Outras?

17 / 27
Influências no projeto de linguagens

I Arquitetura do Computador
I Arquitetura de von Neumann
I Arquiteturas multicore
I Outras?
I Metodologias de Programação
I Orientada a processos
I Orientada a dados
I Orientação a objetos

17 / 27
Categorias de linguagens
Categorias de linguagens

I Imperativas:

19 / 27
Categorias de linguagens

I Imperativas: Algol68, Fortran, Cobol, Ruby, Python, Go,


Java, Pascal, C/C++, . . .

19 / 27
Categorias de linguagens

I Imperativas: Algol68, Fortran, Cobol, Ruby, Python, Go,


Java, Pascal, C/C++, . . .
I Funcionais ou Aplicativas: Lisp, Haskell, ML, Scheme, Erlang,
Ocaml, F#, Miranda, . . .

19 / 27
Categorias de linguagens

I Imperativas: Algol68, Fortran, Cobol, Ruby, Python, Go,


Java, Pascal, C/C++, . . .
I Funcionais ou Aplicativas: Lisp, Haskell, ML, Scheme, Erlang,
Ocaml, F#, Miranda, . . .
I Lógicas ou Declarativas: Prolog, Planner, QA-4, Popler,
Conniver, QLISP, Mercury, Oz, Frill, . . .

19 / 27
Métodos de implementação
Métodos de implementação

I Compilação
I Interpretação
I Hı́brido

21 / 27
Métodos de implementação

22 / 27
Métodos de implementação - Compilação

23 / 27
Métodos de implementação - Interpretação

24 / 27
Métodos de implementação - Hı́brido

25 / 27
Referências
Referências

I Robert Sebesta, Concepts of programming languages, 9a


edição. Capı́tulo 1.

27 / 27

Vous aimerez peut-être aussi