Académique Documents
Professionnel Documents
Culture Documents
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
Domı́nios de programação
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
4 / 27
Razões para estudar conceitos de linguagens de
programação
4 / 27
Razões para estudar conceitos de linguagens de
programação
4 / 27
Razões para estudar conceitos de linguagens de
programação
4 / 27
Razões para estudar conceitos de linguagens de
programação
4 / 27
Razões para estudar conceitos de linguagens de
programaçã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
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
19 / 27
Categorias de linguagens
19 / 27
Categorias de linguagens
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
27 / 27