-
Captulo 1
Aspectos Preliminares
1.1 Motivos para Estudar os Conceitos de Linguagens
deProgramao
1.2 Domnios de Programao1.3 Critrios de Avaliao da Linguagem1.4
Influncias sobre o Projeto da Linguagem
1.5 Categorias de Linguagem1.6 Trade-Offs no Projeto da
Linguagem
1.7 Mtodos de Implementao
1.8 Ambientes de Programao
Konrad Zuse
KonradZuseprojetouuma sriedecomputadoreseletromecnicosentre 1936
e 1944 na Alemanha.
Em 1945, projetouuma linguagem
de programaoalgortmica
completa,a Plankalkl,jamais
implementada,e sua descrio
completanem mesmofoi publicadaat 1972.
-
18 ASPECTOS PRELIMINARES
Antesde iniciarmosnossaexposiodosconceitosde linguagensde
programao,devemos
consideraralguns aspectos.Primeiro, discutiremosalguns motivos
pelos quais os estudan-
tes de cinciasda computaoe os desenvolvedoresde
softwareprofissionaisdevemestu-
dar os conceitosgeraisde projeto e de avaliaodas linguagens.Essa
discusso valiosa
para os que acreditamser o conhecimentofuncional de uma ou de
duas linguagens de
programaosuficientepara os cientistasda computao.Os principais
domnios de pro-gramaoserodescritosbrevemente.Em seguida,uma vez que
o livro avalia recursosde
linguagem,apresentaremosuma lista de critrios por meio dos quais
se pode fazer julga-mentos.As duasprincipaisinflunciassobreo
projetoda linguagem,sobrea arquiteturade
mquinae sobreas metodologiasde projeto de programasero,ento,
discutidas.Depois,
descreveremosalguns dos principaistrade-offsque devemser
consideradosduranteo pro-jeto da linguagem.
Uma vez que estelivro tambmtratada implementaode linguagensde
programa-
o, estecaptulo inclui uma viso geral das abordagensmais comuns
implementao.Por fim, descreveremosbrevementealguns exemplosde
ambientesde programaoe dis-
cutiremosseu impactona produode software.
1.1 Motivos para Estudar os Conceitos de Linguagensde
Programao
natural que os estudantesimaginemcomo se beneficiarodo estudo
dos conceitosde
linguagensde programao.Afinal de contas,uma grande quantidadede
outros tpicosdas cinciasda computaomereceum estudosrio. O que
apresentamosa seguir o que
acreditamosser uma lista obrigatriados benefciospotenciaisde
estudaros conceitosdalinguagem.
Aumentoda capacidadede expressaridias.Acredita-seque a
profundidade de
nossacapacidadeintelectualseja influenciadapelo poder
expressivoda lingua-
gememquecomunicamosnossospensamentos.Os quepossuemuma
compreen-so limitada da linguagemnatural so limitados na
complexidadede expressar
seuspensamentos,especialmenteem termosde profundidadede
abstrao.Em
outras palavras, difcil para as pessoasconceberemestruturasque
no podemdescrever,verbalmenteou por escrito.Programadoresinscritos
no processode
desenvolversoftwarevem-sesimilarmenteembaraados.A linguagem na
qual
desenvolvemo softwareimpe limitesquantoaos tipos de estruturasde
contro-le, de estruturasde dadose de abstraesqueelespodemusar;
assim,as formas
de algoritmospossveisde seremconstrudastambmso limitadas.O
conhecimentode uma variedademaisampla de recursosde
linguagensde
programaoreduz essaslimitaesno desenvolvimentode-software.Os
progra-
madorespodem aumentara variedadede seus processosintelectuaisde
desen-
volvimentode softwareaprendendonovasconstruesde
linguagem.Pode-seargumentarque aprenderas capacidadesde outras
linguagensno
ajudarum programadorobrigadoa usar uma
linguagemsemessascapacidades.
Esse argumentono se sustenta,porm, porque freqentemente as
facilidades
da linguagempodemser simuladasem outras linguagensque no
suportames-ses recursosdiretamente.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 19
Por exemplo,depoisde ter aprendidoas funesde manipulaode
strings'
do FORTRAN 90 (ANSI, 1992), como,por exemplo,a funode procura,
INDEX,
um programadorPascal (Ledgard, 1984) seria levado naturalmentea
construirsubprogramasparaofereceressasoperaes.O mesmo
verdadeiroemrelaoa
muitas outras construescomplexasdiscutidasnestelivro.
O estudodos conceitosdas linguagensde programaoforma uma
aprecia-
o dos recursosvaliososda linguageme encorajaos programadoresa
us-Ios.O fato de muitos recursosdasvrias linguagenspoderemser
simuladosem
outras no diminui significativamentea importnciade projetar
linguagenscomo melhorconjuntode recursos.Sempre melhorusar um
recursocujo projetofoiintegradona linguagemdo queusar uma
simulaodesse,o qual, muitasvezes,
menoselegantee mais desajeitadoem uma linguagemque no o
suporta.
Maior conhecimentopara a escolhade linguagensapropriadas.Muitos
programa-
dores profissionaistiverampouca educaoformal em cinciasda
computao;ao contrrio, aprenderama programarsozinhos ou por meio de
programasde
treinamento in-house". Tais programasfreqentementeensinam uma ou
duaslinguagens diretamentepertinentesao trabalho da
organizao.Muitos outros
programadoresreceberamseu treinamentoformal em um
passadodistante. Aslinguagensque aprenderamno so maisusadas,e
muitos recursosagora dispo-
nveisno eramamplamenteconhecidos.O resultadodisso quemuitos
progra-
madores,quando lhes dada a possibilidadede escolhadas
linguagenspara umnovo projeto, continuam a usar aquela com a qual
esto mais familiarizados,mesmo que ela seja pouco adequada ao novo
projeto. Se tais programadores
estivessemmais familiarizados com as outras linguagens
disponveis, especial-mentecom os
seusrecursosparticulares,estariamem uma posiomelhor parafazeremuma
escolhaconsciente.
Capacidadeaumentadapara aprendernovaslinguagens.A programaode
com-putadores uma disciplinajovem, e as metodologiasde projeto, as
ferramentasde desenvolvimentode softwaree as linguagensde
programaoainda estoem
um estgiode contnuaevoluo.Isso torna o desenvolvimentode
softwareuma
profissoexcitante,mastambmsignificaque a aprendizagemcontnua
funda-mental. O processode aprenderuma nova linguagemde
programaopode ser
extensoe difcil, especialmentepara algumque esteja vontade com
somenteuma ou com duas linguagense quejamais examinouos conceitosem
geral.As-
sim que for adquirida uma completacompreensodos
conceitosfundamentaisdas linguagens, ir tornar-se mais fcil ver
como essesesto incorporados ao
projeto da linguagemaprendida.
Por exemplo,programadoresque entendemo conceito de abstraode
da-
dos tero mais facilidadepara aprendercomo construirtipos de
dados abstratosemJava (GoslingetaI., 1996)do queaquelesqueno
estoabsolutamentefami-
liarizadoscom tal exigncia.O mesmofenmenoocorrenas
linguagensnaturais.
Quanto mais voc conhecea gramticade sua lngua nativa, mais fcil
acharaprenderuma segundalngua natural.Alm disso,aprenderuma
segundalngua
'N.
deT.String:emprogramao,umconjuntocontguoqualquerdecaracteresalfanumricos.Nomes,endereos,palavrase
frasessostrings."N. deT. ln-house:dentrodaprpriaorganizao.
-
20 ASPECTOS PRELIMINARES
tambmtem o efeito colateralbenficode ensin-lo mais a respeitode
seu pri-meiro idioma.
Por fim, essencialque os programadoresativos conheamo vocabulrio
e
os conceitosfundamentaisdas linguagensde programao,para que
possamler
e entenderseusmanuaise sua literatura de vendasde linguagense de
compila-dores.
Entendermelhora importnciada implementao.Ao aprender os
conceitosde
linguagensde programao,tanto interessantecomo necessriotocar
nasques-tes de implementaoque afetamessesconceitos.Em alguns
casos,a compre-enso das questesde implementaoleva a um
entendimentodo porqu das
linguagensseremprojetadasdaquelamaneira.Isso,por suavez, leva
capacida-de de usar uma linguagem de modo mais inteligente, como
ela foi projetada.
Podemosnos tornar melhoresprogramadoresao entendermosas
escolhasquepodemosfazer entre as construesde linguagensde
programaoe as conse-qnciasdas opes.
Certostipos de bugsde programasomentepodem ser encontradose
corrigi-
dos por um programadorqueconheacertosdetalhesde
implementaorelacio-
nados.Outro benefciode entenderas questesde implementao que isso
nospermite visualizar como um computadorexecutavrias construesda
lingua-
gem.Esta ltima afirmao,por suavez, fomentao entendimentoda
eficinciarelativadeconstruesalternativasa seremescolhidasparao
programa.Por exem-
plo, programadoresque sabempouco da implementaoda
recurso,muitasve-zes, no sabemque um algoritmo recursivo
tipicamentemuito mais lento doque um iterativoequivalente.
Aumentoda capacidadedeprojetar novaslinguagens.Para um
estudante,a exi-
gnciade um projeto de uma nova linguagemde programaono futuro
podeparecer remota. Porm, a maioria dos programadoresprofissionais
ocasional
menteprojetalinguagensde um tipo ou de outro. Por exemplo,muitos
dos siste-masexigemqueo usurio interajade algumamaneira,mesmoque
somenteparaintroduzir dados e comandos.Em
situaessimples,somentealguns valores de
dados sointroduzidos,e a linguagemdo formato de entrada trivial.
Por outrolado, pode ser necessrioque o usurio percorradiversosnveis
de menus e in-
troduzauma variedadede comandos,comono casode um processadorde
texto.
Nessessistemas,a interfacecom o usurio um problemade projeto
complexo.A sua forma projetadapelo desenvolvedorde sistemas,e os
critriosparajulg-Ia sosemelhantesaosusadosparajulgar o projeto de
uma linguagemde progra-
mao.Um examecrtico das linguagensde programao,portanto, ajudar
noprojeto dessessistemascomplexose, mais comumente, ajudar os
usurios a
examinare a avaliaressesprodutos. Avanoglobal da computao.Por
fim, h uma viso global da computaoque
podejustificar o estudodos conceitosdas linguagensde
programao.No obs-
tante normalmenteser possveldeterminar o motivo pelo qual uma
linguagemparticular de programaotornou-se popular, nem sempre
claro, pelo menosem retrospectiva,que as linguagensmais popularesso
as melhoresdisponveis.
Em algunscasos,pode-seconcluir queuma linguagemtornou-sepopular
porqueaquelescom capacidadede optar ainda no estavamfamiliarizados
com os con-
ceitosde linguagemde programao.Por
exemplo,muitaspessoasacreditamque teria sido melhor se o ALGOL
60
(Backuset a!., 1962) tivessesubstitudoo FORTRAN no incio da
dcadade 60,
porque aquela mais elegantee tem instruesde controle muito
melhoresdo
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 21
queeste,entreoutrasrazes.O fatodissonoter
acontecidodeve-separcial-menteaosprogramadoreseaosgerentesdedesenvolvimentodesoftwaredaque-la
poca,cujamaiorianoentendiaclaramenteo
projetoconceitualdoALGOL60.Elesachavamsuadescriodifcilde ler (o
queeraverdade)e
aindamaisdifcildeentender.Noapreciaramosbenefciosdaestruturaembloco,darecur-soedasinstruesdecontrolebemestruturadas,demodoquedeixaramdeverosbenefciosdoALGOL60sobreo
FORTRAN.
Obviamente,muitosoutrosfatorescontriburamparaa
faltadeaceitaodoALGOL60,conformeveremosnoCaptulo2. Entretanto,o
fatodosusuriosdecomputadorgeral-mentenoteremconscinciadosbenefciosda
linguagemdesempenhouumpapelimpor-tante.
Emgeral,seaquelesqueescolhemaslinguagensforemmelhorinformados,talvezlinguagensmelhoressesobreporiammaisrapidamentesruins.
1.2 Domniosde Programao
Oscomputadoressousadosemumainfinidadedediferentesreas,desdeo
controledeusinaseltricasnucleares
armazenagemderegistrosdetalesdechequespessoais.Porcausadessagrandediversidadenoseuespao,linguagensdeprogramaocommetasmuitodiferentestmsidodesenvolvidas.Nestaseo,discutiremosbrevementealgumasdasre-asdeaplicaesdecomputadorese
suaslinguagensassociadas.
1.2.1 AplicaesCientficas
Osprimeiroscomputadoresdigitais,quesurgiramnadcadade40,eramusadose,defato,foraminventadosparaaplicaescientficas.Tipicamente,asaplicaescientficastmes-truturasdedadossimples,masexigemumgrandenmerodecomputaesaritmticascomponto-flutuante.Asestruturasdedadosmaiscomunssoosarrays'
easmatrizes(matrices);asestruturasdecontrolemaiscomunssooslaosdecontageme
deselees.As
lingua-gensdeprogramaodealtonvel,inventadasparaaplicaescientficas,foramprojetadasparasupriressasnecessidades.A
concorrentedelasfoia linguagemassembly;dessemodo,a eficinciaeraa
primeirapreocupao.A primeiralinguagemparaaplicaescientficasfoi o
FORTRAN.O ALGOL60 e a maioriade
suasdescendentestambmsedestinama
seremusadasnessarea,aindaquetenhamsidoprojetadastambmparaoutrasreasrela-cionadas.Paraalgumasaplicaescientficascujaeficinciaaprincipalpreocupao,como
'N. deT.Array:(1)
arranjoordenado.Emcomputao,arranjodeelementosdememriaemumouemdiversosnveisouplanos;matriz(coleodedadossimilaresarmazenadossobomesmonome)ouestruturaordenadadeelementosacessveis,referenciadospornmeros,usadaparacontertabelasouconjuntodedadosrelacionadosedomesmotipo.(2)
(programao)Umconjuntodeitensdedadosdetiposidnticos,distinguidosporseusndices(ou"subscritos").O
nmerodedimensesqueumarraypodeter dependeda
linguagem,masusualmenteele
ilimitado.Umavarivelcomumsimples("escalar")poderiaserconsideradacomoum
arrayzero-dimensional.Umarefernciaa umelementodearray
escritacomoA[i,j,k], emqueA o nomedoarraye i,j ek soosndices.A
linguagemC
peculiaremtermosdequecadandiceescritoemcolchetesseparados,e.g.A[i]
(j][k]. Issoexpressao fatodeque,emC,umarrayN-dimensional, de
fato,um vetor,sendoquecadaumde seuselementos umarrayN-1
dimensional.Oselementosdeum arraysoarmazenadoscontiguamente.
-
22 ASPECTOS PRELIMINARES
aquelascomunsnasdcadasde50e 60,nenhumalinguagemsubseqente
significativa-mentemelhordoqueo FORTRAN.
1.2.2 AplicaesComerciais
ousodecomputadoresparaaplicaescomerciaisiniciou-senadcadade50.Equipamen-tosespeciaisforamdesenvolvidosparatalpropsito,juntamentecomlinguagensespeciais.A
primeiralinguagemdealtonvelbem-sucedidaparanegciosfoio
COBOL(ANSI,1985),queapareceuem 1960.Ela ainda a
maiscomumenteusadaparaessasaplicaes.Aslinguagenscomerciaissocaracterizadaspor
facilidadesparaproduzirrelatrioselabora-dos,por
maneirasprecisasdedescrevere por armazenarnmerosdecimaise
dadosdecaracteres,almdacapacidadedeespecificaroperaesaritmticasdecimais.
Como
adventodosmicrocomputadores,surgiramnovasmaneirasdeusarcomputa-doresparafazernegcios,especialmentedepequenoporte.Duasferramentasespecficasquepodemserusadasempequenoscomputadores,ossistemasdeplanilhaseletrnicase
ossistemasdebancosdedados,foramdesenvolvidasparaosnegcioseagorasoamplamen-teusadas.
HpoucosdesenvolvimentosnaslinguagensdeaplicaocomercialalmdoCOBOL.Portanto,estelivronodiscuteaslinguagensdeaplicaocomercial,a
noserparaapre-sentara
histriadodesenvolvimentodoCOBOLnoCaptulo2.
1.2.3 IntelignciaArtificial
A intelignciaartificial(IA)
umareaabrangentedasaplicaesdecomputadorcaracte-rizadapelousodecomputaessimblicasemvezde
numricas.Computaosimblicasignificaquesmbolos,queconsistememnomesno
lugarde nmeros,somanipulados.Almdisso,acomputaosimblica
feitademaneiramaisconvenientecomlistasencade-adasdedadosemvezdearrays.Essetipodeprogramao,svezes,requermaisflexibili-dadedoqueoutrosdomniosdeprogramao.Porexemplo,emalgumasaplicaesdeIA
acapacidadedecriare deexecutarsegmentosdecdigodurantea execuo
conveniente.
A primeiralinguagemde programaodesenvolvidaparaaplicaesde IA
ampla-menteutilizadafoia funcionalLISP (McCarthyeta/.,
1965),quesurgiuem1959.A maioriadasaplicaesdeIA
foiescritaemLISPouemumadesuasparentesprximas.No inciodadcadade 70,
surgiuumaabordagemalternativaparataisaplicaes- a
programaolgica,usandoa linguagemProlog(Clocksine Mellish,1997).O
Scheme,umdialetodoLISp,eo PrologsoapresentadosnosCaptulos14e
15,respectivamente.
1.2.4 Programaode Sistemas
O
sistemaoperacionaletodasasferramentasdesuporteprogramaodeumcomputadorsocoletivamenteconhecidoscomoseusoftwarebsicoque
usadoquasecontinua-mentee,portanto,devetereficincianaexecuo.Portanto,umalinguagemparataldom-nio
deveoferecerumaexecuorpida.Almdisso,deveterrecursosdebaixonvelquepermitamaosoftwarefazerinterfacecomosdispositivosexternosa
seremescritos.
Nasdcadasde60e
70,algunsfabricantesdecomputadorescomo,porexemplo,aIBM,aDigitaleaBurroughs(agoraUNISYS),desenvolveramlinguagensdealtonvelespe-ciaisorientadasparaa
mquina,ou seja,parao softwarede seusequipamentos.Paraos
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 23
computadoresmainframeoda IBM, a linguagemeraa PLlS, um dialetoda
PLlI;
paraaDigital,eraaBLISS,emumalinguagemnumnvellogoacimadoassembly;paraaBurroughs,eraa
ExtendedALGOL.
O sistemaoperacionalUNIXfoiescritoquaseinteiramenteemC
(ANSI,1989),o queo
tornourelativamentefcildeportaroudemover,paramquinasdiferentes.AlgumasdascaractersticasdoCtornamboaasuaaplicaoemprogramaodesistemas.Eladebaixonvel,suaexecuoeficientee
nosobrecarregao
usuriocommuitasrestriesdesegu-rana.Osprogramadoresdesistemasfreqentementesoexcelentese
noacreditampre-cisardessasrestries.Alguns,entretanto,achama
linguagemC muitoperigosaparaserusadaemsistemasgrandese
importantes.
1.2.5 linguagens de Scripting
As
linguagensdescriptingdesenvolveram-selentamentenodecorrerdosltimos25anos.Taislinguagenssousadascolocando-seumalistadecomandos,chamadosdescript,
emumarquivoparaseremexecutados.A primeira,chamadadesh (deshell),
iniciou-secomoumapequenacoleode
comandosinterpretadoscomochamadasaossubprogramasdosistemaqueexecutavamfunesdeutilidadecomo,porexemplo,gerenciamentoe
filtra-gemsimplesde arquivo.A
essabaseforamadicionadasvariveis,instruesde
fluxodecontrole,funesevriasoutrascapacidades.O resultado
umalinguagemdeprograma-ocompleta.Umadasmaispoderosase
conhecidasdelas a ksh (Bolskye
Korn,1995),desenvolvidaporDavidKornnoBell Laboratories.
A awk outralinguagemdescripting,desenvolvidaporAl
Aho,BrianKernighanePeterWienbergernoBellLaboratories(AhoetaI.,
1988).A awk
comeoucomoumalingua-gemdegeraoderelatrios,mas,depois,passoua
serusadaparapropsitosmaisgerais.A te!
umalinguagemdescriptingextensvel,desenvolvidaporJohn
OusterhoutnaUni-versidadedaCalifrniaemBerkeley(Ousterhout,1994).A
te!agoraestcombinadacoma
tk,umalinguagemqueforneceummtodoparaconstruiraplicativosX Window.A
lin-guagemPerl,desenvolvidaporLarryWall,eraoriginalmenteumacombinaoda
sh e daawk (WalletaI., 1996).A
Perldesenvolveu-sesignificativamentedesdeseuincio,etornou-seumalinguagemdeprogramaopoderosa,aindaqueumtantoprimitiva.Noobstanteelaaindaserchamadafreqentementede
linguagemdescripting,preferimosimagin-Iacomoumadeprogramaoestranha,mascompleta.Desdeo
adventodaWorldWideWeb,apopularidadedaPerlcresceudrasticamente,principalmenteporqueelaquaseidealparaprogramaodeCommonGatewayInterface(CG\).
As linguagensdescripting,demaneirageral,tmcontribudopoucoparao
desenvol-vimentode linguagensde programaomaisconvencionais.Porm,a
Perl
temdiversosrecursosinteressantesquediscutiremosposteriormentenestelivro.
1.2.6 linguagens para PropsitosEspeciais
Umagrandequantidadede linguagensparapropsitosespeciaissurgiuno
decorrerdosltimos40 anos.Elasvariamda
RPG,usadaparaproduzirrelatrioscomerciais,
APT,usadaparainstruirferramentasdemquinaprogramveis,
GPSS,usadaparasimulaodesistemas.Estelivronodiscuteaslinguagensparapropsitosespeciais,principalmente
"N.deT.Mainframe: computadordegrandeporte.
-
24 ASPECTOS PRELIMINARES
porcausadesuaestreitaaplicabilidadeedadificuldadedecompar-Iascomoutraslingua-gens.
1.3 Critriosde Avaliaoda linguagem
Conformeobservou-se,o propsitodestelivro
examinarcuidadosamenteos conceitosfundamentaisdasvriasconstruese
dascapacidadesdaslinguagensdeprogramao.Tambmavaliaremosessesrecursos,concentrando-nosemseuimpactosobreo
processodedesenvolvimento(inclusivemanuteno)desoftware.Paralevarmosissoa
efeito,precisa-remosdeumconjuntodecritriosdeavaliao.Porm,umalistadecritrios
necessaria-mentecontroversa,porque
virtualmenteimpossvelconseguiratmesmodoiscientistasdacomputaoqueconcordemcomo
valordedeterminadacaractersticadelinguagememrelaoa
outras.Apesardessasdiferenas,a
maioriadoscientistasdacomputaoconcor-dariaqueoscritriosdiscutidosnassubseesseguintessoimportantes.
Algumasdascaractersticasqueinfluenciamosmaisimportantescritriossomos-tradasnaTabela1.1;osmesmossodiscutidosnasseesseguintes.
1.3.1 Legibilidade
Umdoscritriosmaisimportantesparajulgarumalinguagemdeprogramaoa
facilida-decomqueosprogramaspodemserlidoseentendidos.Antesde1970,o
desenvolvimentodesoftwareeramuitoimaginadoemtermosdaescritadocdigo.Nadcadade70,entre-tanto,o
conceitodeciclodevidadosoftware(Booch,1987)foidesenvolvido;acodificaofoi
relegadaa umpapelmuitomenosimportante,e a manutenofoi
reconhecidacomoumaparteimportantedociclo,especialmenteemtermosdecusto.Umavezquea
facilida-
TABELA 1.1 Critriosde Avaliaoda Linguageme as Caractersticasque
os Afetam
Critrios
Caracterstica
Simplicidade/ortogonalidadeEstruturasde controle
Tipos de dados e estruturas
Projetoda sintaxe
Suporte paraabstrao
Expressividade
Verificaode tipos
Manipulaode excees
Aliasing' restrito
Legibilidade Capacidadede Escrita(Writability)
Confiabilidade
N. deT.Aliasing: determinaodeumnomealternativooudeumapelido.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 25
dede manuteno
determinada,emgrandeparte,pelalegibilidadedosprogramas,elatomou-seumamedidaimportantedaqualidadedosprogramase
daslinguagens.
A
legibilidadedeveserconsideradanocontextododomniodoproblema.Porexem-plo,seumprogramaquedescreveumacomputaotiversidoescritoemumalinguagemno-projetadaparaesseuso,o
programapodeserantinaturaleenrolado,tornando-oinco-mumentedifcildeserlido.
As subseesseguintesdescrevemcaractersticasquecontribuemparaa
legibilidadedeumalinguagemdeprogramao.
1.3.1.1 SimplicidadeGlobal
A
simplicidadeglobaldeumalinguagemdeprogramaoafetafortementesualegibilida-de.Antesdemaisnada,umalinguagemcomumgrandenmerodecomponentesbsicosmaisdifcildeseraprendidadoqueumacompoucosdessescomponentes.Osprogramado-resqueprecisamusarumalinguagemgrandetendema
aprenderumsubconjuntodelaeignorarseusoutrosrecursos.Essepadrodeaprendizagem,svezes,
usadoparadesviar-sedo grandenmerode componentesda linguagem,mastal
argumentono vlido.Ocorremproblemasde legibilidadesemprequeo autordo
programatenhaaprendidoumsubconjuntodiferentedaquelecomo qualo
leitorestfamiliarizado.
Umasegundacaractersticaquecomplicaumalinguagemdeprogramao a
multi-plicidadede recursos- maisde umamaneirade
realizarumaoperaoparticular.Porexemplo,emC,o
usuriopodeincrementarumavarivelinteirasimplesdequatromanei-rasdiferentes:
count = count + 1count += 1count++++count
Noobstanteasduasltimasinstruestenhamsignificadosligeiramentediferentesentreelasedetodasasoutrasemalgunscasos,todasasquatrotmo
mesmosignificadoquandousadascomoexpressesindependentes.Essasvariaesserodiscutidasno
Captulo6.
Umterceiroproblemapotencial a sobrecarga'(overloading)de
operador,naqualumnicosmbolotemmaisdeumsignificado.Emborasejaumrecursotil,
podelevaraumareduzidalegibilidadesefor
permitidoaosusurioscriarsuasprpriassobrecargasenoasconstituremcriteriosamente.Porexemplo,bemaceitvelsobrecarregar+eus-Iotantoparaadiode
nmerosinteiroscomoparaponto-flutuante.Alis, tal
sobrecargasimplificaumalinguagemaoreduziro
nmerodeoperadores.Porm,suponhamosqueoprogramadortenhadefinidoque+sejausadoentreoperandosdearrays
unidimensionaisparasignificarasomadetodososelementosdeambososarrays.Umavezqueo
significadodaadiodevetoresbastantediferentedesteltimo,issotornariao
programamaiscon-fusotantoparao
autorcomoparaseusleitores.Umexemploaindamaisextremodeconfu-sodoprogramaseriaumusuriodefinir+entredoisoperandosdevetorparasignificaradiferenaentreseusrespectivosprimeiroselementos.A
sobrecargadeoperadoresserdis-cutidaadicionalmentenoCaptulo6.
A
simplicidadenaslinguagens,evidentemente,podeserlevadamuitolonge.Porexem-plo,a
formae o
significadodamaioriadasinstruesdalinguagemassemblysomodelos
N. deT. Sobrecarga:traduoliteraldeoverloading que,emprogramao, a
possibilidadedeusaro mesmonomeparamaisdeumavarivelou
procedimento,exigindoqueo
compiladordiferencie,baseando-senocontexto.
-
26 ASPECTOS PRELIMINARES
desimplicidade,comovocpoderverquandoconsiderarasinstruesqueaparecemnaprximaseo.Essamesmasimplicidade,entretanto,tornaosprogramasemlinguagemassemblymenoslegveis.Umavezquelhesfaltaminstruesdecontrolemaiscomplexas,suasestruturassomenosevidentes;o
fatode suasinstruesseremsimplesexigeumnmerobemmaiordoqueo
necessrioparaprogramasequivalentesescritosemumalin-guagemde
altonvel.Essesmesmosargumentosaplicam-seao
casomenosextremodaslinguagensdealtonvelcomcontrolee
comconstruesdeestruturaodedadosinade-quados.
1.3.1.2 Ortogonalidade
Ortogonalidadeemumalinguagemdeprogramaosignificaqueumconjuntorelativamen-te
pequenode
construesprimitivaspodesercombinadoemumnmerorelativamentepequenode
maneirasparaconstruirasestruturasde controlee dedadosda
linguagem.Almdisso,todacombinaopossvelde primitivas legale
significativa.Por
exemplo,considereostiposdedados.Suponhamosqueumalinguagemtenhaquatrotiposdedadosprimitivos,integer,jloat,doubleecharacter,edoisoperadoresdetipo,array
epointer.Seosdoisoperadoresde tipopuderemseraplicadosa si mesmose
aosquatrotiposdedadosprimitivos,umgrandenmerodeestruturasdedadospoderserdefinido.Porm,senofor
permitidoaosponteiros(pointers)apontarparaarrays,
muitasdessaspossibilidadesseriameliminadas.
O significadodeumrecursodelinguagemortogonal
livredecontextodesuaapa-rnciaemumprograma(onomeortogonalvemdoconceitomatemticodevetoresortogo-nais,independentesumdo
outro).A ortogonalidadepartede umasimetriade
relaesentreprimitivas.Osponteirosdevemsercapazesdeapontarparaqualquertipodevarivelouestruturadedados.A
faltadeortogonalidadeacarretaexceessregrasdalinguagem.
Podemosilustraro
usodaortogonalidadecomoumconceitodeprojeto,comparandoumaspectodaslinguagensassemblydoscomputadoresdegrandeportedaIBM
coma srieV!\f..
desuperminicomputadores.Consideramosumanicasituaosimples:adicionarva-loresinteirosde32bitsqueresidemnamemriaounosregistrose
substituirumdosdoisvalorespelasoma.OscomputadoresdegrandeportedaIBM
tmduasinstruesparaessafinalidadesobasformas
A RegI, clula_de_memriaAR RegI, Reg2
emqueRegI e Reg2representamregistros.A semnticadelas:
RegI +-contedo(Regl)+ contedo(clula_de_memria)RegI
+-contedo(Reg1)+ contedo(Reg2)
A instruodeadioV!\f.. paravaloresinteirosde32bits
ADDL operando_1, operando_2
cujasemntica
operando_2 ~ contedo(operando_1) + contedo(operando_2)
Nessecaso,qualquerumdosoperandospodeserumregistroouumacluladememria.O
projetoda instruoV!\f..
ortogonalpelofatodeumanicaoperaopoderusar
registrosouclulasdememriacomooperandos.Soduasmaneirasdeespecificaroperan-dosquepodemsercombinadasdetodasasmaneiras.O
projetoIBM no
ortogonal.So-menteduascombinaesdeoperandossolegaisemquatropossibilidades,eambasexigem
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 27
diferentesinstrues,A e AR. O projeto IBM mais restritoe,
portanto, menosfcil de serescrito. Por exemplo,voc no pode
adicionar dois valores e armazenara soma em uma
localizaoda memria.Alm disso,ele maisdifcil de ser aprendidopor
causadas restri-ese da instruoadicional.
A ortogonalidadeestestreitamenterelacionada
simplicidade:quantomaisortogo-
nal o projeto de uma linguagem,menosexceesas regrasda
linguagemexigiro.Menosexceessignificamum grau maiselevadode
regularidadeno projeto,o que torna a lingua-
gem mais fcil de ser aprendida,lida e entendida.Qualquer um que
tenha aprendidoumaparte significativa da lngua inglesa pode atestar
a dificuldade de entender suas muitas
excees regra (por exemplo, i antesde e, excetodepois de c).Como
exemplosda falta de ortogonalidadeem uma linguagem de alto nvel,
mani-
festadacomo excees regra, consideremosas seguintesregras em C.
No obstantealinguagemC possuadois tipos de dados
estruturados,arrays e registros (structs), regis-tros
podemserretomadosde funes,masarraysno. Um membrode uma
estruturapode
ser qualquertipo de dado, excetovoidou uma estruturado
mesmotipo. Um elementodearray podeser qualquertipo de dado,
excetovoidou uma funo. Parmetrosso passa-dos por valor, a menosque
sejamarrays, em cujo caso so, com efeito, passadospor refe-
rncia (porqueo aparecimentodo nome de um array isoladamente,ou
seja, sem nenhumcolchete,emum programaem C interpretadocomo o
endereodo primeiro elementodoarray). Uma expressode
adiosimples,como
a+b
usualmentesignificaqueosvaloresde a eb sopegosda memriae
adicionados.Porm,seacontecerde a ser um ponteiro, o valor pegode b
pode ser modificado antesque a adiose desenvolva.Por exemplo,se a
apontarpara um valor que tenha dois bytesde extenso,o valor de b
sermultiplicadopor 2 antesquea adiodesenvolva-se.O tipo de a,que
ocontextoesquerdode
+b
foraro valor de b a sermodificado antesqueele seja adicionadoa
a.Muita ortogonalidadetambmpode causar problemas.Talvez a
linguagemde pro-
gramaomaisortogonalsejao ALGOL 68 (van WijngaardenetaI.,
1969).Toda construode linguagememALGOL 68 temum tipo, e no h
nenhumarestrioparaele.Alm disso,
a maioria das construesproduz valores.Essaliberdadede
combinaopermite constru-
esextremamentecomplexas.Por exemplo,uma condicional pode
aparecercomo o ladoesquerdode uma atribuio,juntamentecom declaraese
com outras vrias instrues,
contantoqueo resultadospjauma localizao.Essaformaextremade
ortogonalidadeacar-
reta uma complexidadedesnecessria.Alm disso, uma vez que as
linguagensexigemumgrandenmerode primitivas,um elevadograu de
ortogonalidaderesultarem uma explo-
so de combinaes.Sendo assim,mesmoque as
combinaessejamsimples,seuelevado
nmero leva complexidade.Portanto, simplicidadeem uma linguagem,
pelo menos em parte, o resultado de
uma combinaode um nmerorelativamentepequenode
construesprimitivase o uso
limitado do conceitode ortogonalidade.Alguns acreditamque as
linguagensfuncionais oferecemuma boa combinao de
simplicidadee de ortogonalidade.Uma linguagemfuncional, como por
exemplo o LISp,
uma linguagemem que as computaesso feitas
principalmenteaplicando funesa de-
terminadosparmetros.Em comparao,nas linguagensimperativascomo C,
Pascale Java,as computaesnormalmenteso especificadascom variveise
com instruesde atribui-
o.As linguagensfuncionaisoferecempotencialmentea maior
simplicidadeglobal porque
-
28 ASPECTOS PRELIMINARES
podemrealizartudocomumanicaconstruo,achamada funo(functioncal!),
aqualpodesercombinadacomoutraschamadasa funesde
maneirasimples.Essaelegnciasimplesa
razopelaqualalgunspesquisadoresdelinguagenssoatradosparaaslingua-gensfuncionaiscomoa
primeiraalternativaparaaslinguagensno-funcionaiscomplexascomoo C++
(Ellis e Stroustrup,1990).Outrosfatores,comoa
eficincia,porm,tmimpedidoqueaslinguagensfuncionaistornem-semaispopulares.
1.3.1.3 Instruesde Controle
A revoluodaprogramaoestruturadadadcadade70foi,emparte,umareao
mlegibilidadecausadapelaslimitadasinstruesdecontroledealgumasdaslinguagensdasdcadasde
SO e 60. Emparticular,reconheceu-seamplamentequeo
usoindiscriminadodasinstruesgota reduzcriticamentea
legibilidadedoprograma.
Umprogramaquepodeserlidodecimaa baixo
muitomaisfcildeentenderdoqueo
queexigeaoleitorpulardeumainstruoaoutrano-adjacenteparaseguiraordemdeexecuo.Emcertaslinguagens,entretanto,instruesgotaqueseramificamparacima,svezes,sonecessrias;porexemplo,elasconstroemlaosWHILE
emFORTRAN77.Restringirinstruesgotadasseguintesmaneiraspodetornarosprogramasmaislegveis:
Elasdevemprecederseusalvos,excetoquandousadasparaformarlaos.
Seusalvosnuncadevemestarmuitodistantes.
Seunmerodeveserlimitado.
Faltavam,sversesdoBASICedoFORTRANdisponveisno
inciodadcadade70,as instruesde controlequepermitemfortesrestriesao
usodegotas, de
modoqueescreverprogramasaltamentelegveisnessaslinguagenseradifcil.A
maioriadaslingua-gensdeprogramaoprojetadasdesdeo finalda dcadade
60,temincludoinstruessuficientes,deformaquea necessidadeda
instruogota foi
quaseeliminada.Portanto,oprojetodaestruturadecontroledeumalinguagemagora
umfatormenosimportantenalegibilidadedoquenopassado.
1.3.1.4 Tipos de Dadose Estruturas
A presenadefacilidadesadequadasparadefinirtiposdedadose
estruturasdedadosemumalinguagem outroauxliosignificativoparaa
legibilidade.Porexemplo,suponhamosqueumtiponumricosejausadoparaumsinalizadorporquenohnenhumtipobooleanona
linguagem.Nessalinguagem,poderamosterumaatribuiocomo
soma_e_muito_grande=l
cujosignificadono
claro,enquantoqueemumalinguagemcomtiposbooleanos,tera-mos
cujosignificadoperfeitamenteclaro.Similarmente,tiposdedadosregistro(record)cons-tituemummtodopararepresentarregistrosdeempregadosmaislegveldoqueumcon-juntodearrays
similares,umparacadaitemdedadosemumregistrodeempregado,o
N. deT. Lao:loop. Em programao,umarepetiodentrode
umprograma.Semprequeum processodeveser repetido,umlaocriado.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 29
mtodoexigidoemumalinguagemsemregistros.Por exemplo,no FORTRAN77,
umamatrizderegistrosdeempregadospoderiaserarmazenadanosseguintesarrays:
CHARACTER (LEN = 30) NOME (100)
INTEGER IDADE (100), NUMERO_EMPREGADO(100)REAL SALARIO (100)
Depois,umempregadoparticularrepresentadopeloselementosdessesquatroarrayscomo
mesmovalorde ndice.
1.3.1.5 Consideraes sobre a Sintaxe
A sintaxeou a
formadoselementosdeumalinguagemtmumefeitosignificativosobrealegibilidadedosprogramas.O
queapresentamosa
seguirsotrsexemplosdeopesdeprojetosintticoqueafetama
legibilidade:
Formasidentifieadoras.Restringiros identificadoresa
tamanhosmuitopequenosprejudicaa legibilidade.Seos
identificadorespuderemter
seiscaracteresnomximo,comonoFORTRAN77,muitasvezesno
possvelusarnomesconota-tivosparaasvariveis.Umexemplomaisextremo o
BASIC(ANSI,1978b)doAmericanNational StandardsInstitute
(ANSO,naqualumidentificadorpoderiaconsistirsomentedeumanicaletraoudeumanicaletraseguidadeumdgito.
Outrasquestesdeprojetoreferentesa
formasidentificadorasserodiscuti-dasnoCaptulo4.
Palavrasespeciais.A
aparnciadoprogramae,dessemodo,asualegibilidadesofortementeinfluenciadaspelasformasdaspalavrasespeciaisdeumalinguagem(porexemplo,begin,ende
for).Especialmenteimportante o
mtodoparaformarinstruescompostasougruposdeinstruoprincipalmenteemconstru-esdecontrole.Diversaslinguagensusamparescoincidentesdepalavrasoudesmbolosespeciaisparaformargrupos.O
Pascalexigeparesbegin-endparaformargruposemtodasasconstruesdecontrole,excetoa
instruorepeat,na qualelaspodemseromitidas(umexemploda faltade
ortogonalidadedoPascal).A linguagemC
usachavesparaamesmafinalidade.Ambasaslinguagenssofremporqueosgruposdeinstruososempreencerradosdamesmamaneira,o
quetornadifcildeterminarqualgrupoestsendofinalizadoquandoumendou
}aparece.O
FORTRAN90eaAdatornamissomaisclaro,usandoumasinta-xedefechamentodistintaparacadatipodegrupode
instruo.Porexemplo,aAdausaend if parafinalizarumaconstruode seleo,e
end loop
parafinalizarumaconstruodelao.Esseumexemplodoconflitoentrea
simplici-daderesultantedeumnmeromenordepalavrasreservadas,comonoPascal,ea
maiorlegibilidadequepoderesultardousodeumnmeromaiordepalavrasreservadas,comonaAda.
Outraquestoimportante
seaspalavrasespeciaisdeumalinguagempo-demserusadascomonomesparavariveisdeprograma.Sepuderem,osprogra-masresultantespodemsermuitoconfusos.Porexemplo,noFORTRAN90,palavrasespeciaiscomoDOe
ENDsonomesdevariveislegais,deformaqueo
apareci-mentodetaispalavrasemumprogramapodeconotarounoalgoespecial.
Formaesignificado.Projetarinstrues,a
fimdequesuaaparnciaindique,pelomenos,parcialmentesuafinalidade,umauxlioevidenteparaa
legibilidade.Asemntica,ouo
significado,deveseguirdiretamentedasintaxeoudaforma.Emalgunscasos,esseprincpiovioladoporduasconstruesdelinguagemidnti-
-
30 ASPECTOS PRELIMINARES
casousimilaresquanto
aparncia,mascomsignificadosdiferentes,dependen-do, talvez,do
contexto.EmC, porexemplo,o significadoda
palavrareservadastaticdependedocontextodeseuaparecimento.Seforusadanadefiniodeumavariveldentrodeumainstruo,significaquea
varivel criadano mo-mentodacompilao(compiletime).Sefor
usadanadefiniodeumavarivelforadetodasasfunes,significaqueestavisvelsomentenoarquivoemquesuadefinioaparece;ouseja,elano
exportadadessearquivo.
UmadasprincipaisreclamaesarespeitodoscomandosshelldoUNIX
(KernighanePike,1984)queaaparnciadelesnemsempresugeresuafuno.Porexemplo,o
coman-doUNIXgrep
podeserdecifradosomentepeloconhecimentoprvio,outalvezpelahabi-lidadeepelafamiliaridadecomoeditorUNIX,ed.SuaaparncianotemconotaoalgumaparaosiniciantesUNIX.(Noed,ocomando/expressoJegular/
procuraporumasubstringquecoincidacoma
expressoregular.Preced-Iocomgir
torn-Ioumcomandoglobal,especificandoqueo escopodaprocuratodoo
arquivoqueestsendoeditado.Colocarump
depoisdocomandoespecificarqueaslinhascomsubstringscoincidentessejamimpres-sas.Assim,g/expressoJegular/p,queevidentementepodeserabreviadoparagrep,
im-primetodasaslinhasdeumarquivoquecontenhamsubstringsquecoincidemcomaexpressoregular.
1.3.2 Capacidadede Escrita(Writability)
Capacidadedeescrita umamedidade
quofacilmenteumalinguagempodeserusadaparacriarprogramasparaumdomniodeproblemaescolhido.A
maioriadascaractersti-casda linguagemqueafetaa
legibilidadetambmafetaa capacidadede
escrita.Issoseseguediretamentedofatodequeescreverumprogramaexigeumareleiturafreqentedapartequej
foi escritapeloprogramador.
Comoacontececoma legibilidade,a
capacidadedeescritadeveserconsideradanocontextodo
domniodeproblema-alvodeumalinguagem.Simplesmente,no
razovelcompararacapacidadedeescritadeduaslinguagensnodomniodeumaaplicaoparticu-larquandoumafoiprojetadaparaessaaplicaoea
outrano.Porexemplo,acapacidadedeescritado caBaL (ANSI,1985)e a
daAPL (Gilmane
Rose,1976)sodrasticamentediferentesparacriarumprogramacapazdelidarcomestruturasdedadosbidimensionais,paraasquaisaAPL
ideal.Suascapacidadesdeescritatambmsodiferentesnaproduoderelatriosfinanceiroscomformatoscomplexos,paraosquaiso
caBaL foi projetado.
Assubseesseguintesdescrevemosfatoresmaisimportantesa
influenciara capaci-dadedeescritadeumalinguagem.
1.3.2.1 Simplicidadee Ortogonalidade
Seumalinguagemtiverumgrandenmerodediferentesconstrues,algunsprogramado-respodemnoestarfamiliarizadoscomtodaselas.Issopodelevaraoerroinadequadodealgunsrecursoseaodesusodeoutrosquepodemserou
maiselegantesou
maiseficientes(ouambos)doqueaquelesusados.Pode,atmesmo,serpossvel,comofoi
observadoporHoare(1973),usarrecursosdesconhecidosacidentalmente,comresultadosbizarros.Por-tanto,umnmeromenorde
construesprimitivase umconjuntoconsistentede
regrasparacombin-Ias(isto, ortogonalidade) muitomelhordo
que,simplesmente,ter
umnmerograndedeprimitivas.Umprogramadorpodeprojetarumasoluoparaumproble-macomplexodepoisdeaprendersomenteumconjuntosimplesdeconstruesprimitivas.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 31
Poroutrolado,demasiadaortogonalidadepoderesultaremprejuzoparaa
capaci-dadedeescrita.Errosaoescreverprogramaspodemnoserdetectados,umavezquequasetodasascombinaesdeprimitivassolegais.Issopodelevaraabsurdosnocdigoquenopodemserdescobertospelocompilador.
1.3.2.2 Suporte paraAbstrao
Colocandobrevemente,abstraosignificaa capacidadede definire,
depois,de
usarestruturasouoperaescomplicadasdeumamaneiraquepermitaignorarmuitosdosdeta-lhes.A
abstrao umconceitofundamentalno projetode linguagensde
programaocontemporneas.Isso umreflexodo papelcentralquea
abstraodesempenhanasmo-dernasmetodologiasde projetodeprogramas.O
graude abstraopermitidopor umalinguagemdeprogramaoe a
naturalidadedesuaexpressoso,porconseguinte,muitoimportantesparasuacapacidadede
escrita(writability). As linguagensde
programaopodemsuportarduascategoriasdistintasdeabstrao:processoe
dados.
Um exemplosimplesde abstraodo processo o usode um
subprogramaparaimplementarumalgoritmodeclassificaoexigidodiversasvezesemumprograma.Semesteltimo,o
cdigodeclassificaoteriadeserreplicadoemtodosos
lugaresemquefossenecessrio;issotornariao
programamuitomaislongoemaistediosodeserescrito.Omaisimportante,seo
subprogramanofosseusado,queo cdigoqueusouo
subprogra-madeclassificaoseriaatravancadocomdetalhesdoalgoritmodeclassificao,obscure-cendograndementeo
fluxoe o intentoglobaldessecdigo.
Comoumexemplodeabstraodedados,considereumarvorebinriaquearmaze-nadadosinteirosemseusvrticese
queserianormalmenteimplementadaemFORTRAN77comotrsarrays
inteirosparalelos,emquedoisdosinteiros(integers)sousadoscomosubscritos'paraespecificarosvrticesdescendentes.EmC++
eemJava,essestrspodemserimplementadosusando-seumaabstraode
umvrticeda rvorena formade umaclassesimplescomdoisponteirose
umnmerointeiro.A
naturalidadedestaltimarepre-sentaotornamuitomaisfcilde
escreverumprogramacomrvoresbinriasemtaislinguagensdo
queescreverumemFORTRAN77. umasimplesquestodo
domniodesoluodeproblemasda
linguagemestarmaisprximadodomniodoproblema.
O
suporteglobalparaabstrao,evidentemente,umfatorimportantenacapacida-dedeescritadeumalinguagem.
1.3.2.3 Expressividade
Expressividade,emumalinguagem,podereferir-sea
diversascaractersticasdiferentes.NalinguagemAPL,porexemplo,significaquehoperadoresmuitopoderosospermitindoqueumagrandequantidadedecomputaosejarealizadacomumprogramamuitopequeno.Maiscomumente,significaqueumalinguagemtemformasrelativamenteconvenientes,emvezdedesajeitadas,deespecificarcomputaes.Porexemplo,emC,a
notaocount++maisconvenienteemaisbrevedoquecount = count + 1.Tambm,o
operadorboole-anoandthenemAda
umamaneiraconvenientedeespecificarumaavaliaoemcurto-circuitodeumaexpressobooleana.A
inclusodainstruofor emPascaltornamaisfcila
escritadelaosdecontagemdoquecomo usodewhile,
tambmpossvel.Todoselesaumentama
capacidadedeescritadeumalinguagem.
"N.deT. Subscrito:subscript. um
mtodoparareferendardadosemumatabela.Porexemplo,na tabelaTabpreco,a
instruoparareferendarumpreoespecficopodesertabpreco(item),ondeItemvariveldesubscrito.
-
32 ASPECTOS PRELIMINARES
1.3.3 Confiabilidade
Diz-se que um programa confivelse ele se comportarde acordo com
suas especifica-essob todasas condies.As
subseesseguintesdescrevemdiversosrecursosde lingua-
gemque exercemum efeitosignificativosobrea confiabilidadede
programas.
1.3.3.1 VerificaodeTipos
Verificartipos , simplesmente,testarse existemerros de tipo em
determinadoprogra-ma, ou por meio do compiladorou durantea execuodo
programa.A verificaode tipos um fator importantena confiabilidadeda
linguagem.Uma vez que a verificaode tipos
em tempode execuo(run-time) dispendiosa,a verificaoem tempode
compilao
mais desejvel.Alm disso, quanto mais cedo forem detectadoserros
em um programa,menosdispendiososerpara fazer os reparosnecessrios.O
projeto da Ada exigeverifica-
es dos tipos de quase todas as variveise expressesem tempo de
compilao,excetoquandoo usurio declaraexplicitamentequea verificaode
tipos deveser suspensa.Isso
virtualmenteelimina os errosde tipo durantea execuode
programasescritosemAda. Os
tipos e a verificaodestesserodescritoscom profundidadenos
Captulos4 e 5.Um exemplode comoa falta de verificaode
tipos,emtempode compilaoou em
tempode execuo,levama incontveiserrosde programa o uso de
parmetrosde sub-programana linguagemC original (Kernighane Ritchie,
1978). Nessalinguagem,o tipo deum parmetroreal emuma chamadaa
funono verificadopara determinarse seu tipocoincide com o do
parmetroformal correspondentena funo.Uma varivel do tipo intpode
ser usada como um parmetroreal em uma chamadaa uma funo que
esperaum
tipo float como seuparmetroformal, e nem o compilador,nem o
sistemaem tempodeexecuodetectaroa incoerncia. Isso acarreta
problemas,cuja fonte, muitas vezes, difcil de determinar-se(em
respostaa essee a outros problemassemelhantes,os sistemas
UNIX incluemum programautilitrio chamadolint queverificase
existemproblemasemprogramasC). Os subprogramase a passagemde
parmetrosserodiscutidos no Captulo8.
Em Pascal,a faixa de subscritode uma varivelarray faz parte do
tipo da varivel.
Portanto,a verificaoda faixade subscritofaz parteda verificaode
tipos, no obstante
ela deva ser feita em tempo de execuo(run-time). Uma vez que a
maioria dos tipos verificada no Pascal,as faixasde subscritotambmso
testadas.Isso extremamenteim-
portantepara a confiabilidadedo programa,porque os
subscritosfora da faixa freqente-mente causam erros que no
aparecemat muito tempo depois de acontecer violaes
reais.As linguagensAda e Java tambmexigemque todos os
subscritossejamverificadosquanto faixa.
1.3.3.2 Manipulaode Excees
A capacidadede um programa de interceptarerros em tempo de
execuo (bem como
outras condiesincomunsdetectadaspelo programa),pr em prtica
medidascorretivase, depois,prosseguir um grandeauxlio para a
confiabilidade.Tal facilidadeda linguagem
chamadade manipulaodeexcees'.Ada, C++ e Java incluem
grandescapacida-des de manipular excees,mas
essasfacilidadespraticamenteno existemem muitaslin-
"N.deT.Manipulaodeexcees:tambmchamadadetratamentodeexcees.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 33
guagensmaispopulares,comooCeo FORTRAN.A
manipulaodeexceesserdiscutidanoCaptulo13.
1.3.3.3 Aliasing
Definidolivremente,aliasing terdoisoumaismtodos,ou
nomes,distintosparafazerreferncia mesmacluladamemria.Agora
amplamenteaceitoqueo aliasing
sejaumrecursoperigosoemumalinguagemdeprogramao.A
maioriadaslinguagensdeprogra-maopermitealgumtipodealiasing-
porexemplo,membrosdeunioe
ponteirosdefi-nidosparaapontarparaamesmavarivelemC.Emambososcasos,duasdiferentesvariveisdeprogramapodemreferir-semesmacluladamemria.Algunstiposdealiasing,descri-tosnosCaptulos4
e 8, podemserproibidospeloprojetodeumalinguagem.
Emalgumaslinguagens,o aliasing
usadoparasuperardeficinciasnasfacilidadesdeabstraodedados.Outraslinguagenso
restringemmuitoparaaumentaremsuaconfia-bilidade.
1.3.3.4 Legibilidade e Capacidade de Escrita
Tantoa
legibilidadecomoacapacidadedeescritainfluenciamaconfiabilidade.Umprogra-maescritoemumalinguagemquenosuportamaneirasnaturaisdeexpressarosalgorit-mosexigidosusar,necessariamente,mtodosno-naturais.Estesltimostmmenosprobabilidadedeestaremcorretosparatodasassituaespossveis.Quantomaisfcilescreverumprograma,maisprobabilidadeeletemdesercorreto.
A
legibilidadeafetaaconfiabilidadetantonasfasesdeescritacomonasdemanuten-onociclodevida.Programasdedifcilleituracomplicamtambmsuaescritae
suamo-dificao.
1.3.4 Custo
O
custofinaldeumalinguagemdeprogramaoumafunodemuitasdesuascaracters-ticas.
Primeiro,hocustodotreinamentodeprogramadoresparausara
linguagem.Essaumafunoda simplicidadee daortogonalidadeda linguageme
daexperinciadospro-gramadores.Emboralinguagensmaispoderosasnosejam,necessariamente,maisdifceisdeaprender,elasfreqentementeo
so.
Emsegundolugar,h o custoparaescreverprogramasna linguagem.Essa
umafunoda capacidadedeescrita,a qualdependede suaintensidadede
propsitocomaaplicaoparticular.Osesforosoriginaisparaprojetare
implementarlinguagensde
altonvelforammotivadospelodesejodediminuiroscustosparacriarsoftware.
Tantoo
custoparatreinarprogramadorescomoparaescreverprogramasemumalinguagempodemsersignificativamentereduzidosemumbomambientedeprogramao.OsambientesdeprogramaoserodiscutidosnaSeo1.7.
Emterceirolugar,h o custoparacompilarprogramasna linguagem.Um
grandeempecilhoparaosprimeirosusosdaAdaerao
custoproibitivamenteelevadopararodaroscompiladoresAdadeprimeiragerao.Esseproblemafoi
diminudopelosurgimentodecompiladoresmelhores.
Emquartolugar,o custoparaexecutarprogramas
grandementeinfluenciadopeloprojetodalinguagem.Seelaexigirmuitasverificaesdetiposdurantea
execuo,proibi-r a execuorpidadecdigo,independentementeda
qualidadedo compilador.Ainda
-
34 ASPECTOS PRELIMINARES
quea
eficinciadeexecuofosseaprincipalpreocupaonoprojetodasprimeiraslingua-gens,considera-seissomenosimportanteagora.
Podeserfeitoumtrade-off
simplesentrecustodecompilaoevelocidadedeexecu-odo
cdigocompilado.Otimizao o nomedadoparaa coleode
mtodosqueoscompiladorespodemusarparadiminuiro
tamanhoe/ouaumentaravelocidadedeexecu-odocdigoproduzido.Seocorrerpoucaounenhumaotimizao,acompilaopodeserfeitamuitomaisrapidamentedoquesehouverumesforosignificativoparaproduzircdi-go
otimizado.O esforode compilaoextraresultaemumaexecuode
cdigomaisrpida.A escolhaentreasduasalternativas
determinadapeloambientenoqualo
compi-ladorserusado.Emumlaboratrioparaestudantesdeprogramaoiniciantesqueusamumbocadodetempodecompilao,maspoucodeexecuodecdigo(seusprogramassopequenose
elesdevemexecutarcorretamentesomenteumavez),poucaou
nenhumaotimizaodeveserfeita.Emumambientedeprogramao,emqueprogramascompletossoexecutadosmuitasvezes,
melhorpagaro custoextraparaotimizaro cdigo.
O quintofatoro
custodosistemadeimplementaodalinguagem.Umdosfatoresqueexplicama
rpidaaceitaodeJavaquesistemascompiladores/interpretadoresesta-vam
disposioparaelalogodepoisqueseuprojetofoi
lanadopelaprimeiravez.Umalinguagemdeprogramaocujosistemadeimplementaosejacaro,ourodesomenteemhardwarecaro,termuitomenoschancedetornar-sepopular.
O sextofator o custoda mconfiabilidade.Seo
softwarefalharemumsistema
crtico,comoumausinadeenergianuclearouumamquinaderaiosX, o
custopoderiasermuitoelevado.As
falhasdesistemasno-crticostambmpodemsermuitocarasemter-mosdefuturocomercialoudeaesjudiciaisemfunodesistemasdesoftwaredefeituo-sos.
A consideraofinal o
custodemanutenodosprogramas,queincluitantocorre-escomomodificaesparaadicionarnovascapacidades.O
custodamanutenodesof-twaredependede umasriede caractersticasda
linguagem,masprincipalmentedalegibilidade.Umavezquea
manutenofreqentemente feitapor
pessoasquenooautororiginaldosoftware,umalegibilidaderuimpodetornaratarefaextremamentedesa-fiadora.
A importnciada
manutenodesoftwarenopodeserexagerada.Estima-seque,paragrandessistemasdesoftwarecomtemposdevidarelativamentelongos,oscustosdemanutenopodematingirdeduasa
quatrovezesoscustosdedesenvolvimento(Sommer-ville,1992).
De todosos fatoresquecontribuemparaos custosda
linguagem,trssoosmaisimportantes:desenvolvimentodo
programa,manutenoe
confiabilidade.Umavezqueessessofunesdacapacidadede escritae da
legibilidade,os
doisltimoscritriosdeavaliaoso,porsuavez,osmaisimportantes.
Obviamente,umgrandenmerodecritriosestdisponvelparaavaliarlinguagensdeprogramao.Um,porexemplo,a
portabilidadeouafacilidadecomqueosprogramaspodemsermudadosdeumaimplementaoparaoutra.A
portabilidade
maisfortementeinfluenciadapelograudepadronizaodalinguagem.Algumaslinguagens,comoo
BASIC,nosopadronizadas,tornandoos programasmuitodifceisde
seremmudadosdeumaimplementaoparaoutra.A padronizao
umprocessodifcilqueconsometempo.Umacomissocomeoua
trabalharparaproduzirumaversopadrodo C++ em1989.Atoinciode
1998,essepadroaindanohaviasidoconcludo.
Generalidade(a aplicabilidadea umaamplafaixade utilizaes)e
boadefinio(definedness) (a perfeioe a precisodo
documentooficialquedefinea linguagem)sodoisoutroscritrios.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 35
A maioriadoscritrios,especialmentea legibilidade,a capacidadede
escritae aconfiabilidadeno
nemprecisamentedefinida,nemexatamentemensurvel.Elessoconceitosteis,entretanto,e
fornecemvaliosasavaliaessobreo projetoe sobreas
lin-guagensdeprogramao.
Umanotafinalsobreoscritriosdeavaliao:oscritriosdeprojetoda
linguagemsopesadosdiferentementea partirdeperspectivasdiversas.Os
implementadoresda lin-guagemestopreocupadosprimeiramentecoma
dificuldadede
implementarasconstru-eseosrecursosdaquela.Osusuriosdalinguagemestopreocupadosemprimeirolugarcoma
capacidadede escritae depoiscoma legibilidade.Os
projetistasprovavelmenteenfatizaroa elegnciaea
capacidadedeatrairumusogeneralizado.Essascaractersticas,svezes,entramemconflito.
1.4 Influncias sobre o Projeto da Linguagem
AlmdaquelesfatoresdescritosnaSeo1.3,vriosoutrosinfluenciamnoprojetobsicodaslinguagensdeprogramao.Osmaisimportantessoaarquiteturadocomputadoreasmetodologiasdeprojetodoprograma.
1.4.1 Arquitetura do Computador
A arquiteturabsicadoscomputadoresexerceuumefeitocrucialsobreo
projetodaslin-guagens.A maioriadasmaispopularesdosltimos35 anosfoi
projetadaemfunodaarquiteturadecomputadorprevalecente,chamadadearquiteturavonNeumann,emhome-nagema
umde seuscriadores,John
vonNeumann(pronuncia-se"fonNiman").Essaslinguagenssochamadasde
imperativas.EmumcomputadordevonNeumann,tantoosdadoscomoosprogramassoarmazenadosnamesmamemria.A
unidadecentraldepro-cessamento(CPU),queexecutarealmenteasinstrues,
separadadamemria.Portanto,asinstrueseosdadosdevemsercanalizados(piped)outransmitidosdamemriaparaaCPU.OsresultadosdasoperaesnaCPUdevemsernovamentetransferidosparaa
mem-ria.Quasetodososcomputadoresdigitaisconstruidosdesdeadcadade40tmsebaseadona
arquiteturavonNeumann.A estruturaglobalde umcomputadorde
vonNeumannmostradanaFigura1.1(verp. 36).
PorcausadaarquiteturavonNeumann,osrecursoscentraisdaslinguagensimpera-tivassoasvariveis,asquaismodelamasclulasdememria,asinstruesdeatribuio,baseadasnaoperaodecanalizao(piping)
e a formaiterativaderepetio,o
mtodomaiseficientedessaarquitetura.Osoperandosdasexpressessocanalizadosdamemriaparaa
CPU,e o resultadoda avaliaodaquela canalizadodevoltaparaa
cluladamemriarepresentadapeloladoesquerdodaatribuio.A iterao
rpidanoscomputa-doresde
vonNeumannporqueasinstruessoarmazenadasemclulasadjacentesdamemria.Essaeficinciadesencorajao
usodarecursopararepetio,noobstantefre-qentementesermaisnatural.
Conformefoideclaradoanteriormente,umalinguagemfuncionalouaplicativaaquelacujoprincipalmeiodefazercomputaes
aplicandofunesa determinadosparmetros.A
programaopodeserfeitaemumalinguagemfuncionalsemo
tipodevariveisusadasnasimperativas,seminstruesdeatribuioe
semiterao.Aindaquemuitoscientistas
-
36 ASPECTOS PRELIMINARES
Memria (armazena tanto instr
Resultadosdas
Instruese dadosoperaes
Unidade lgica
I--Unidadee aritmtica de controle
ues como dados)
Dispositivosde entrada e sada
Unidade central de processamento
FIGURA 1.1 A arquiteturado computadorde von Neumann.
dacomputaotenhamfeitoexposiessobreosinmerosbenefciosdaslinguagensfunci-onais,comoo
LISp,
improvvelqueelesdeixemdeladoasimperativasatqueumcompu-tadorno-vonNeumannsejaprojetado,permitindoa
execuoeficientedeprogramasemlinguagensfuncionais.Entreaquelesquelastimamtalfato,o
maiseloqentetemsidoJohnBackus,o projetista-chefedaversooriginaldo
FORTRAN(Backus,1978).
As
mquinasdearquiteturaparalelaquesurgiramnosltimos15anosapresentamalgumapromessadeagilizara
velocidadedeexecuodeprogramasfuncionais,mas,atagora,issonotemsidosuficienteparatorn-Iascompetitivascomprogramasimperativos.Alis,aindaqueexistammaneiraselegantesdeusararquiteturasparalelasparaexecutarprogramasfuncionais,a
maioriadessas usadaparaprogramasimperativos,especialmen-te
osescritosemdialetosdoFORTRAN.
1.4.2 Metodologias de Programao
o finalda dcadade 60 e o incioda dcadade 70
trouxeramumaanliseintensa,emgrandeparteiniciadapelomovimentodeprogramaoestruturada,tantodoprocessodedesenvolvimentodesoftwarecomodoprojetodelinguagensdeprogramao.
Umarazoimportanteparaessapesquisafoi a mudanano
importantecustodecomputaodohardwareparao
software,umavezqueoscustosdaquelediminurameoscustosdosprogramadoreselevaram-se.Os
aumentosde produtividadedo
programadorforamrelativamentepequenos.Almdisso,problemasprogressivamentemaiorese
maiscomplexospassarama serresolvidospor computador.Emvezde
simplesmenteresolver
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 37
conjuntosdeequaesparasimularrastreamentodesatlites,comono
inciodadcadade60,passaramaserfeitosprogramasparatarefasgrandese
complexas,como,porexemplo,controlargrandesinstalaesde
refinariadepetrleoe oferecersistemasde
reservasdepassagensareasnomundointeiro.
As novasmetodologiasdedesenvolvimentode
softwaresurgiramemconseqnciadaspesquisasdadcadade70eforamchamadasdeprojetotop-downe
refinamentopassoapasso.Asprincipaisdeficinciasdescobertasnaslinguagensdeprogramaoforamano-plenitudedeverificaodetipose
a
insuficinciadasinstruesdecontrole(queexigiamousoexcessivodegotas).
No
finaldcadade70,iniciou-seumamudanadasmetodologiasdeprojetodepro-gramasorientadasparao
processoparaasorientadasadados.Colocandodemaneirasim-ples,osmtodosorientadosa
dadosenfatizamo
projetodedados,concentrando-senousodetiposdedadosabstratospararesolverproblemas.
Paraquea
abstraodedadossejausadaeficientementenoprojetodesistemasdesoftware,eladevesersuportadapelaslinguagensvoltadasparaimplementao.A
primeiraa oferecerumlimitadosuporteparaabstraodedadosfoia SIMULA67
(BirtwistleetaI.,1973),noobstanteelacertamentenotersidolevada
popularidadeporcausadisso.Osbenefciosdaabstraodedadosnoforamamplamentereconhecidosato
inciodadca-dade70.Porm,amaioriadaslinguagensprojetadasdesdeo
finaldaqueladcadasuportaabstraodedadosqueserdiscutidadetalhadamentenoCaptulo10.
Os passosmaisrecentesna evoluodo desenvolvimentode
softwareorientadoadados,queseiniciouemmeadosdadcadade80, o
projetoorientadoa objeto.A meto-dologiaorientadaa
objetoinicia-secomaabstraodedados,aqualencapsulao
processa-mentocomobjetosde dadose ocultao acessoa eles,e
adicionaheranae vinculaodinmicadetipos.Herana
umconceitopoderosoqueaumentamuitoa
reutilizaopo-tencialdossoftwaresexistentes,oferecendo,portanto,a
possibilidadedesignificativosau-mentosnaprodutividadededesenvolvimentodesoftware.Esse
umfatorimportantenoaumentodepopularidadedaslinguagensorientadasa
objeto.A
vinculaodinmica(semtempodeexecuo)detipospermiteumusomaisflexveldaherana.
A programaoorientadaa
objetodesenvolveu-sejuntamentecomumalinguagemquesuportouseusconceitos:a
Smalltalk(Goldberge Robson,1983).Emboraa
Smalltalknotenhasidotousadacomoalgumasoutraslinguagens,o
suporteparaprogramaoorientadaa
objeto,agora,fazpartedaslinguagensdeprogramaomaispopulares,inclu-sivea
Ada95 (AARM,1995),o Java e o C++.Osconceitosorientadosa
objetotambmchegaram programaofuncionalemCLOS(BobrowetaI., 1988)e
programaolgicaemProlog++. O suporte
linguagemparaprogramaoorientadaa objetoserdiscutidodetalhadamenteno
Captulo11.
A programaoorientadaaoprocesso,emcertosentido,o
opostodaprogramaoorientadaadados.Noobstanteosmtodosorientadosadadosagoradominaremo
desen-volvimentode software,os mtodosorientadosao
processonoforamabandonados.Aocontrrio,temocorridomuitapesquisaemprogramaoorientadaa
objetonosltimosanos,especialmentenareadaconcorrncia.Essesesforosdepesquisatrouxeramconsigoa
necessidadedefacilidadesde linguagemparacriare
paracontrolarunidadesdeprogra-maconcorrentes.A Adae o Java
incluemessascapacidades.Dessemodo,a
evoluodaprogramaoexigenovamentenovascapacidadesdelinguagem.A
concorrnciaserdiscu-tidadetalhadamentenoCaptulo12.
-
38 ASPECTOS PRELIMINARES
1.5 Categorias de Linguagem
As
linguagensdeprogramao,muitasvezes,socategorizadasemquatrocaixas:impera-tivas,funcionais,lgicase
orientadasa objeto.J
discutimosascaractersticasdaslingua-gensimperativase
funcionais.Tambmdescrevemoscomoaslinguagensdeprogramaoorientadasa
objetomaispopularesdesenvolveram-sea
partirdasimperativas.Noobstan-te o
paradigmadedesenvolvimentodesoftwarediferirbastantedo
paradigmaorientadoparaprocedimentosnormalmenteusadocomas
linguagensimperativas,asextensesaumalinguagemimperativanecessriasparasuportaraprogramaoorientadaa
objetonosoopressivas.Porexemplo,asexpresses,asinstruesdeatribuioe
as instruesdecontroledoC
edoJavasoquaseidnticas;poroutrolado,osarrays,ossubprogramase
asemnticada linguagemJavasomuitodiferentesemC.
Umalinguagemdeprogramaolgica
umexemplobaseadoemregras.Emumalinguagemimperativa,umalgoritmo
especificadocomgrandesdetalhes,e a
ordemdeexecuoespecficadasinstruesoudoscomandosdeveserincluda.Emumalinguagembaseadaemregras,estassoespecificadassemnenhumaordemparticular,e
o sistemadeimplementaodeveescolherumaordemdeexecuoqueproduzao
resultadodesejado.Essaabordagemaodesenvolvimentodesoftwareradicalmentediferentedaquelasusadascomos
outrostrstiposde linguagens,e, evidentemente,exigeumtipo de
linguagemcompletamentediferente.O Prolog,a
maispopularlinguagemdeprogramaolgicausa-da,e a
programaolgicaserodiscutidasnoCaptulo15.
As
linguagensdemarcao'(markup),comoaHTML,svezes,soconfundidascomasdeprogramao.Porm,as
linguagensde marcaonoespecificamcomputaes;aocontrrio,elasdescrevema
aparnciageraldedocumentos.Porm,muitosdoscritriosdeprojetoedeavaliaodescritosnestecaptulotambmseaplicamslinguagensdemarca-o.Afinaldecontas,
evidentementeimportantequeo cdigodemarcaosejafcildeescrevere
deler.
1.6 Trade-Offs no Projeto da Linguagem
OscritriosdeavaliaodaslinguagensdeprogramaodescritosnaSeo1.3fornecemumaestruturaparao
projeto.Infelizmente,essaestrutura contraditria.Em
seudocu-mentosobreprojetodelinguagens,Hoare(1973)afirmaque"existemtantoscritriosim-portantes,masconflitantes,quea
reconciliaoe a satisfaodosmesmos umagrandetarefadeengenharia".
Doiscritriosconflitantessoa confiabilidadeeo
custodeexecuo.Porexemplo,adefinioda
linguagemAdaexigequetodasasrefernciasaoselementosdo array
sejamverificadosparaassegurarqueo ndiceou os
ndicesestejamemsuasfaixaslegais.Issoaumentao custode
execuodeprogramasAdaquecontenhamumgrandenmeroderefernciasaoselementosdoarray.
O C noexigeverificaodafaixade
ndice,demodoqueosprogramasemCexecutammaisrapidamentedoqueprogramasemAdasemantica-menteequivalentes,noobstanteosprogramasemAdasejammaisconfiveis.Osprojetis-tasdaAdatrocarama
eficinciadeexecuopelaconfiabilidade.
'N.
deT.Marcao:markup.Umpadroparaadefiniodevnculosdehipenextoentredocumentos.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 39
Comooutroexemplodecritriosconflitantesquelevamdiretamentea
trade-offsnoprojeto,consideremoso
casodaAPL.Estaincluiumpoderosoconjuntodeoperadoresparaoperaescomarray.Porcausadograndenmerodeoperadores,umnmerosignificativode
novossmbolostevede serincludonaAPL
pararepresent-Ios.Almdisso,muitosoperadoresAPLpodemserusadosemumanicaexpressolongae
complexa.Umresulta-dodesseelevadograudeexpressividade
que,paraaplicaesqueenvolvemmuitasope-raescomarray, a APL muitofcil
de serescrita(writable). De
fato,umaenormequantidadedecomputaopodeserespecificadaemumprogramamuitocompacto.Outroresultado
queos programasemAPL
tmumalegibilidademuitoruim.Umaexpressocompactae
concisatemcertabelezamatemtica,mas
difcilparaqualqueroutrapessoaentender,a noserparaquema escreveu.O
conhecidoautorDanielMcCrackenobservoucertavezquedemoravaquatrohorasparalerumprogramaAPLdequatrolinhas(McCracken,1970).OsprojetistasdaAPLtrocaramalegibilidadeporcapacidadedeescrita(writability).
O conflitoentreflexibilidadee segurana
comumnoprojetodeumalinguagem.OsregistrosvariantesemPascal(variantrecords)permitemqueumacluladememriaconte-nhadiferentesvaloresde
tipo emdiferentesmomentos.Por
exemplo,umaclulapodeconterouumponteiro,ouumnmerointeiro.Ento,pode-sefazerumaoperaosobreumvalordeponteirocolocadonessetipodeclulacomoseelefosseumnmerointeiro,usan-do-sequalqueroperaodefinidaparavaloresinteiros.Issoforneceumasadanaverifica-odetiposdalinguagemPascal,quepermitequeumprogramafaaoperaesaritmticasnosponteiros,o
que,svezes,conveniente.Porm,esseusono-verificadodasclulasdememria,emgeral,umaprticaperigosa.
Abundamexemplosde conflitosentreos critriosde projeto(e de
avaliao)delinguagens;algunssosutis,outrossobvios.Portanto,
evidentequea tarefadeesco-lherconstruese
recursosaoprojetarumalinguagemdeprogramaoenvolveumacole-odemeios-termose
detrade-offs.
1.7 Mtodos de Implementao
Comofoi
descritonaSeo1.4.1,doisdosprincipaiscomponentesdeumcomputadorsosuamemriainternaeseuprocessador.A
memriainternausadaparaarmazenarprogra-mase dados.O processador
umconjuntodecircuitosquegarantea realizaode
umconjuntodeoperaesprimitivas,oudeinstruesdemquina,comoaquelasparaopera-esaritmticase
lgicas.Na
maioriadoscomputadores,algumasdessasinstrues,que,svezes,sochamadasdemacroinstrues,sodefatoimplementadascomumconjuntodeinstruesdenvelaindamaisbaixo,chamadasmicroinstrues.Umavezqueasmicro-instruesnuncasovistaspelosoftwareoupelosprogramadores,usualmenteelasnosoincludasemqualquerdiscussosobresoftwares.Portanto,elasnoserodiscutidasadici-onalmenteaqui.
A linguagemdemquinadocomputador seuconjuntodemacroinstrues.Na
au-snciadeoutrosoftwarede suporte,suaprprialinguagemde mquina a
nicaqueamaioriadoscomputadores"entendem".Teoricamente,umcomputadorpodeserprojetadoeconstrudocomumalinguagemdealtonvelparticularcomosualinguagemdemquina,masseriamuitocomplexoe
caro.Almdisso,eleseriaaltamenteinflexvel,porqueseriadifcil
(aindaquenoimpossvel)deusarcomoutraslinguagensdealtonvel.A
opodeprojetodemquinamaisprticaimplementaemhardwareumalinguagemdenvelmuito
-
40 ASPECTOS PRELIMINARES
baixoqueofereceasoperaesprimitivasmaiscomumentenecessriaseexigequeosoftwaredesistemacrieumainterfacecomosprogramasdenvelmaiselevado.
Umsistemadeimplementaode linguagemnopodesero
nicosoftwareemumcomputador.Tambm necessrioum grandeconjuntode
programas,chamadosistemaoperacional,o
qualforneceprimitivasdenvelmaisaltodoqueasdalinguagemdemqui-na.Essasprimitivasoferecemgerenciamentoderecursosdosistema,operaesdeentradae
sada,um sistemade gerenciamentode arquivos,editoresde textoe/ou
programas,eumavariedadede
outrasfunescomumentenecessrias.Umavezqueos sistemasdeimplementaode
linguagemprecisamdemuitasdasfacilidadesdo
sistemaoperacional,elescomunicam-secomo
sistemaoperacionalemvezdediretamentecomo
processador(nalinguagemdemquina).
O sistemaoperacionaleasimplementaessodispostosemcamadassobrea
inter-faceda
linguagemdemquinadeumcomputador.Essascamadaspodemserimaginadascomocomputadoresvirtuais,queofereceminterfacesparao
usurioemnveismaisaltos.Porexemplo,umsistemaoperacionaleumcompiladorCconstituemumcomputadorvirtu-al
C.Comoutroscompiladores,umamquinapodetransformar-seemoutrostiposdecom-putadoresvirtuais.A
maioriadoscomputadoresfornecediversasmquinasvirtuaisdiferentes.Osprogramasdeusurioformamoutracamadanotopodacamadadasmquinasvirtuais.
A visualizaoemcamadasdeumcomputadormostradanaFigura1.2(verp.
41).Ossistemasdeimplementaodasprimeiraslinguagensdeprogramaodealton-
vel,construdosnofinaldadcadade50,estavamentreossistemasmaiscomplexosdaque-la
poca.Nadcadade60,esforosdepesquisaintensivosforamfeitosparacompreendere
paraformalizaro processodeconstruodessasimplementaesde linguagemde
altonvel.O
maiorsucessodessesesforosocorreunareadeanlisesinttica,principalmenteporqueessapartedo
processode implementao umaaplicaodepartesdateoriadosautmatose
dateoriadalinguagemformalqueeram,ento,bem-entendidas.
1.7.1 Compilao
Linguagensdeprogramaopodemserimplementadaspormeiodequalquerumdostrsmtodosgerais.Emumextremo,programaspodemsertraduzidosparalinguagemdem-quina,a
qualpodeserexecutadadiretamenteno computador.Isso chamadode
imple-mentaocompilada.Essemtodotemavantagemdeumaexecuodeprogramamuitorpida,assimqueo
processodetraduoforconcludo.A
maioriadasimplementaesdelinguagensdeproduocomoC,COBOLe
Adad-sepormeiodecompiladores.
A linguagemqueumcompiladortraduz chamadade linguagem-fonte.O
processodecompilaodesenvolve-seemdiversasetapas,a
maioriadasquaismostradanaFigura1.3(verp. 42).
O analisador
lxicoreneoscaracteresdoprograma-fonteemunidadeslxicasquesoosidentificadores,aspalavrasespeciais,osoperadorese
ossmbolosdepontuao.Oanalisadorlxicoignoraoscomentriosnoprograma-fonte,porqueelesnotemnenhumautilidadeparao
compilador.
O analisadorsintticopegaasunidadesdoanalisadorlxicoe
usa-asparaconstruirestruturashierrquicaschamadasrvoresdeanlise(parsetrees),asquaisrepresentama
'N.
deT.Teoriadosautmatos:umadisciplinadacinciadacomputaoabertaquediz
respeitoaumdispositivoabstratodenominado"autmato",o
qualexecutaumafunoespecficacomputacionaloudereconhecimento.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 41
Computador virtualPascal
ComputadorvirtualFORTRAN
Computadorvirtual C
Computadorvirtual Ada
CompiladorPascal
Computador virtualL1SP
Computadorvirtual de
linguagemassembly
FIGURA 1.2 Interfacede computadoresvirtuaisdispostaem
camadas,fornecida por um computadortpico.
estruturasintticadoprograma.Emmuitoscasos,nenhumaestruturadervoredeanliserealconstruda;aocontrrio,a
informaoqueserianecessriaparaconstru-Ia geradae
usada.Tantoasunidadeslxicascomoasrvoresdeanliseserodiscutidasadicional-
mentenoCaptulo3.O
geradordecdigointermedirioproduzumprogramaemumalinguagemdiferen-
te,nonvelintermedirioentreo
programa-fonteeasadafinaldocompilador,oprogramaemlinguagemdemquina(notequeaspalavraslinguageme
cdigomuitasvezessousa-dasdemaneiraintercambivel).As
linguagensintermedirias,svezes,parecem-semuitocomaslinguagensassembly.Emoutroscasos,o
cdigointermedirioestemumnvelbemmaisaltodoqueo assembly.O
analisadorsemnticofazparteintegralmentedogeradordecdigointermedirioeverificaseherrosdifceis,senoimpossveis,deseremdetectadosdurantea
anlisesinttica,comoporexemplo,errosdetipo.
Exemplossimplesdeanlisesintticaedegeraodecdigointermediriosoapre-sentadosnoCaptulo3.
-
42 ASPECTOS PRELIMINARES
Programa-fonte
Analisador
lxico
Unidades lxicasAnalisador
sinttico
rvores de anlise (parse trees)Tabela de
Gerador de cdigo
smbolos
intermedirio (eOtimizao
analisador simtteo c..oI
Cdigo intermedirioGerador de
cdigo
Linguagem de mquina
Dados de entrada
Computador~
(opcional)
Resultados
FIGURA 1.3 O processode compilao.
A otimizao,quemelhoraosprogramastornando-osmenoresou
maisrpidos,ouambos,muitasvezes, umaparteopcionalda compilao.De
fato,algunscompiladoressoincapazesdefazerqualquerotimizaosignificativa.Essetipodecompiladorseriausa-do
emsituaesemquea velocidadedeexecuodo programatraduzido
bemmenosimportantedoqueavelocidadedecompilao.Umexemplodessasituao
umlaborat-rio
decomputaoparaprogramadoresprincipiantes.Namaioriadassituaescomerciaise
industriais,avelocidadedeexecuomaisimportantedoqueavelocidadedecompila-
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 43
o,demodoquea otimizao
rotineiramentedesejvel.Umavezquemuitostiposdeotimizaonopodemserfeitosemlinguagemdemquina,a
maioriadasotimizaesfeitano cdigointermedirio.
O
geradordecdigoconverteaversodocdigointermediriootimizadodoprogra-maparaumprogramaemlinguagemdemquinaequivalente.
A tabeladesmbolosservecomoumbancodedadosparao
processodecompilao.Seuprincipalcontedosoinformaessobretipose
atributosdecadanomedefinidopelousurionoprograma.Essasinformaessocolocadasnatabeladesmbolospelosanalisa-doreslxicoe
sintticoeusadaspeloanalisadorsemnticoe pelogeradordecdigo.
Conformeafirmou-seacima,noobstantea linguagemdemquinageradapor
umcompiladorpossaserexecutadadiretamentenohardware,quasesempreeladeveserexe-cutadajuntamentecomalgumoutrocdigo.A
maioriadosprogramasdeusuriotambmexigeprogramasdosistemaoperacional.Entreosmaiscomuns,estoaquelesparaentrada(input)
e parasada(output)dedados.O compiladorcriachamadasa
programasdosiste-manecessriosquandoo
programadeusurionecessitadeles.Antesqueosprogramasemlinguagemdemquinaproduzidospelocompiladorpossamserexecutados,osprogramasnecessriosdo
sistemaoperacionaldevemserencontradose vinculadosao do
usurio.Aoperaodevinculaoconectao
programadeusurioaosdesistema,colocandoosende-reosdospontosdeentradadosprogramasdesistemanaschamadasaelesnodeusurio.O
cdigodeusurioeo
desistemajuntos,svezes,sochamadosdemdulodecargaouimagemdeexecutvel.O
processodecoletarprogramasdesistemae
vincul-Iosaospro-gramasdeusuriochamadodevinculaoecarregamentoou,svezes,apenasdevincu-lao.Ele
realizadoporumprogramadesistemachamadolinkeditor.
Almdosprogramasdesistemas,osprogramasdeusuriomuitasvezesdevemservinculadosa
programasdeusuriocompiladosanteriormente,queresidemembibliotecas.Assim,o
linkeditornosomentevinculaalgumdadoprogramaaosprogramasdesistema,mastambmo
vinculaa outrosprogramasdeusurio.
A
execuodeumprogramaemcdigodemquinaemumcomputadorcomarquite-turavonNeumannocorreemumprocessochamadociclobuscar-executar(jetch-executecycle).ComoseafirmounaSeo1.4.1,osprogramasresidemnamemria,massoexecu-tadosna
CPU.Cadainstruoa serexecutadadevesertransferidada
memriaparaoprocessador.O endereoda instruoseguintea serexecutada
mantidoemumregistrochamadocontadordeprograma.O
ciclobuscar-executarpodeserdescritodemaneirasim-plespeloseguintealgoritmo:
inicializeo contadordeprogramarepeatsempre
busquea instruoapontadapelocontadordeprogramaincrementeo
contadordeprogramaparaapontarparaa instruoseguintedecodifiquea
instruoexecutea instruo
endrepeat
O passo"decodifiquea instruo"noprocessoacimasignificaqueesta
examinadaparadeterminadaaoespecificadaporela.A execuodo
programaencerra-sequandoumainstruodeparada
encontrada,aindaqueemumcomputadorrealumainstruodeparadararamentesejaexecutada.Ao
contrrio,o
controletransfere-sedosistemaoperaci-onalparaumprogramadeusurioparaserexecutadoedepoisretomaaosistemaoperaci-onalquandoa
execuocompleta-se.Emumcomputadoremquemaisdeumprogramadeusuriopodeestarnamemriaemdeterminadomomento,esseprocessobemmaiscom-plexo.
-
44 ASPECTOS PRELIMINARES
A velocidadedaconexoentrea memriadeumcomputadore
seuprocessadorusu-almentedeterminaavelocidadedocomputador,porque,muitasvezes,asinstruespodemserexecutadasmaisrapidamentedo
quepodemsertransferidasparao
processadorparaseremexecutadas.Essaconexo
chamadadegargalodevonNeumann;ele o
principalfatorlimitantenavelocidadedaarquiteturadecomputadoresdevonNeumann.O
gargalodevonNeumannfoi umadasprincipaismotivaesparaa pesquisae
parao desenvolvi-mentodecomputadoresparalelos.
1.7.2 Interpretao Pura
Naextremidadeopostadosmtodosde
implementao,osprogramaspodemserinterpre-tadosporoutroprogramachamadointerpretador,semnenhumaconverso.O
programainterpretadoragecomoumasimulaode softwarede
umamquinacujociclobuscar-executarlidacominstruesdeprogramaemlinguagemdealtonvelemvezdeinstruesdemquina.Essasimulaodesoftware,evidentemente,forneceumamquinavirtualparaa
linguagem.
Essatcnica,chamadadeinterpretaopuraou,simplesmente,deinterpretao,tema
vantagemdepermitirumafcilimplementaodemuitasoperaesdedepuraodocdigo-fonte,porquetodasasmensagensdeerroemtempodeexecuopodemreferir-sea
unidadesdocdigo.Porexemplo,seforconsideradoqueumndicedearray
estforadafaixa,amensagemdeerropoderfacilmenteindicara
linhadafonteeo
nomedoarray.Poroutrolado,essemtodotemasriadesvantagemdequeaexecuode10a
100vezesmaislentadoqueemsistemascompilados.A
principalcausadessalentido a
decodifica-odasinstruesdelinguagemdealtonvel,bemmaiscomplexasdoqueasinstruesemlinguagemdemquina(noobstantepossahaverumnmeromenordecomandosdo
quedeinstruesemcdigodemquinaequivalente).Portanto,a
decodificaodecomandos,emvezdaconexoentreo processadorea memria,o
gargalodeuminterpretadorpuro.
Outradesvantagemdainterpretaopuraqueelafreqentementeexigemaisespa-o.Almdo
programa-fonte,a tabelade smbolosdeveestarpresentena
interpretao.Almdisso,o
programa-fontedeveserarmazenadoemumaformaprojetadaparapermitir
fcilacessoemodificao,emvezdeumta-manhomnimo.
A interpretao umprocessodifcilPrograma-fonte
emprogramasescritosemumalinguagem
complicada,porqueo significadode cadaexpressoe
instruodeveserdeterminadodiretamentedo programa-fonteemtempode
execuo.Linguagenscomestruturasmaissimplesprestam-se
interpretaopura.Porexemplo,aAPLe
aLIST,svezes,soimplementadascomosistemasinterpre-tativospuros.A
maioriadoscomandosdosistemaoperacional,comopor
exemplo,ocontedodosscriptsdoshell doUNIXe dosarquivos.BAT
doDOS,soimplementadoscominterpretadorespuros.Linguagensmais
Resultados complexas,comoo FORTRANe o C,
rara-mentesoimplementadascominterpreta-
FIGURA 1.4 Interpretaopura. dorespuros.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 45
o processodeinterpretaopura
mostradonaFigura1.4(verpginaanterior).
1.7.3 Sistemasde ImplementaoHbridos
Resultados
Unidades lxicas
Programa-fonte
Cdigo intermedirio
rvores de anlise (parse trees)
Analisadorsinttico
Analisadorlxico
Gerador de
cdigointermedirio
Algunssistemasdeimplementaodelinguagemsoummeio-termoentreoscompiladorese
osinterpretadorespuros;elestraduzemprogramasemlinguagemdealtonvelparaumalinguagemintermediriaprojetadaparapermitirfcil
interpretao.Essemtodo
maisrpidodoqueainterpretaopuraporqueasinstruesdalinguagemfontesodecodifica-
dassomenteumavez.Essasimplementa-essochamadasde sistemasde
im-plementaohbridos.
O processousadoemumsistemadeimplementaohbrido mostradona
Fi-gura1.5.Emvezdetraduzircdigoemlin-guagemintermediria para cdigo
demquina,elesimplesmenteinterpretao c-digo intermedirio.
A Perl implementadacomumsiste-mahbrido.Elasedesenvolveua
partirdalinguageminterpretativash e awk,
masparcialmentecompiladaparadetectarer-ros antesda interpretaoe
parasimplifi-caro interpretador.
As implementaesiniciaisde
Javaeramtodashbridas.Suaformaintermedi-
ria,chamadacdigodebytes,oferecepor-tabilidadea
qualquermquinaquetenhauminterpretadordecdigodebytese
umsistemaderun-timeassociado.Juntos,elesso chamadosde Java Virtual
Machine.
AgorahsistemasquetraduzemcdigodebytesJava paracdigode
mquinaparapermitirumaexecuomaisrpida.Porm,os appletsJava
sosempredescarregadosdo servidorWebna formade cdigodebytes.
s vezes,um
implementadorpodeoferecertantoimplementaescompiladascomointerpretadasparaumalinguagem.Nessescasos,o
interpretador
usadoparadesenvolvereparadepurarprogramas.En-to,depoisqueumestado(relativamente)livrede
problemas(bugs)
alcanado,osprogramassocompiladosparaaumentarsuavelocidadedeexecuo.FIGURA
1.5 Sistemade implementaohbrido.
-
46 ASPECTOS PRELIMINARES
1.8 Ambientesde Programao
Umambientedeprogramao o conjuntodeferramentasusadasno
desenvolvimentodesoftware.Esseconjuntopodeconsistiremsomenteumsistemadearquivos,emumeditordetexto,emumlinker
e
emumcompilador.Oupodeincluirumagrandecoleodeferra-mentasintegradas,cadaumadasquaisacessadapor
meiode umainterfacede usuriouniforme.Nesseltimocaso,o
desenvolvimentoe a manutenode
softwaremelhoroubastante.Portanto,ascaractersticasdeumalinguagemdeprogramaonosoa
nicamedidadacapacidadededesenvolvimentodesoftwaredeumsistema.Descreveremosago-ra,brevemente,diversosambientesdeprogramao.
O UNIX
umdosmaisantigosambientesdeprogramao,distribudopelaprimeiraveznadcadade70,construdoemtornodeumsistemaoperacionalportvelcomcompar-tilhamentode
tempo(time-sharing).Ele forneceumamploconjuntode
poderosasferra-mentasdeapoioparaa produoe paraa
manutenodesoftwareemumavariedadedelinguagens.No passado,o
maisimportanterecursoausentedo UNIX
eraumainterfaceuniformeentresuasferramentas.Issoo tornavadifcil de
aprendere de usar.Porm,oUNIX,agora,
freqentementeusadopormeiodeumainterfacegrficaquerodaemcimadele.Emmuitoscasos,essainterface
o CommonDesktopEnvironment(CDE).
O BorlandC++
umambientedeprogramaoquerodaemmicrocomputadoresIBM-PCe
compatveis.Eleofereceumcompiladorintegrado,um
editor,umdepuradoreumsistemadearquivos,emquetodososquatrosoacessadospormeiodeumainterfacegrfica.Umrecursoconvenientedessetipodeambienteque,quandoocompiladorencon-tra
umerrode sintaxe,eleprae mudaparao editor,deixandoo cursorno
pontodoprograma-fonteemqueo errofoidetectado.
O Smalltalk umalinguageme
umambientedeprogramaointegrados,maselamaiselaborada,complexaepoderosadoqueo
BorlandC++.O Smalltalkfoio primeiroafazerusodeumsistemadejanelase
umdispositivodeindicaopormouseparaoferecerao
usurioumainterfaceuniformea todasasferramentas.O
Smalltalkserdiscutidono
Captulo11.O
passomaisrecentenaevoluodosambientesdedesenvolvimentodesoftware
representadopeloMicrosoftVisualC++. umagrandee
elaboradacoleodeferramen-tasdedesenvolvimentode
software,todasusadasporumainterfaceprovidadejanelas.Essesistema,juntamentecomoutrossistemassimilarescomoo
VisualBASIC,o
DelphieoJavaDevelopmentKit,daSunMicrosystems,oferecemmaneirassimplesdeconstruirinter-facesgrficasparaosprogramas.
evidentequeamaiorpartedodesenvolvimentodesoftware,pelomenosnofuturoprximo,farusodeambientesdeprogramaopoderosos.Isso,semdvida,aumentaraprodutividadedosoftwaree
talvezelevara suaqualidadedeproduo.
RESUMO
O estudodaslinguagensdeprogramao valiosoporumasriede
importantesrazes:aumentanossacapacidadedeusardiferentesconstruesparaescreverprogramas,possi-bilita-nosescolherlinguagensparaprojetosdemaneiramaisinteligenteetornamaisfcilaaprendizagemdenovaslinguagens.
Os computadoressousadosemumaamplavariedadededomniosde
soluodeproblemas.O projetoe a
avaliaodeumalinguagemdeprogramaoparticulardepen-demmuitododomnioemqueelesdevemserusados.
-
CONCEITOS DE LINGUAGENS DE PROGRAMAO 47
Entreos critriosmaisimportantesparaavaliarlinguagensestoa
legibilidade,acapacidadedeescrita(writability), a confiabilidadee o
custoglobal.Essesseroa
basenaqualexaminaremosejulgaremososvriosrecursosdelinguagemdiscutidosnorestantedolivro.
Asprincipaisinflunciassobreo projetodeumalinguagemtmsidoa
arquiteturademquinae asmetodologiasdeprojetodesoftware.
Projetarumalinguagemdeprogramao, antesdemaisnada,umfeitode
enge-nharia,naqualumalongalistadetrade-offsdeveserfeitaentreosrecursos,asconstruese
ascapacidades.
Osprincipaismtodosparaimplementarlinguagensdeprogramaosoa
compila-o,a interpretaopurae a implementaohbrida.
Os ambientesdeprogramaotornaram-separtesimportantesdossistemasde
de-senvolvimentodesoftware,nosquaisa linguagem
apenasumdoscomponentes.
QUESTES DE REVISO
1. Porque til queo
programadortenhaalgumbackgroundemprojetodelinguagens,aindaquetalvezelejamaisprojetedefatoumalinguagemdeprogramao?
2. Comoo
conhecimentodascaractersticasdalinguagemdeprogramaopodebeneficiartodaacomunidadede
computao?
3. Que linguagemde programaodominoua computaocientficaao
longodos ltimos35anos?
4. Quelinguagemde programaodominouas aplicaescomerciaisao
longodosltimos35anos?
5. Quelinguagemdeprogramaodominoua
intelignciaartificialaolongodosltimos35anos?6. Emquallinguagemo
UNIXfoi escrito?7. Qual a
desvantagemdehaverdemasiadosrecursosemumalinguagem?8.
Comoumasobrecargadeoperadordefinidapelousurioprejudicaalegibilidadedeumprogra-
ma?
9. Queexemplopodeilustrara faltadeortogonalidadenoprojetodo
C?10. Quallinguagemusoua
ortogonalidadecomoprincipalcritriodeprojeto?11.
Qualinstruodecontroleprimitiva
usadaparaconstruirinstruesdecontrolemaiscompli-
cadasemlinguagensemqueelasfaltam?12. Qualproblemadelegibilidade
causadoquandoseusaa mesmapalavrareservadade fecha-
mentoparamaisdeumtipodeinstruodecontrole?13.
Qualconstruodeumalinguagemdeprogramaoofereceabstraodeprocesso?14. O
quesignificaumprogramaserconfivel?15. Porquea
verificaodosparmetrosdetipodeumsubprograma importante?16. O
quealiasing?17. O que manipulaodeexcees?18. Porquea legibilidade
importanteparaa capacidadedeescrita(writability)?19. Qual o
custodoscompiladoresparadeterminadalinguagememrelaoao
projetodessa
linguagem?20. Qualtemsidoa maisforteinflunciano projetode
linguagensde programaoao longodos
ltimos40 anos?
21. Qual o nomedacategoriadelinguagensdeprogramaocujaestrutura
determinadapelaarquiteturadecomputadordevonNeumann?
22.
Quaisforamasduasdeficinciasdelinguagemdeprogramaodescobertasemconseqnciadapesquisaemdesenvolvimentodesoftwarenadcadade70?
23.
Quaissoostrsrecursosfundamentaisdeumalinguagemdeprogramaoorientadaa
objeto?24. Quallinguagemfoia primeiraa
suportarostrsrecursosfundamentaisdaprogramaoorien-
tadaa objeto?
-
48 ASPECTOS PRELIMINARES
25.
Dumexemplodedoiscritriosdeprojetodelinguagemqueestoemconflitodiretoumcomo
outro.
26.
Quaissoostrsmtodosgeraisparaimplementarumalinguagemdeprogramao?27.
O queproduzumaexecuode programamaisrpida:umcompiladorou um
interpretador
puro?28. Qualpapela tabeladesmbolosdesempenhaemumcompilador?29.
O queumlinkeditor faz?30. Porqueo gargalodevonNeumann
importante?31.
Quaissoasvantagensdeimplementarumalinguagemcomuminterpretadorpuro?32.
Qualdesvantagemo UNIX
temcomoambientededesenvolvimentodesoftware?
PROBLEMAS
1. Vocacreditaquenossacapacidadede pensar influenciadapor
nossalinguagem?Sustentesuaopinio.
2. Quaisrecursosde linguagensde
programaoespecficasvocconhece,cujosfundamentoslgicossoummistrioparavoc?
3.
Quaisargumentosvocpoderialevantarafavordaidiadeumanicalinguagemparatodososdomniosdeprogramao?
4. Quaisargumentosvocpoderialevantarcontraa
idiadeumanicalinguagemparatodososdomniosdeprogramao?
5. Citee
expliqueoutrocritriopeloqualaslinguagenspodemserjulgadas(almdaquelesapre-sentadosnestecaptulo).
6. Qualinstruodelinguagemdeprogramaocomum,emsuaopinio,a
maisprejudicialparaa legibilidade?
7. O Modula-2usaEND paramarcaro
finaldetodasasinstruescompostas.Quaisosargumen-tosquepodemserlevantadoscontratal
uso?
8. Algumaslinguagens,notavelmenteo C e o
Java,fazemdistinoentremaisculaseminsculasnosidentificadores.Quaissoosprse
oscontrasnessadecisodeprojeto?
9. Expliqueosdiferentesaspectosdo
custodeumalinguagemdeprogramao.10.
Quaissoosargumentosparaescreverprogramaseficientesnoobstanteo
hardwareserrela-
tivamentebarato?
11. Descrevaalgunstrade-offsdeprojetoentreeficinciae
seguranaemalgumaslinguagensquevocconhece.
12. Quaisos principaisrecursosqueumalinguagemde
programaoperfeitaincluiria,emsuaopinio?
13. A primeiralinguagemdeprogramaodealtonvelquevocaprendeufoi
implementadacomum interpretador puro,comum sistemade
implementaohbridoou comum
compilador?(Vocnosaberiaissonecessariamentesempesquisa.)
14. Descrevaasvantagense
asdesvantagensdealgumambientedeprogramaoquevocusou.15.
Comoasinstruesdedeclaraodetipoparavariveissimplesafetama
legibilidadede uma
linguagem,considerandoquealgumaslinguagensnoasexigem?16.
Escrevaumaavaliaodealgumalinguagemdeprogramaoqueconhea,usandooscritrios
descritosnestecaptulo.17. O Pascalusao
pontoevrgulaparasepararinstrues,enquantoo C
usa-oparafinalizarinstru-
es.Qualdessas,emsuaopinio,a maisnaturale
aquetemmenosprobabilidadederesultaremerrosdesintaxe?Sustentesuaresposta.
18. Algumaslinguagens,comoo Pascale o C,
usamdelimitadoresemambasasextremidadesdoscomentrios.Outraslinguagens,comoo
FORTRANe a Ada,usamumsmboloou um pardesmbolosparaindicaro
inciodeumcomentrioe o finalda
linhaparafinaliz-lo.Discutaasvantagense
asdesvantagensdecadaopodeprojetocomrespeitoaosnossoscritrios.