Você está na página 1de 102

CONCEITOS DE LINGUAGENS DE PROGRAMAO

Prof. Crston Souza

Sumrio

Motivao Evoluo das LPs A arte de projetar LPs Classificao Mtodos de implementao Critrios de avaliao

Motivao
Por que estudar linguagens de programao?

Motivao do estudo de LPs

O que uma linguagem de programao? (vrias definies)


Notao

formal para especificar processamentos Ferramenta para escrever programas Meio de comunicao entre programadores Meio de controlar dispositivos computacionais

Por que estudar LPs?

Aumenta a habilidade de expressar idias

A profundidade com que uma pessoa pode pensar influenciada pelo poder de expresso da linguagem utilizada para expressar estes pensamentos

Ou seja, difcil criar estruturas que no podemos descrever de forma escrita ou falada (pensamos utilizando uma linguagem)

LPs so altamente limitadas em comparao s linguagens naturais

Apenas um pequeno conjunto de estruturas de controle/dados e abstraes (ex. variveis)

Por que estudar LPs?

Aumenta a habilidade de expressar idias

Quanto mais recursos das LPs o programador conhece, mais ser capaz de expressar seus algoritmos Mesmo que a LP no tenha um determinado recurso, muitas vezes possvel simular este recurso

Ex.: strings e arrays associativos em C Se a LP oferece o recurso, podemos expressar de forma mais clara e com menor chance de erro

Por que estudar LPs?

Maior capacidade para escolher a LP apropriada

Temos a tendncia de utilizar apenas a LP que estamos acostumados, mesmo no sendo a melhor opo para o novo projeto
A computao ainda uma cincia nova, onde LPs e metodologias rapidamente tornam-se obsoletas Ou seja, o profissional de computao est continuamente tendo de aprender novas tecnologias, inclusive LPs Quando os fundamentos de LPs so bem entendidos, aprender uma nova LP mais fcil Ex.: Java mais fcil para quem conhece a metodologia OO

Maior capacidade para aprender novas LPs

Por que estudar LPs?

Entender a implementao de LPs

Ajudar a encontrar erros e problemas de performance Ex.: Por que recurso lenta?

Capacidade de projetar novas LPs Avano da computao

Por que nem sempre a melhor LP a mais popular?

Falta de conhecimento de quem escolhe as LPs em seus projetos...

Conhecimento bsico de profissional da computao


Tcnicas para soluo de problemas e algoritmos Tcnicas para desenvolver aplicaes grandes (engenharia de software) Como a mquina e o SO funcionam Descobrir e entender detalhes sintticos relevantes de uma LP As caractersticas fundamentais dos paradigmas de programao, e escolha do paradigma apropriado para o problema

Motivao do estudo de LPs

Para comear a usar uma nova LP, um profissional de computao precisa:


Compreender os conceitos do slide anterior Um manual Algumas horas de experincia com o compilador/interpretador da LP

Quanto mais slido os conceitos gerais de LPs, mais rpido ser o aprendizado da nova LP

Motivao do estudo de LPs

Nesta disciplina...
Buscamos
Qual

entender porque as LP de hoje so desta forma


a motivao por trs de seus projetos

Conhecimento
Anlise

bsico sobre a implementao das LP (no chegamos a escrever compiladores)


lxica, sinttica e semntica

Principais

paradigmas

Domnios de aplicao

Cientficas 1 aplicao, ~1940


Estruturas simples, mas muitos clculos de ponto flutuante (Fortran) Principal preocupao: performance Nenhuma superou de forma significante o Fortran (1 LP de alto nvel) Relatrios (manipulao de texto), e representao de moeda (sem erro de preciso) COBOL, ~1960 Mais recentemente, surgiram as planilhas e sistemas de bancos de dados Manipulao de smbolos ao invs de nmeros, e listas encadeadas ao invs de arrays LISP, 1959, 1 LP funcional Prolog, ~1970, paradigma lgico

Comerciais ~1950

Inteligncia artificial

Domnios de aplicao

Software bsico (ex.: SOs)


Necessrio eficincia, devido ao uso contnuo (C/C++) 1960 ~ 1970, cada fabricante tinha sua LP

IBM -> PL/S, Digital -> BLISS, Burroughts -> Extended ALGOL

