32
5/26/2018 LpSebestaCap1-slidepdf.com http://slidepdf.com/reader/full/lp-sebesta-cap1 1/32 Capítulo Aspectos Preliminares  Motivos para Estudar os Conceitos de Linguagens de Programação  2 Domínios de Programação  3 Critérios de Avaliação da Linguagem  4 Influências sobre o Projeto da Linguagem  5 Categorias de Linguagem  6 Trade ffs no Projeto da Linguagem  7 Métodos de Implementação  8 Ambientes de Programação Konrad Zuse Konrad Zuse projetou uma série de computadores eletromecânicos entre 1936 e 1944 na Alemanha Em 1945 projetou uma linguagem de programação algorítmica completa a Plankalkül jamais implementada e sua descrição completa nem mesmo foi publicada até 1972

Lp Sebesta Cap1

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.