Upload
lucas-rufino
View
189
Download
0
Embed Size (px)
DESCRIPTION
Introdução a Linguagens de programação
Citation preview
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.