Mais tarde a LP C foi utilizada para implementar o sistema UNIX, base do sistema Linux
Comandos que podem ser inseridos em outros arquivos (Perl, PHP, Javascript) Linguagens de marcao (ex.HTML) e LPs de uso geral, como Java Cdigo inserido em linguagem de marcao atravs de linguagens de script, que podem ser executados no cliente ou no servidor

Linguagens de script

Web

Evoluo das LPs

Evoluo das LPs

Os primeiros computadores eletrnicos (anos 40) eram mquinas enormes, ocupando vrias salas, consumindo energia equivalente a uma fbrica, e custando milhes de dlares...
Desempenho

de uma calculadora de bolso atual Era difcil imaginar que estas mquinas se tornariam populares...

Evoluo das LPs - ENIAC

Evoluo das LPs

O tempo de execuo era mais valioso que o tempo do programador Programao em linguagem de mquina
Sequncia

de bits que mandam o processador somar, comparar e mover dados na memria (apenas operaes elementares) Programar neste nvel de detalhes tedioso...

Evoluo das LPs

Ex.: cdigo de mquina (processador MIPS R4000) do algoritmo de Euclides (mximo divisor comum):

Evoluo das LPs

Com o aumento do tamanho dos programas, surgiu a necessidade de uma notao melhor Assembler permitia usar mneumnicos no lugar de cdigos hexadecimal
Correspondncia

1 para 1 com instruo de

mquina Dependia do processador que iria executar (sem portabilidade)

Evoluo das LPs

Ex.: cdigo Assembler do algoritmo de Euclides (mximo divisor comum):

Evoluo das LPs

Com o aumento no nmero de fornecedores, era frustrante ter que reescrever o sistema para cada novo processador Dificuldade em conhecer os detalhes dos programas cada vez maiores (baixa abstrao) Pessoas queriam LP independente da mquina e com notao prxima matemtica (programas mais comuns na poca)

Surgimento do Fortran, anos 50, 1 LP de alto nvel

Evoluo das LPs

Compilador responsvel pela traduo de LP alto nvel para linguagem de mquina


Mais complexo, pois no temos correspondncia 1 p/ 1 do assembler No incio era mais lento que cdigo assembler A situao reverteu com o aumento da complexidade do hardware e melhores compiladores Alm disso, o tempo humano passou a ser mais caro que tempo de mquina (manuteno cara)

Evoluo das LPs

Vdeos: Documentrio BBC Histria dos computadores, parte 4 e 6

ATIVIDADE 07/03: CAP 2 DO SEBESTA

A arte de projetar LPs


Influncia no projeto Fatores para a quantidade e popularidade das LPs

O que influencia o projeto de LPs?

Arquitetura do computador (eficincia)


Arquitetura

de Von Neumann

Metodologias de desenvolvimento de software

Arquitetura de Von Neumann

O que influencia o projeto de LPs?


Arquitetura de von Neumann
Dados

e programas so armazenados na memria A memria separada da CPU Instrues e dados so transmitidos da memria para a CPU

O que influencia o projeto de LPs?

A principal razo das LPs imperativas serem amplamente utilizadas o fato das mquinas possurem arquitetura de von Neumann
Base

das LP imperativas

Variveis

modelam clulas de memria Atribuies modelam movimentos de dados Repetio uma operao eficiente:

Instrues adjacentes na memria

Note que na matemtica utilizamos variveis sem o conceito de memria!

O que influencia o projeto de LPs?

Uma abordagem alternativa: LPs funcionais


Computao
Como

feita pela aplicao de funes sobre parmetros


na matemtica

No

utiliza variveis, atribuies, repetio


problemas causados por efeitos colaterais

Evita

Problema:
Ex.:

arquitetura de von Neumann no eficiente para implementar LPs funcionais


recurso cara

No

existe arquitetura para LPs funcionais

O que influencia o projeto de LPs?

Metodologias de programao
Anos 50 e incio dos anos 60: aplicaes simples, preocupao com eficincia de execuo Final dos anos 60: eficincia das pessoas torna-se importante, legibilidade, boas estruturas de controle

Mquinas mais baratas, mo-de-obra mais cara, sistemas maiores (ex.: controle de refinaria, reserva de passagens) Programao estruturada (em blocos) Projeto top-down e refinamentos sucessivos Desejo de melhor verificao de tipos e estruturas de controle (no usar GOTOs)

