1 - Introdução
Linguagens de Programação
Prof. Laurence Rodrigues do
Introdução
• Porque estudar os conceitos de
linguagens de programação?
• Quais são os benefícios potenciais
relativos ao estudo de conceitos de
linguagens de programação?
Introdução
1. Aumento na capacidade de expressar idéias
2. Maior embasamento na escolha de linguagens de programação
3. Aumento na capacidade de aprendizado de novas linguagens
4. Melhor entendimento da importância da implementação
5. Aumento na capacidade de projetar novas linguagens
1- Aumento na capacidade
de expressar idéias
• As linguagens de programação na qual
nós desenvolvemos software os impõe
limites
– Tipos de estruturas de controle
• For, while, do while, foreach, repeat until, etc
– Estruturas de dados
• Structs, records, class, etc
– Abstrações
1- Aumento na capacidade
de expressar idéias
• O conhecimento de uma variedade mais ampla de recursos dentro das linguagens de
programação reduz estas limitações
• Os desenvolvedores podem expandir o seu conhecimento em determinada linguagem de programação aprendendo novas construções • O estudo dos conceitos das linguagens de
programação encoraja os desenvolvedores a conhecer e aplicar os recursos das linguagens de programação
2 - Maior embasamento na escolha
de linguagens de programação
• Muitos programadores quando lhes é
dada a possibilidade de escolha das
linguagens para um novo projeto
• Continuam a usar aquela com a qual
estão mais familiarizados, mesmo que ela
seja pouco adequada
• Se tais desenvolvedores conhecessem
outras linguagens de programação, estes
poderiam fazer melhores escolhas
3 - Aumento na capacidade
de aprendizado de novas linguagens
• O processo de aprender uma nova linguagem de programação pode ser extenso e difícil,
principalmente para desenvolvedores que conhecem uma ou duas linguagens de
programação
• Assim que for adquirida uma completa
compreensão dos conceitos fundamentais das linguagens de programação, será mais fácil o aprendizado da nova linguagem de
4 - Melhor entendimento da
importância da implementação
• Em alguns casos, a compreensão das
questões de implementação leva a um
entendimento do porquê das linguagens
de programação serem projetas daquela
maneira
• Se entendermos estas escolhas,
utilizaremos os recursos presentes nas
linguagens de programação de modo mais
inteligente
5 - Aumento na capacidade
de projetar novas linguagens
• Para um estudante a possibilidade de vir a
projetar uma nova linguagem de
programação no futuro pode parecer
remota
• Linguagens de programação voltadas
para dispositivos específicos
– Impressoras - PPFA (Page Printer Format Aid) – IBM
– Celulares e tablets – iOS (Apple)
6 - Avanço global
da Computação
• Nem sempre as linguagens de
programação mais populares são as
melhores
• Algumas linguagens de programação se
tornaram popular porque aqueles com
capacidade de decisão as tinham como
preferidas, desconhecendo características
de outras linguagens de programação,
Introdução
• Domínios de Programação
– Os computadores são usados em uma infinidade de diferentes áreas, desde o controle de usinas elétricas e nucleares à armazenagem de registros de cheques pessoais
– Por causa desta grande diversidade,
linguagens de programação com objetivos muito diferentes tem sido desenvolvidas
Introdução
• Domínios de Programação
– Aplicações científicas – Aplicações comerciais – Inteligência artificial – Programação de sistemas – Linguagens de scriptingDomínios de Programação
• Aplicações científicas
– Usam estruturas de dados simples (vetores e matrizes)
– Exigem um grande número de computações aritméticas em números reais
– São geralmente linguagens de alto nível
• Principal concorrente é a Assembly (linguagem de montagem)
– A eficiência (velocidade) é a principal preocupação – A primeira linguagem para aplicações científicas foi o
Aplicações científicas
Aplicações científicas
Domínios de Programação
• Aplicações comerciais
– Primeira linguagem comercial bem sucedida foi o Cobol (foi criada em 1960)
– São caracterizadas por
• Facilidades na construção de relatórios elaborados
• Maneiras precisas de descrever
• Armazenamento de números decimais e textos • Capacidade de especificar operações aritméticas
Domínios de Programação
• Inteligência Artificial (IA)
– É uma área abrangente das aplicações de
computador caracterizada pelo uso de computações simbólicas (CS)
• CS: manipulamos símbolos ao invés de manipular números • Usa-se mais listas encadeadas ao invés de matrizes
– Primeira linguagem: Lisp (paradigma funcional) – Atualmente usa-se extensamente a linguagem de
Domínios de Programação
• Programação de Sistemas
– É formado pelo sistema operacional e todas as ferramentas de suporte à programação de um computador
• Drivers, APIs, etc
– Tem que oferecer uma execução rápida – Deve ter recursos de baixo nível que
permitam ao software fazer interface com os dispositivos externos
Domínios de Programação
• Programação de Sistemas
– O sistema operacional UNIX foi escrito quase que inteiramente em C
– O que tornou relativamente fácil a portabilidade deste SO para máquinas diferentes
• Máquinas com arquiteturas diferentes!
– C é uma boa linguagem para se desenvolver software para SO
• Consegue-se desenvolver em baixo nível
• Sua execução é eficiente (ela é muito rápida)
• Não sobrecarrega o desenvolvedor com muitas restrições de segurança
– Acesso a certas regiões de memória – Não inicializa variáveis, etc
Domínios de Programação
• Linguagens de Scripting
– Se desenvolveu lentamente nos últimos 25 anos – São usadas colocando-se uma lista de comandos,
chamados de script, em um arquivo para serem executados
– Ex: Ksh (korn shell), Awk, Tcl/Tk, Perl e JavaScript, etc
– Perl desenvolveu significativamente e tornou-se uma linguagem de programação poderosa, ainda que um tanto primitiva
Domínios de Programação
• Linguagens de Propósitos Especiais
– Uma grande variedade de linguagens para propósitos especiais surgiram no decorrer dos últimos 40 anos
– RPG: produzir relatórios comerciais – APT: programação de máquinas
programáveis
Linguagens de
Linguagens de
Linguagens de
Critérios para Avaliação
- Linguagem de Programação
• Examinar os conceitos fundamentais das várias construções e das capacidades das linguagens de programação
• Concentrando nos impactos sobre o processo de desenvolvimento de software, incluindo até a manutenção
Critérios para Avaliação
- Linguagem de Programação
• Legibilidade
– Simplicidade global, Ortogonalidade, Instruções de controle, Tipos de dados e estruturas e
Considerações sobre a sintaxe
• Capacidade de escrita (Writability)
– Simplicidade e ortogonalidade, Suporte para abstração e Expressividade
• Confiabilidade
– Verificação de tipos, Manipulação de exceções, Apelidos e Legibilidade e capacidade de escrita
Critérios para Avaliação
- Linguagem de Programação
• Legibilidade
– É um dos critérios mais importantes para julgar uma linguagem de programação
– Mede a facilidade com que os programas podem ser lidos e entendidos
– Deve ser considerada no contexto do domínio do problema
• Simplicidade Global • Ortogonalidade
• Instruções de Controle
• Tipos de Dados e Estruturas • Considerações sobre a Sintaxe
Legibilidade
• Simplicidade Global
– Quão simples é uma linguagem de programação – Afeta fortemente a legibilidade
– Uma linguagem de programação com um grande
número de componentes básicos é mais difícil de ser aprendida do que uma com poucos desses
componentes
– Desenvolvedores tendem a usar um subconjunto destes componentes e ignoram os demais
– Surgirá um problema de legibilidade sempre que o autor do programa tiver aprendido um subconjunto diferente daquele que o leitor está familiarizado
Legibilidade
• Simplicidade Global
– Um outro problema é a multiplicidade de recursos
• Mais de uma maneira de realizar uma operação em particular
Legibilidade
• Simplicidade Global
– Um terceiro problema potencial é a sobrecarga de operador (overloading)
– Na qual um único símbolo tem mais de um significado
• + - utilizado para somar números inteiros e ponto flutuante
– Não há problema quanto a simplicidade global!
• + - aplicado para somar todos os elementos de matrizes unidimensionais
Legibilidade
• Ortogonalidade
– Significa que um conjunto relativamente
pequeno de construções primitivas pode ser combinado em um número relativamente
pequeno de maneiras para construir as estruturas de controle e de dados da linguagem
– Parte de uma simetria de relações entre primitivas
– Os ponteiros devem ser capazes de apontar para qualquer tipo de variável ou estrutura de dados
Legibilidade
• Ortogonalidade
– Está estreitamente relacionada à simplicidade
• Quanto mais ortogonal é o projeto de uma linguagem, menos exceções as regras de linguagem existirão
• Menos exceções significam um grau mais elevado de regularidade no projeto, o que torna a
linguagem mais fácil de ser aprendida, lida e entendida
Legibilidade
• Ortogonalidade
– Como exemplo a falta de ortogonalidade em uma linguagem de programação podemos citar a linguagem C
• Embora C possua dois tipos de dados estruturados, matrizes e structs
• Structs podem ser retornados de funções
(passados como valor), mas matrizes não (tendo que ser passados como referência)
Legibilidade
• Ortogonalidade
– Simplicidade em uma linguagem é o
resultado de uma combinação de um número relativamente pequeno de construções
primitivas e do uso limitado do conceito de ortogonalidade
– Os melhores exemplos são as linguagens funcionais
• Podem realizar tudo com uma única construção (função)
Legibilidade
• Instruções de Controle
– Reconheceu-se amplamente que o uso indiscriminado das instruções goto reduz drasticamente a legibilidade do programa
– Um programa que pode ser lido de cima a baixo é
muito mais fácil de entender do que o que exige pular de uma instrução a outra não-adjacente
– Restrições relativas ao uso de goto
• Elas devem preceder seus alvos
• Seus alvos nunca devem estar distantes • Seu número devem ser limitado
Legibilidade
• Instruções de Controle
– Reconheceu-se amplamente que o uso indiscriminado das instruções goto reduz drasticamente a legibilidade do programa
Legibilidade
• Tipos de Dados e Estruturas
– Presença de adequações presentes na
linguagem de programação para definir tipos de dados e estruturas de dados é um auxílio significativo para a legibilidade
C vs. Pascal
Legibilidade
• Tipos de Dados e Estruturas
CHARACTER (LEN = 30) NOME
INTEGER IDADE, NUMERO_EMPREGADO
FORTRAN 77 Acessar cada vetor individualmente! C
Legibilidade
• Considerações sobre a sintaxe
– A sintaxe ou a forma dos elementos de uma linguagem de programação tem efeito
significativo sobre a legibilidade – Temos que nos atentar
• Formas identificadoras • Palavras especiais
Considerações sobre
a sintaxe
• Formas identificadoras
– Restringir os identificadores a tamanhos muito pequenos prejudica a legibilidade – Se os identificadores puderem ter 6
caracteres no máximo (FORTRAN 77), muitas vezes não é possível usar nomes conotativos para as variáveis
– Exemplo extremo: BASIC (ANSI)
• Somente uma letra ou de uma única letra seguida de um dígito
Considerações sobre
a sintaxe
• Palavras especiais
– A legibilidade são fortemente influenciadas pelas formas das palavras especiais
• while, for, class, etc
– O método para formar instruções compostas ou grupos de instrução são muito importantes
• Pascal – “begin” e “end” • C – “{“ e “}”
– Ambas as linguagens sofrem porque os grupos de instrução são sempre encerrados da mesma maneira
Considerações sobre
a sintaxe - Palavras especiais
Visual Basic 6 Pascal
Considerações sobre
a sintaxe
• Palavras especiais
– Se as palavras especiais podem ser usadas como nomes para variáveis de programa
– Se puderem, os programas resultantes podem ser muito confusos
– Ex: FORTRAN 90 podemos usar as palavras especiais DO e END como nomes de
Considerações sobre
a sintaxe
• Forma e significado
– Projetar instruções a fim de que sua aparência
indique, ao menos parcialmente, sua finalidade é um auxílio evidente para a legibilidade
– A semântica (significado) deve seguir diretamente da sintaxe ou da forma
– Ex: em C o significado da palavra reservada static depende do contexto de aparecimento
• Definição de uma variável dentro de uma função, significa que a variável é criada no momento de compilação
• Se for usada fora de todas as funções, significa que esta variável é visível apenas no arquivo onde está a definição (não é exportada desse arquivo)
Considerações sobre
a sintaxe
• Forma e significado
– O comando grep em Unix pode ser decifrado apenas pelo seu conhecimento prévio
– Procura pela ocorrência de uma string no arquivo especificado. Ele exibe apenas as linhas que possuem a string
Capacidade de escrita
- Writability
• Capacidade de escrita é uma medida de
quão facilmente uma linguagem pode ser
usada para criar programas para um
domínio de problema escolhido
• A maioria das características que afetam a
legibilidade, afetam também a capacidade
de escrita
– Está relacionado ao fato de que para se escrever um programa, exige releituras da parte que já foi escrita
Capacidade de escrita
- Writability
• Deve ser considerada no contexto do
domínio do problema
• Não é adequado comparar linguagens que
foram desenvolvidas para propósitos
distintos
– Ex: Cobol (comercial) vs. Lisp (IA)
• Criação de relatórios – Cobol será sempre melhor que Lips
• Manipulação de símbolos – Lisp será sempre melhor que Cobol
Capacidade de escrita
- Writability
• Fatores mais importantes que influenciam
a capacidade de escrita de uma
linguagem de programação
– Simplicidade e Ortogonalidade – Suporte para abstração
Capacidade de escrita
- Writability
• Simplicidade e Ortogonalidade
– Um conjunto muito extenso de construções pode
levar ao uso inadequado de alguns destes recursos e ao desuso de outros
– Desta forma, um número menor de construções primitivas e um conjunto consistente de regras é
muito melhor do que, simplesmente, ter um grande número de primitivas
– Um desenvolvedor por projetar uma solução para um problema complexo depois de aprender somente um conjunto simples de construções primitivas
Capacidade de escrita
- Writability
• Suporte para abstração
– Abstração significa a capacidade de definir, e depois, usar estruturas ou operações
complicadas de uma maneira que permita ignorar muitos detalhes
– As linguagens de programação podem suportar duas categorias distintas de abstração
• Processo • Dados
Capacidade de escrita
- Writability
• Suporte para abstração
– Processo
• Uso de um subprograma para implementar um algoritmo de classificação exigido diversas vezes em um programa
Capacidade de escrita
- Writability
• Suporte para abstração
– Dados
• Árvore binária que armazena dados inteiros em seus vértices
*
+ f + a*
* *
+*
b c Fortran 77*
+ f*
C++/Java a*
+Capacidade de escrita
- Writability
• Expressividade
– Significa que uma linguagem de programação tem formas relativamente convenientes de
especificar computações – Ex:
• C – “cont++” é mais conveniente do que usar “cont = cont + 1”
Confiabilidade
• Diz-se que um programa é confiável se ele se comportar de acordo com suas especificações sob todas as condições
• Recursos de linguagem que exercem um efeito significativo sobre a confiabilidade de
programas
– Verificação de Tipos
– Manipulação de Exceções – Apelidos
Confiabilidade
• Verificação de Tipos
– Testar se existem erros de tipo em
determinado programa, ou pelo compilador, ou durante a execução do programa
– É um fator importante na confiabilidade da linguagem de programação
– A verificação de tipos em tempo de execução é mais dispendiosa do que a verificação em tempo de compilação
Confiabilidade
• Verificação de Tipos
– Quanto mais cedo foram detectados os erros em um programa, menos dispendioso será
para fazer os reparos necessários
– Na linguagem de programação Ada exige
verificações dos tipos de dados das variáveis e expressões em tempo de compilação,
exceto quando o desenvolvedor declara
explicitamente que a verificação de tipos deve ser suspensa
Confiabilidade
• Verificação de Tipos
– Linguagens fortemente tipadas
• São aquelas em que a declaração do tipo é obrigatório • Ex: Java, C, Delphi, etc
– Linguagens fracamente tipadas
• São aquelas em que a declaração do tipo é opcional • Ex: Visual Basic (até a versão 6)
– DIM X (uso a variável para armazenar qualquer tipo)
– Linguagens não tipadas
• São aquelas em que existe apenas um tipo genérico de dados
• A maior parte das linguagens de script são normalmente não tipadas
Confiabilidade
• Manipulação de Exceções
– A capacidade de um programa de interpretar erros em tempo de execução e por em prática medidas corretivas e depois prosseguir é um grande auxílio para a confiabilidade
– Ex:
• Possuem: Ada, C++, Java, Delphi, etc • Não possuem: C, Fortran, etc
Confiabilidade
• Apelidos
– É ter dois ou mais métodos ou nomes,
distintos para fazer referência à mesma célula de memória
– É amplamente aceito que os apelidos são recursos perigosos
– Posso ter duas funções alterando uma mesma variável
– Foi proposto para superar algumas deficiências na abstração de dados
Confiabilidade
• Legibilidade e Capacidade de Escrita
– Ambos influenciam a confiabilidade
– Quanto mais fácil é escrever um programa, mais probabilidade ele tem de estar correto – A legibilidade afeta a confiabilidade tanto nas
fases de escrita como nas de manutenção no ciclo de vida
– Programas de difícil leitura também são difíceis de escrever e de modificar
Confiabilidade
Custo
• O custo final de uma linguagem de
programação é uma função de muitas características
• São elas:
– Custo de treinamento de programadores
– Custo para escrever programas na linguagem – Custo para compilar programas na linguagem – Custo de implementação
– Custo de compra da linguagem – Custo da má confiabilidade
Custo
• Custo de treinamento de programadores
– Está relacionado à simplicidade,
ortogonalidade e da experiência dos programadores
– Exemplos (cursos online)
• C# - R$ 175,00 • J2SE - R$ 175,00 • J2EE - R$ 195,00
• Developer .NET - R$ 250,00 • Visual Basic 2008 - R$ 150,00
Custo
• Custo para escrever
programas na linguagem
– Está relacionado à
capacidade de escrita, a qual depende da
proximidade de seu
propósito com a aplicação em particular
– Ex: usar uma linguagem de baixo nível para escrever programas comerciais (Assembly)
Custo
• Custo para compilar programas na
linguagem
– Um grande empecilho para os primeiros usos de Ada era o custo elevado para rodar os
seus compiladores de primeira geração
– Esse problema foi diminuído pelo surgimento de compiladores melhores
Custo
• Custo de implementação
– Uma linguagem de programação cujo sistema de implementação seja caro, ou rode
somente em hardware caro, terá menos chance de se tornar popular
– Um dos fatores que explicam a rápida aceitação de Java está ligado à sua
portabilidade, isto é, uso da máquina virtual gerando uma independência de sistema
Custo
• Custo de compra da linguagem
– Refere-se ao custo para se adquirir a linguagem de programação
• Java – gratuito • PHP – gratuito
• Delphi 2007 (Win32) – R$ 3.918,04
Custo
• Custo da má confiabilidade
– Se o software falhar em um sistema crítico, como uma usina nuclear ou uma máquina de raios X, o custo poderia ser muito elevado
– Falhas em sistemas não-críticos também podem ser muito caras em termos de futuro comercial ou de ações judiciais em função de sistemas de software defeituosos
Custo
• Custo de manutenção de programas
– Inclui correções e modificações
– Depende de uma série de características da linguagem, mas principalmente da legibilidade
– Geralmente a manutenção não é feita pelo autor do programa
– Custos com manutenção (em softwares com tempos de vida longos) podem atingir de duas a quatro vezes os custos de desenvolvimento
Influências sobre o
Projeto da Linguagem
• Fatores que influenciam o projeto das
linguagens de programação
– Arquitetura do computador
– Metodologias de programação – Categorias de linguagem
– Custo/benefício no projeto da linguagem – Métodos de implementação
Influências sobre o
Projeto da Linguagem
• Arquitetura do computador
– Exerceu um efeito crucial sobre o projeto das linguagens de programação
– A maioria das mais populares linguagens de programação dos últimos 45 anos foi
projetada em função da arquitetura de von Neumann
Influências sobre o
Projeto da Linguagem
• Arquitetura do computador
– Dados e programas são armazenados na mesma memória
– A unidade central de processamento (UCP) é separada da memória
– As instruções e os dados devem ser canalizados (piped) ou transmitidos da memória para a UCP
– Os resultados das operações na UCP devem ser novamente transferidos para a memória
Influências sobre o
Projeto da Linguagem
• Arquitetura do computador
– Quase todos os computadores digitais construídos desde a década de 40 tem se baseado na arquitetura de von Neumann
Influências sobre o
Projeto da Linguagem
• Arquitetura do computador
– Por causa da arquitetura de von Neumann, os recursos centrais das linguagens imperativas são as variáveis, as quais modelam
• Células de memória
• Instruções de atribuição (baseadas na operação de piping)
Influências sobre o
Projeto da Linguagem
• Arquitetura do
computador
– Os operandos das expressões são canalizados da memória para a UCP e o resultado da avaliação é canalizado de volta para a célula de memóriarepresentada pelo lado esquerdo da atribuição
Influências sobre o
Projeto da Linguagem
• Arquitetura do computador
– Funcional
• Principal meio de fazer computações é aplicar funções a determinados parâmetros
• Não há tipos de variáveis (como utilizado nas
imperativas), sem instruções de atribuições e sem iteração
• É improvável que as linguagens imperativas sejam deixadas de lado até que um computador não-von Neumann seja projetado
Influências sobre o
Projeto da Linguagem
• Metodologias de programação
– Final da década de 60 e o início da década de 70 trouxeram uma análise intensa, do processo de desenvolvimento de software como do projeto de linguagens de
programação
– Uma razão para isso foi a mudança do custo de computação do hardware para o software
Influências sobre o
Projeto da Linguagem
• Metodologias de programação
– Orientados a processo – Orientados a dados
• Enfatizam o projeto de dados, concentrando-se no uso de tipos de dados abstratos para resolver
problemas
– Orientados a objetos
• Inicia-se com a abstração de dados, a qual
encapsula o processamento com objetos de dados e oculta o acesso a eles, adicionando herança e vinculação dinâmica de métodos
Influências sobre o
Projeto da Linguagem
• Categorias de linguagem
– As linguagens de programação são categorizadas em
• Imperativas • Funcionais • Lógicas
Influências sobre o
Projeto da Linguagem
• Custo/benefício no projeto da linguagem
– Critérios conflitantes
• Confiabiliade vs. Custo de execução
– Ada
» Há a validação que o índice ou os índices em matrizes estejam em suas faixas legais
» Aumenta o custo de execução
» Aumenta a confiabilidade dos programas – C
» Não há a validação dos índices das matrizes » Executam mais rapidamente que Ada
Influências sobre o
Projeto da Linguagem
• Custo/benefício no projeto da linguagem
– Existem diversos exemplos de conflitos entre os critérios de projeto de linguagens de
programação
– A tarefa de escolher construções e recursos ao projetar uma linguagem de programação envolve uma coleção de ponderações
Influências sobre o
Projeto da Linguagem
• Métodos de implementação
– A linguagem de máquina do computador é seu conjunto de macroinstruções
– A opção de projeto de máquina implementa em hardware uma linguagem de nível muito baixo que oferece as operações primitivas e exige que o SO crie uma interface com os programas de níveis mais elevados
Influências sobre o
Projeto da Linguagem
• Métodos de implementação
– O SO e as implementações são dispostos em camadas sobre a interface da linguagem de máquina
– Essas camadas podem ser imaginadas como computadores virtuais, que oferecem
interfaces para o usuário em níveis mais altos – Os programas de usuário formam uma outra
camada no topo da camada de máquinas virtuais
Influências sobre o
Projeto da Linguagem
• Métodos de implementação
– Na década de 60 esforços foram feitos para compreender e formalizar o processo de
construção de implementações de linguagens de alto nível
– O maior sucesso ocorreu na análise sintática, principalmente porque essa parte do
processo de implementação é uma aplicação da teoria dos autômatos e da teoria da
Influências sobre o
Projeto da Linguagem
• Métodos de implementação
– As linguagens de programação podem ser implementadas por meio dos seguintes
métodos
• Compilação
• Interpretação pura
IPL - Métodos de
implementação
• Compilação
– Programas são traduzidos para a linguagem de máquina, a qual pode ser executada
diretamente pelo computador – Vantagem:
• Execução de programa muito rápida, assim que o processo de tradução for concluído
IPL - Métodos de
implementação - Compilação
• Analisador léxico
– Input: programa-fonte – Output: unidades léxicas – Reúne os caracteres do programa-fonte em unidades léxicas • Identificadores • Palavras especiais • Operadores • Símbolos de pontuação – Ignora os comentários
IPL - Métodos de
implementação - Compilação
• Analisador léxico
– Input: unidades léxicas
– Output: árvores de análise – Constrói estruturas
hierárquicas (parse trees)
• Representam a estrutura sintática do programa
IPL - Métodos de
implementação - Compilação
• Gerador de código
intermediário
– Input: árvores de análise
– Output: código intermediário – Produz um programa em
uma linguagem diferente, entre o programa-fonte e o programa em linguagem de máquina
IPL - Métodos de
implementação - Compilação
• Otimização
– Input: código intermediário – Output: código intermediário
otimizado
– Melhora os programas tornando-os menores ou mais rápidos
– Velocidade de execução é mais importante do que velocidade de compilação
IPL - Métodos de
implementação - Compilação
• Gerador de código
– Input: código intermediário – Output: linguagem de
máquina
– Converte código
intermediário em código de máquina
IPL - Métodos de
implementação - Compilação
• Tabela de símbolos
– Funciona como um BD para o processo de compilação
– Conteúdo
• Informações sobre tipos e atributos de cada nome definido pelo usuário
– É populada pelos analisadores léxico e sintática
– É utilizada pelo analisador semântico e pelo gerador de código
IPL - Métodos de
implementação
IPL - Métodos de
implementação
• Interpretação pura
– Os programas podem ser interpretados por outro programa chamado interpretador, sem nenhuma conversão
– O interpretador age como uma simulação de software de uma máquina cujo ciclo buscar-executar lida com instruções de programa em linguagem de alto nível ao invés de
IPL - Métodos de
implementação
• Interpretação pura
– Vantagem
• Permitir uma fácil implementação de muitas operações de depuração do código-fonte
– Porque todas as mensagens de erro em tempo de execução podem referir-se a unidades de código
– Desvantagem
• A execução é de 10 a 100 vezes mais lenta do que em sistemas compilados
– Devido à complexa decodificação das instruções de linguagem de alto nível
– Bem mais complexas do que instruções em linguagem de máquina
IPL - Métodos de
implementação
• Interpretação pura
– Desvantagem
• Exige mais espaço, pois tem que armazenar
– Programa-fonte
» Deve ser armazenado em uma forma projetada para permitir fácil acesso e modificação, pois cada
expressão e instrução deve ser determinado diretamente do programa-fonte em tempo de execução
– Tabela de símbolos
– É aplicado à linguagens com estruturas mais simples
IPL - Métodos de
implementação
• Compilação versus Interpretação
– Gargalo
• Compilação
– Velocidade da conexão entre memória e processador
• Interpretação
IPL - Métodos de
implementação
• Sistemas de implementação híbridos
– Alguns sistemas de implementação são um meio-termo entre os compiladores e os
interpretadores
– Eles traduzem programas em linguagem de alto nível para uma linguagem intermediária projetada para permitir fácil interpretação
– Esse método é mais rápido do que a
interpretação pura porque as instruções da linguagem fonte são decodificadas somente uma vez
IPL - Métodos de
implementação
• Sistemas de implementação híbridos
– Ao invés de traduzir o código em linguagem intermediária para código de máquina, ele simplesmente interpreta o código
intermediário
– Podemos citar como exemplo a linguagem Perl
• Parcialmente compilada para detectar erros antes da interpretação e para simplificar o interpretador
Influências sobre o
Projeto da Linguagem
• Ambientes de programação
– Conjunto de ferramentas usadas no desenvolvimento de software
– É evidente que a maior parte do
desenvolvimento de software fará uso de ambientes de programação poderosos
– Isso, sem dúvida, aumentará a produtividade no desenvolvimento de software e também do software desenvolvido, elevando assim sua qualidade de produção
Influências sobre o
Projeto da Linguagem
• Ambientes de programação
Dr.SCHEME
Pontos importantes
• O estudo das linguagens de programação
é valioso
– Aumenta nossa capacidade de usar diferentes construções para escrever programas
– Possibilita-nos escolher linguagens para projetos de maneira mais inteligente
– Torna mais fácil a aprendizagem de novas idéias
Pontos importantes
• O projeto e a avaliação de uma linguagem
de programação dependem muito do
domínio em que eles devem ser usados
• Critérios mais importantes de avaliação
– Legibilidade
– Capacidade de escrita – Confiabilidade
Pontos importantes
• Projetar uma linguagem de programação
é, antes de mais nada, um feito de
engenharia, na qual uma longa lista de
compensações deve ser feita entre os
recursos, as construções e as
Bibliografia
• SEBESTA, R. W. Conceitos de Linguagens de Programação. Porto Alegre: Bookman, 2003.
• TUCKER, A. B; NOONAN, R. E. Linguagens de Programação – Princípios e Paradigmas. São Paulo: McGraw-Hill, 2008.
• MELO, A. C. V. de; SILVA, F. S. C. da.