aspectos preliminares - linguagens de programação · 2018-08-03 · raz~oes para estudar...
TRANSCRIPT
Aspectos preliminares
Linguagens de Programacao
Marco A L Barbosa
cbaEste trabalho esta licenciado com uma Licenca Creative Commons - Atribuicao-CompartilhaIgual 4.0 Internacional.
http://github.com/malbarbo/na-lp-copl
Conteudo
Razoes para estudar conceitos de linguagens de programacao
Domınios de programacao
Criterios para avaliacao de linguagens
Influencias no projeto de linguagens
Categorias de linguagens
Metodos de implementacao
Referencias
Razoes para estudar conceitos de linguagens deprogramacao
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Razoes para estudar conceitos de linguagens deprogramacao
I Aumentar a capacidade de expressar ideias
I Melhorar as condicoes de escolha da linguagem apropriadapara cada problema
I Aumentar a capacidade de aprender novas linguagens
I Melhorar o uso das linguagens ja conhecidas
I Entender a importancia da implementacao
I Avanco da area de computacao
4 / 27
Domınios de programacao
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Aplicacoes cientıficas
I Estruturas simples (arranjos e matrizes)I Muitas operacoes com pontos flutuantesI Fortran, Algol, C/C++I Fortress, Mathlab (Octave), numpy (Python)
I Aplicacoes comerciais
I Producao de relatoriosI Formatacao de numeros decimais e caracteresI Cobol
I Inteligencia artificial
I Manipulacao de sımbolos (lista ligada)I Criacao e execucao de codigoI Lisp, PrologI C/C++
6 / 27
Domınios de programacao
I Software de sistema
I Eficiencia devido ao uso contınuoI C/C++I D, Go, Rust
I Web
I Codigo dentro do documentoI Javascript, PHP, Java, Ruby, Python
7 / 27
Domınios de programacao
I Software de sistema
I Eficiencia devido ao uso contınuoI C/C++I D, Go, Rust
I Web
I Codigo dentro do documentoI Javascript, PHP, Java, Ruby, Python
7 / 27
Domınios de programacao
I Software de sistema
I Eficiencia devido ao uso contınuoI C/C++I D, Go, Rust
I Web
I Codigo dentro do documentoI Javascript, PHP, Java, Ruby, Python
7 / 27
Domınios de programacao
I Software de sistema
I Eficiencia devido ao uso contınuoI C/C++I D, Go, Rust
I Web
I Codigo dentro do documentoI Javascript, PHP, Java, Ruby, Python
7 / 27
Criterios para avaliacao de linguagens
Criterios para avaliacao de linguagens
I Facilidade de leitura (legibilidade)
I Facilidade de escrita
I Confiabilidade
I Custo
9 / 27
Criterios para avaliacao de linguagens
I Facilidade de leitura
I Simplicidade
I Um conjunto bom de caracterısticas e construcoesI Poucas formas de expressar cada operacaoI Mınima sobrecarga de operadorI Muito simples nao e bom (assembly)
I Ortogonalidade
I Poucas caracterısticas podem ser combinadas de variasmaneiras
I Uma caracterıstica deve ser independente do contexto que eusada (excecoes a regra sao ruins)
I Muito ortogonalidade nao e bom (Algol68)I Linguagens funcionais oferecem uma boa combinacao de
simplicidade e ortogonalidade
10 / 27
Criterios para avaliacao de linguagens
I Facilidade de leitura
I Simplicidade
I Um conjunto bom de caracterısticas e construcoesI Poucas formas de expressar cada operacaoI Mınima sobrecarga de operadorI Muito simples nao e bom (assembly)
I Ortogonalidade
I Poucas caracterısticas podem ser combinadas de variasmaneiras
I Uma caracterıstica deve ser independente do contexto que eusada (excecoes a regra sao ruins)
I Muito ortogonalidade nao e bom (Algol68)I Linguagens funcionais oferecem uma boa combinacao de
simplicidade e ortogonalidade
10 / 27
Criterios para avaliacao de linguagens
I Facilidade de leitura
I Tipos de dados
I Tipos pre-definidos adequados
I Sintaxe
I Flexibilidade para nomear identificadoresI Forma de criar instrucoes compostasI A forma deve ter relacao com o significado
11 / 27
Criterios para avaliacao de linguagens
I Facilidade de leitura
I Tipos de dados
I Tipos pre-definidos adequados
I Sintaxe
I Flexibilidade para nomear identificadoresI Forma de criar instrucoes compostasI A forma deve ter relacao com o significado
11 / 27
Criterios para avaliacao de linguagens
I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construcoes e um conjunto consistente de formas decombinacao
I Suporte para abstracao
I Definir e usar estruturas e operacoes de maneira que osdetalhes possam ser ignorados
I Suporte a subprogramasI Suporte a tipos abstratos de dados
I Expressividade
I Maneira conveniente de expressar a computacao
12 / 27
Criterios para avaliacao de linguagens
I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construcoes e um conjunto consistente de formas decombinacao
I Suporte para abstracao
I Definir e usar estruturas e operacoes de maneira que osdetalhes possam ser ignorados
I Suporte a subprogramasI Suporte a tipos abstratos de dados
I Expressividade
I Maneira conveniente de expressar a computacao
12 / 27
Criterios para avaliacao de linguagens
I Facilidade de escrita
I Simplicidade e ortogonalidade
I Poucas construcoes e um conjunto consistente de formas decombinacao
I Suporte para abstracao
I Definir e usar estruturas e operacoes de maneira que osdetalhes possam ser ignorados
I Suporte a subprogramasI Suporte a tipos abstratos de dados
I Expressividade
I Maneira conveniente de expressar a computacao
12 / 27
Criterios para avaliacao de linguagens
I Confiabilidade
I Verificacao de tipos
I Manipulacao de excecoesI ApelidosI Facilidade de leitura e escrita
13 / 27
Criterios para avaliacao de linguagens
I Confiabilidade
I Verificacao de tiposI Manipulacao de excecoes
I ApelidosI Facilidade de leitura e escrita
13 / 27
Criterios para avaliacao de linguagens
I Confiabilidade
I Verificacao de tiposI Manipulacao de excecoesI Apelidos
I Facilidade de leitura e escrita
13 / 27
Criterios para avaliacao de linguagens
I Confiabilidade
I Verificacao de tiposI Manipulacao de excecoesI ApelidosI Facilidade de leitura e escrita
13 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadores
I Escrever programasI Compilar programasI Executar programasI ConfiabilidadeI ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programas
I Compilar programasI Executar programasI ConfiabilidadeI ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programasI Compilar programas
I Executar programasI ConfiabilidadeI ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programasI Compilar programasI Executar programas
I ConfiabilidadeI ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programasI Compilar programasI Executar programasI Confiabilidade
I ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programasI Compilar programasI Executar programasI ConfiabilidadeI Manutencao
I Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Custo
I Treinar programadoresI Escrever programasI Compilar programasI Executar programasI ConfiabilidadeI ManutencaoI Maior peso no custo: escrita, manutencao e confiabilidade
14 / 27
Criterios para avaliacao de linguagens
I Outros criterios
I PortabilidadeI Padronizacao
I Diferentes visoes
I ProgramadorI Projetista da linguagemI Implementador da linguagem
15 / 27
Criterios para avaliacao de linguagens
I Outros criterios
I PortabilidadeI Padronizacao
I Diferentes visoes
I ProgramadorI Projetista da linguagemI Implementador da linguagem
15 / 27
Influencias no projeto de linguagens
Influencias no projeto de linguagens
I Arquitetura do Computador
I Arquitetura de von NeumannI Arquiteturas multicoreI Outras?
I Metodologias de Programacao
I Orientada a processosI Orientada a dadosI Orientacao a objetos
17 / 27
Influencias no projeto de linguagens
I Arquitetura do Computador
I Arquitetura de von NeumannI Arquiteturas multicoreI Outras?
I Metodologias de Programacao
I Orientada a processosI Orientada a dadosI Orientacao a objetos
17 / 27
Categorias de linguagens
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 Logicas ou Declarativas: Prolog, Planner, QA-4, Popler,Conniver, QLISP, Mercury, Oz, Frill, . . .
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 Logicas ou Declarativas: Prolog, Planner, QA-4, Popler,Conniver, QLISP, Mercury, Oz, Frill, . . .
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 Logicas ou Declarativas: Prolog, Planner, QA-4, Popler,Conniver, QLISP, Mercury, Oz, Frill, . . .
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 Logicas ou Declarativas: Prolog, Planner, QA-4, Popler,Conniver, QLISP, Mercury, Oz, Frill, . . .
19 / 27
Metodos de implementacao
Metodos de implementacao
I Compilacao
I Interpretacao
I Hıbrido
21 / 27
Metodos de implementacao
22 / 27
Metodos de implementacao - Compilacao
23 / 27
Metodos de implementacao - Interpretacao
24 / 27
Metodos de implementacao - Hıbrido
25 / 27
Referencias
Referencias
I Robert Sebesta, Concepts of programming languages, 9a
edicao. Capıtulo 1.
27 / 27