O que influencia o projeto de LPs?

Metodologias de programao
Final

dos anos 70: de orientado a processos para orientada a dados


Abstrao

de dados (tipos de dados abstratos,

mdulos) SIMULA 67: 1a LP com abstrao de dados


Meio

dos anos 80: orientao a objetos


herana, vinculao dinmica de

Encapsulamento,

mtodos Smalltalk (1989): 1a LP puramente OO Facilmente suportada por LPs imperativas: C++, Java Tambm em Lisp (CLOS, 1988) e Prolog++ (1994)

O que influencia o projeto de LPs?

Metodologias de programao
Programao
Arquiteturas

concorrente

com mltiplos processadores Multi-threads Suporte em Ada e Java

A arte do projeto de LPs

Hoje temos milhares de LPs de alto nvel, e novas continuam a surgir


Assembler

usada apenas para propsitos especficos (ex.: drivers) Por que existem tantas LPs?
Evoluo,

propsito especfico e preferncia pessoal

A arte do projeto de LPs

Evoluo
Computao

jovem, constantemente buscando formas melhores de fazer as coisas... Anos 60 e 70: programao estruturada
goto

(Fortran, Cobol, Basic) deu lugar a estruturas em bloco como while e case (Algol, Pascal, Ada)

Anos

80: orientao objetos


C++, Eiffel... Java

Smalltalk,

A arte do projeto de LPs

Propsito especfico
Lisp

boa para manipular smbolos e estruturas complexas Snobol boa para manipular strings C boa para software bsico (como SOs) Prolog boa para raciocinar sobre relacionamentos lgicos nos dados muito mais fcil programar em uma LP dentro de seu domnio de aplicao

A arte do projeto de LPs

Preferncia pessoal
Alguns

gostam da programao concisa do C, outros odeiam Alguns acham natural pensar recursivamente, outros preferem iterao Alguns gostam de trabalhar com ponteiros, outros preferem dereferenciao implicta (como Java) improvvel uma LP universalmente aceita...

A arte do projeto de LPs

Por que algumas LPs so mais populares que outras?


Poder

de expresso, facilidade de aprendizado, facilidade de implementao, cdigo aberto, compiladores excelentes, economia, patrocnio e inrcia

A arte do projeto de LPs

Poder de expresso
Teoricamente

as LPs tm a mesma capacidade computacional (mquina de Turing) Porm, alguns recursos de LP tm grande impacto na capacidade de escrever cdigo claro, conciso e de fcil manuteno, principalmente em sistemas grandes
Abstrao

de dados e algoritmos

A arte do projeto de LPs

Facilidade de aprendizado
Basic

era a mais fcil de aprender em sua poca Logo popular em escolas primrias: crianas de 5 anos conseguem aprend-la Pascal foi utilizada por anos para ensinar programao, por ser mais compacta e fcil que as LPs srias Hoje Java mais comum no ensino, embora mais complexa que Pascal, muito mais simples que C++

A arte do projeto de LPs

Facilidade de implementao
Basic

podia ser utilizada em mquinas pequenas, com poucos recursos Pascal tinha uma implementao portvel, gratuita para todas as universidades Java foi disponibilizados gratuitamente para vrias plataformas

A arte do projeto de LPs

Cdigo aberto
A

maioria das LPs possuem compilador ou interpretador de cdigo aberto, embora C esteja mais associada a este tipo de projeto C foi desenvolvida nos anos 70 em conjunto com o Unix, o SO mais usado nas universidades O Linux foi desenvolvido em C 60% do projetos no Sourceforge.net so em C

A arte do projeto de LPs

Compiladores excelentes
Parte

do sucesso do Fortran foi a disponibilidade de timos compiladores, financiado por empresas Verses anteriores ao Fortran 90 no tinham recurso nem ponteiros: estes recursos dificultam gerao de cdigo rpido Por outro lado, algumas LPs possuem compiladores e ferramentas que auxiliam no gerenciamento de projetos grandes (ex.: Common Lisp)

A arte do projeto de LPs

Economia, patrocnio e inrcia


Cobol

e PL/I foram financiados pela IBM Ada foi financiado pelo Dep. de defesa dos EUA
Devido

