Aspectos preliminares - Linguagens de Programação · 2018-08-03 · Raz~oes para estudar...

Post on 07-Aug-2020

0 views 0 download

Transcript of Aspectos preliminares - Linguagens de Programação · 2018-08-03 · Raz~oes para estudar...

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