sua complexidade, teria morrido muito antes sem o patrocnio...

C#

no teria recebido toda a ateno sem o patrocnio da Microsoft Algumas LPs continuam sendo usadas mesmo com alternativas melhores: alto custo para substituir os sistemas legados

Classificao das LPs

Classificao das LPs

As LPs podem ser classificadas como


Declarativas:
Nvel

o que o computador vai fazer

mais alto: foco no problema Ex.: funcional (Lisp, ML, Haskell), lgica (Prolog)
Imperativas:
Predomina

como o computador vai fazer

por razo de performance Ex.: von Neumann (Fortran,C), script (PHP, Python, Ruby, Perl), OO (C++, Java)

Classificao das LPs

A principal dificuldade no projeto de LPs declarativas conseguir se livrar de detalhes de implementao irrelevantes, sem perder muito controle da estrutura do algoritmo
Mesmo

com hardware cada vez melhor, o projeto de algoritmos eficientes continua fundamental em sistemas que processam grande quantidade de dados

Classificao das LPs

Ainda no se sabe se compiladores sero capazes de descobrir bons algoritmos para problemas definidos em um nvel muito alto
Ex.:

dada a definio matemtica de nm. primo, o compilador deveria construir o algoritmo para determinar de forma eficiente se um dado nm. primo ou no

Paradigmas

IMPERATIVAS

Centrado em variveis, atribuio e iterao


Produz efeitos colaterais Melhor desempenho (von Neumann)

C, Pascal, Ada

Orientado a objetos
Encapsula dados com processamento Herana e vinculao dinmica de mtodos Fcil adaptao das LPs imperativas C++, Java, Ada 95

Paradigmas

Funcional (declarativo)
Computao atravs da aplicao de funes sobre parmetros, recursividade, formas funcionais Lisp, Scheme, ML, Haskell

Lgico (declarativo)
Baseado em regras lgicas, ou invs de algoritmos Prolog

Outras categorias

Linguagens paralelas
Suporta criao de threads e execuo paralela Deve tambm suportar coordenao e compartilhamento

Linguagens visuais
Visual Basic, .net Arrastas e soltar para gerar parte do cdigo Facilita gerao de interfaces grficas

Linguagens de marcao
HTML, XML No especifica computao, logo no so LPs Projeto, avaliao e implementao similar a LPs

Mtodos de implemetao de LPs


Nveis de abstrao Compilao Interpretao Hbrido Pr-processamento

Computador visto em camadas

Computador visto em camadas

Linguagem de mquina (macro-instrues)


Instrues

primitivas, entendidas pelo processador de alto nvel: entrada/sada, gerenciamento de arquivos, gerenciamento de recursos

Sistema operacional
Primitivas

Compiladores
Fornece

o computador virtual: visto pelo programador de LPs de alto nvel Interface entre o programador e o SO/mquina

Compilao pura

Compilador traduz cdigo de alto nvel para linguagem de mquina Depois, o usurio solicita a execuo ao SO

Compilao pura

Traduo lenta, execuo rpida Ex.: C, C++, Ada, COBOL, Pascal

Agrupa caracteres do cdigo-fonte em tokens: identificadores, operadores, pontuao Constri estruturas hierrquicas chamadas parse trees que representam a estrutura sinttica do programa A tabela de smbolos contmerros de semntica Verifica informaes de tipo (como erros de tipo) e cria e atributos das variveis definidas pelointermedirio (nvel cdigo programador mais alto que assembly)

Processo de Compilao

(parser)

O programa de mquina deve ser linkado ao SO (ex. Bibliotecas de I/O) e carregado na memria. Programa de mquina + cdigo SO = mdulo de carga

Interpretao pura

O SO executa o interpretador, que executa o cdigo de alto nvel como uma mquina virtual capaz de entender estas instrues
Maior

flexibilidade e melhores msgs de erro Capacidade de produzir e executar cdigo (ex.: Lisp, Prolog, Python, Ruby, Perl, Tcl) No precisa recompilar tudo aps uma modificao (fase de desenvolvimento)

Interpretao pura

Geralmente cdigo compilado tem melhor performance que o interpretado (10-100x pior)
Ex.:

se o endereo de uma var. conhecido na compilao, ele pode aparecer explicitamente no cdigo (ao invs de buscar em uma tabela) A traduo de alto nvel para ling. de mquina pode ser feito vrias vezes p/ uma mesma instruo (dentro de loop ou funo)
Compilador

faz apenas 1 vez

Interpretao pura

Precisa de mais memria durante a execuo


Armazena

tabela de smbolos e cdigo-fonte

Fcil de depurar: em todo erro em tempo de execuo aparece imediatamente a linha onde o problema ocorreu
No

cdigo traduzido/otimizado a identificao da linha mais difcil

Est se tornando rara


Primeiras

verses de Lisp, APL, SNOBOL Hoje: Javascript, PHP

Hbrido

Cdigo intermedirio pode ser transformado mais rapidamente em ling de mquina


Ex.:

Java

Hbrido

Traduz programa de alto nvel para linguagem intermediria A linguagem intermediria intepretada Mais rpido que puramente interpretado, pois a decodificao realizada apenas uma vez Perl, Java
Algumas

aplicaes Java so compiladas

Tempo de execuo mdio

Sistema Hbrido

Rotinas de biblioteca e link edio

A biblioteca como uma extenso das instrues de hardware

Ex.: funes mat. como log, printf

O linker une o programa com os cdigos de biblioteca necessrios

Assembler aps compilao

Muitos compiladores geram assembler ao invs de cdigo de mquina Vantagens:


Facilidade

de leitura Isola compilador do formato de mquina

Pr-processador

Executado antes do compilador para realizar modificaes no fonte:


Constantes, includes, macros Compilao condicional (vars. de ambiente determinam o que vai ser removido

Tarefas simples: no tentam entender o cdigo

Traduo fonte para fonte

Alguns compiladores geram cdigo em outra LP de alto nvel

Ex.: compilador C++ da AT&T

No um prprocessamento: anlise necessria

Bootstrapping

Nos anos 70 a portabilidade era um grande problema: muitas arquiteturas, pouca memria e capacidade de processamento Niklaus Wirth forneceu ferramentas p/ Pascal:
Compilador

Pascal -> P-code, em Pascal Compilador Pascal -> P-code, em P-code Interpretador P-code, em Pascal

P-code simples, facilitando criao de interpretador/compilador p/ vrias arquiteturas

Compilao de LPs interpretadas


Existem compiladores para algumas LPs interpretadas, como Lisp, Prolog, Smalltalk Como alguns recursos das LPs interpretadas s podem ser feitos em tempo de execuo, cdigo de interpretador inserido no executvel

Compilao just-in-time

Byte code Java pode ser executado nas arquiteturas que possuem mquina virtual Java Byte code Java pode ser transferido pela Internet e transformado em ling de mquina (na arquitetura local) imediatamente antes da execuo O mesmo ocorre com C#

Ambientes de programao

Ferramentas utilizadas no desenvolvimento de software UNIX/Linux


Separadas:

editores, compiladores, depuradores, linkedio, sistema de arquivos


integrado

Visual Studio .NET, Jbuilder, Delphi


Ambiente

Eclipse
Open

source

Viso geral da compilao


Anlise lxica, sinttica e semntica Gerao e otimizao de cdigo

Processo de Compilao
(parser)

Anlise Lxica e Sinttica Exemplo: algoritmo de Euclides

Anlise Lxica e Sinttica

O analisador lxico (scanner) l os caracteres de entrada e os agrupa em tokens


Diminui

a entrada (menos tokens que chars) Categoriza (anlise morfolgica) Remove comentrios

Anlise Lxica e Sinttica

O analisador sinttico (parser) relaciona os tokens e contri rvores sintticas


Para

isso, ele utiliza regras chamadas de gramtica livre de contexto

Anlise semntica

A anlise semntica gerencia os identificadores que aparecem no cdigo, garantindo que se refira entidade correta e seja usado de forma consistente Para isso, ele mantm uma tabela de smbolos, para coletar os dados de cada id (ex.: nome, tipo, escopo)

Anlise semntica

Utilizando a tabela de smbolos, possvel garantir regras que no so capturadas pelas rvores sintticas. Por exemplo,
Todo

id declarado antes de ser usado Uso em contexto errado (ex.: somar int com str) Qtde e tipos dos argumentos de funes Labels do case devem ser distintos Toda funo deve ter um return

Anlise semntica

Quando as regras semnticas so realizadas na compilao (disparadas pelo parser), so chamadas de semntica esttica
Caso

contrrio, temos semntica dinmica

Exemplo de regras em tempo de execuo:


Variveis

no inicializadas no podem ser usadas em expresses Dereferenciar ponteiros apenas com obj vlido Verificar limite de ndices em arrays Overflow em operaes aritmticas

Gerao de cdigo

A fase de gerao de cdigo utiliza a rvore sinttica e a tabela de smbolos para produzir cdigo na linguagem alvo

Otimizao de cdigo

A fase de otimizao de cdigo transforma o programa em uma verso mais eficiente e/ou com menos consumo de memria
Utilizado

na verso final do sistema (pois a otimizao demorada)

Critrios de avaliao de LPs

Critrios de avaliao
Caracterstica Simplicidade/ortogonalidade Estruturas de controle Tipos de dados simples e estruturados Projeto da sintaxe Suporte para abstrao Expressividade Verificao de tipos Legibilidade Escrita Confiabilidade

Manipulao de excees
Apelidos restritos

Critrios de avaliao

Legibilidade
O

critrio mais importante para avaliar LPs

Antes

dos anos 70, a nfase era eficincia de execuo e traduo pela mquina (mais cara) A escrita de cdigo apenas uma pequena parte do processo de engenharia de software Hoje a facilidade de manuteno do cdigo mais importante (mo-de-obra cara)
Uma

LP deve ter boa legibilidade dentro do domnio de aplicao a que se prope

Critrios de avaliao

Legibilidade: fatores
Simplicidade
Muitos

recursos ruim (curva de aprendizagem)

Cada programador aprende apenas um subconjunto

Poucos

recursos ruim (muito cdigo, ex: assembly) Muitas formas de fazer a mesma coisa
Ex.: (C, Java) x = x+1; x += 1; x++; ++x;
Sobrecarga

de operadores (criados pelo programador)


Ruim se o programador exagerar Ex.: usar + para representar a soma de todos os elementos de 2 vetores, mas isto no soma de vetores!

Regularidade

(regras sem excees) bom!

Critrios de avaliao

Legibilidade: fatores
Ortogonalidade
Um

pequeno conjunto de primitivas podem ser combinadas de poucas maneiras para produzir todas as estruturas de dados e controle da LP Toda combinao possvel de primitivas permitida e possui significado Exemplo:

Primitivas de tipos: int, float, double, char Operadores de tipos: array, pointer Operadores de tipos podem ser aplicados neles prprios, e nas primitivas de tipos Se no permitir ponteiros para arrays, limita as estruturas de dados possveis

Critrios de avaliao

Legibilidade: fatores
Ortogonalidade
Torna

a LP mais fcil de ler e aprender Falta de ortogonalidade produz excees Problemas de ortogonalidade em C

Por que estruturas podem ser retornadas por funes, mas arrays no podem? Por que uma funo ou void no podem ser elementos de um array? Por que todos os parmetros so passados por valor, exceto arrays?

Critrios de avaliao

Legibilidade: fatores
Ortogonalidade
Excesso

de ortogonalidade (ALGOL 68)

O lado esquerdo de uma atribuio pode ser uma expresso!

Boa

ortogonalidade: LPs funcionais (Lisp, ML...)

Temos apenas funes e parmetros (listas no caso de Lisp) No possui operadores de atribuio (sem efeitos colaterais)

Critrios de avaliao

Legibilidade: fatores
Estruturas
C

de controle (p/ evitar GOTOs)


Fortran

Critrios de avaliao

Legibilidade: fatores
Tipos

de dados e estruturas
apropriados para o domnio de

Tipos/estruturas

aplicao

Ex.: tipo decimal em aplicaes comerciais

Ex.:

tipo booleano mais claro que usar nmeros Registros facilitam o agrupamento de dados relacionados Fortran

Critrios de avaliao

Legibilidade: fatores

Consideraes de sintaxe

Forma dos identificadores: longos so mais fceis de ler

Fortran 77 (6 caracteres), BASIC 78 (letra ou letra+dgito) Escolha das palavras: while, for, class.. Reservar palavras especiais: varivel chamada if, for... ?? Palavras que finalizam estruturas de controle: end for, end if

Palavras especiais

Tabulao para definir bloco (Python) Forma e significado

A semntica deve ser natural para a sintaxe No usar palavras especiais com significados diferentes Ex.: static em C tem 2 significados, depende do contexto

Critrios de avaliao

Facilidade de escrita
Quo

facilmente uma LP pode ser usada para escrever programas de um dado domnio
COBOL

e Fortran so melhores para diferentes domnios

Critrios de avaliao

Facilidade de escrita: fatores


Simplicidade
LPs

e ortogonalidade

grandes so difceis de entender e usar corretamente Melhor ter poucas primitivas e conjunto consistente de regras (ortogonalidade) Muita ortogonalidade: tudo aceito, difcil capturar erros

Ex: atribuio no teste do if em C Melhor que o compilador encontre o mximo de erros

Critrios de avaliao

Facilidade de escrita: fatores


Suporte

para abstrao

Abstrao:

capacidade de ocultar detalhes Abstrao de processos: subprogramas e mdulos Abstrao de dados: estruturas, registros, objetos

Critrios de avaliao

Facilidade de escrita: fatores


Expressividade:
Atalhos

cdigo menor

(ex.: x++; ao invs de x = x+1;)


APL

Imprime todos os primos de 1 at R (~RR.R)/R1R Ordena palavras na matriz X, por tamanho X[X+.' ';] Remove tags HTML:

Critrios de avaliao

Confiabilidade
Funcionar

de acordo com o especificado sob todas as condies

Critrios de avaliao

Confiabilidade: fatores
Legibilidade
M

e facilidade de escrita

legibilidade afeta manuteno (inserimos bugs) Escrita: quanto mais cdigo, mais chance de bugs
Verificao
C ANSI

de tipos de excees

78 permitia parmetro float receber int sem converso C++, Fortran, Ada

Manipulao
Java, Ex:

Apelidos

(Perigoso!)

duas variveis apontando para mesmo lugar na memria (ponteiro)

Critrios de avaliao

Custo

Treinamento dos programadores

Simplicidade e ortogonalidade Escrita e escolha apropriada da LP

Escrita de programas

Tempo de compilao x Tempo de execuo Preo

Java gratuito, Ada era inicialmente cara Um bug pode derrubar um avio, explodir uma refinaria, alterar contas bancrias... Legibilidade

Confiabilidade

Manuteno

Critrios de avaliao

Custo
Os

aspectos mais importantes so:

Tempo

de desenvolvimento e manuteno Confiabilidade


...

que dependem da legibilidade e facilidade de escrita! Outros aspectos


Portabilidade Generalidade

(bom para vrios domnios de

aplicao) Bem definida

Trade-offs no projeto de LPs

Confiabilidade x Tempo de execuo


Verificao

de limites em arrays (Java tem, C

no)

Legibilidade x Facilidade de escrita


APL Perl

tem muitas funes embutidas


de escrever, difcil de ler

Fcil

tambm tem este problema

Flexibilidade x Confiabilidade
Registros

variantes: permite vrios tipos em um mesmo campo Ponteiros em C Flexvel, mas perigoso durante a execuo

Critrios de avaliao

Pontos de vista:
Projetista:
Deseja

inventor da linguagem

elegncia

Implementador:
Simplicidade

quem escreve o compilador

p/ implementar os recursos da LP

Programador
Legibilidade

e facilidade de escrita

Equipes do Trabalho

Ordem de popularidade (langpop.com)


1. 2. 3. 4. 5. 6. 7.

8.
9. 10. 11. 12.

13.
14. 15. 16. 17.

C Java C++ PHP JavaScript Python C# Perl Ruby Shell (ex.: Bourne Shell - Unix) Visual Basic Lisp/Scheme Pascal Haskell Fortran Lua Prolog

12 equipes com ~4 alunos Apresentaes de 15 min Ilustrar executando cdigo Mesma ordem em todas as apresentaes

Perde ponto se no estiver pronta no horrio marcado (inclusive a 1 equipe) Instalao e execuo de exemplo Histria da linguagem Suporta quais paradigmas? Domnio de aplicao Sistema de implementao O que influenciou o projeto?

08/03 e 14/03

Você também pode gostar