Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
AHistóriadasLinguagensdeProgramação
Prof. Maurício Dias
Slides adaptados de Adam Brooks Webbere da Profa. Rosana Braga
Babilônia
• Escritacuneiforme:1790BC• Tábuasdeargilaaindaexistem:– Poemaseestórias
– Contratoseacordos– Astronomia–MatemáYca
NúmerosdaBabilônia
• Base60.Porque?• Númerosdepontoflutuante!
€
1× 601 +10 × 600 = 70
1,10=
ProgramasdaBabilônia
• Algoritmoseramescritosusandolinguagemnatural.
• AlgoritmosdescreviamprocedimentosdavidacoYdiana:– Paracalcularovolumedacisterna,seseuraioé2.0esuaalturaé7.0,entãoovolumeé3.1vezes2.0vezes2.0vezes7.0.
• Nãousavamvariáveis.Númerosserviamparaexemplos.
Baghdad,780‐850
• Enquantonaeuropasenhoresfeudaisestavammatandounsaosoutros,umaculturaricaevibrantefloresciaemBaghdad.
• HaviaumcortesãoematemáYcochamadoAl‐Khorezmi,queescreveuunslivros…
Númerosindo‐arábicos
• Olivrodosalgoritmos:ooriginalperdeu‐se.• TraduçãoemlaYm:AlgorthmidenumeroIndorum.
• Algoritmosparafazercontascomnúmeroshindus.– Base10– Sistemaposicional
• InfluencioufortementeamatemáYcanaEuropamedieval.
OutrosalgoritmosanYgos
• Euclides,porvoltadoano300antesdeCristo,descreveuumalgoritmoparacalcularMDC.
• AlexanderdeVillaDei,1220depoisdeCristo:CantodeAlgorsmo:algoritmosemverso!
• Claro,nãohaviaummétodoformalparadescreveralgoritmos.Qualquercoisavalia:linguagemnatural,poesiaeatémúsica.
AugustaAda
• FilhadeLordByron,umgrandepoetaInglês.
• 1800epouco:mulheresnãorecebiameducaçãoformal.MatemáYcaeratabu.
• AdatomouaulasparYcularesdematemáYca.
• Casou‐seaos19,tornando‐seLadyLovelace,etevetrêsfilhos.– Nenhumanovidade…
CharlesBabbage
• MatemáYcoInglês• Projetoucomputadoresmecânicos– Amáquinadiferencial(nãochegouaserterminadaporBabbage)
–MáquinaanalíYca(nuncaconstruída)
IwishtoGodthesecalculaAonshadbeenexecutedbysteam!
CharlesBabbage,1821
AdaandCharles
• AdaLovelaceeCharlesBabbageficaramamigosetrabalharamjuntosemmuitasdasidéiasdeBabbage.
• AdadescreveuumalgoritmoparacalcularnúmerosdeBernoulliusandoamáquinadiferencial.– Nãochegouasertestado,afinalamáquinanãoexisYadefato.
–Maséconsideradooprimeiroprograma.
KonradZuse
• 1936:construiuumcomputadormecânico,nasaladeestardeseuspais,emBerlim:oZ1
• Eraumábacomecânico,controladoporpinosdemetalecorreias.
• Programávelviafitasperfuradas.• Númerosdepontoflutuante,embinário,comexpoenteexplícito.
Plankalkul
• Em1945‐46,Zusecompletouoprojetodeumalinguagemdeprogramação:Plankalkul.
• Váriasidéiasrevolucionárias:– Atribuição,expressõesariYméYcas,subscritos.– TipoprimiYvo:bit.Tiposderivados:inteiro,real,arranjos,etc.
– Execuçãocondicional,laços,subroYnas.– Asserções!
• Zusecriouváriosprogramasexemplo:ordenação,buscaemgrafos,análisesintáYca,etc.
ExemploP1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) => R0[:8.0] max(V0[:8.0],V1[:8.0]) => Z1[:8.0] max(Z1[:8.0],V2[:8.0]) => R0[:8.0] END
P2 max (V0[:8.0],V1[:8.0]) => R0[:8.0] V0[:8.0] => Z1[:8.0] (Z1[:8.0] < V1[:8.0]) -> V1[:8.0] => Z1[:8.0] Z1[:8.0] => R0[:8.0] END
• Nãochegouaterinfluênciaemoutraslinguagens.Porque?
Programardavaumtrabalho…
• Programareratrocarfiosdelugar.– Namelhordashipóteses,furarcartões.
• ÉdiscilentenderquãodiscileraestaaYvidade.
• OsprogramasdeAEDsIeramtrabalhodesemanas,uns60anosatrás.
WishList
• Númerosdepontoflutuante:programadoresYnhamdelembrarqualaposiçãodoponto.
• EndereçorelaYvo:programadoresYnhamdesaberoendereçodassub‐roYnaspara computarendereçosabsolutos.
• Subscritosparaarranjos.
• Algomaissimplesdelembrarqueinstruçõesoctais.
Asprimeirasferramentas
• Montadores• CompiladoresprimiYvos:– Shortcode,JohnMauchly,1949
– A0,A1,A2,GraceHopper,1951‐53.CompiladoresparaexpressõesaritméYcas.
– SpeedCoding,JohnBackus,1954• Eraprecisopoupartempodosprogramadores.
Fortran
• Aprimeiralinguagemdeprogramaçãoasetornarbastantepopular.
• OprojetofoilideradoporJohnBackus,naIBM– Eraparaterlevadoseismeses;levoudoisanos.
– Diminuiuoserrosdeprogramação– Possuiaumcompiladorquegeravacódigodequalidade.
CompilaçãoemSeparado
• Inicialmentesemcompilaçãomodular.• Porém,programascomeçaramacrescer.– CompilarprogramasgrandeseraimpráYco.
• ComFortranIIveioapossibilidadedecompilarmódulos,enãoprogramasinteiros.
Idon'tknowwhatthelanguageoftheyear2000willlooklike,butIknowitwillbecalledFORTRAN.
C.A.R.Hoare
Fortranfezescola
• Usadaatéhoje:previsãodetempo,dinâmicadefluídos,etc.– Benchmarks:SPECCFP2006.
• OcompiladoroYmizante:– Análiseléxica– Parsing– Alocaçãoderegistradores
JohnBackus
• Fortran,Algol58e60,BNFeFP(umalinguagempuramentefuncional)
Mypointisthis:whileitwasperhapsnaturalandinevitablethatlanguageslikeFORTRANanditssuccessorsshouldhavedevelopedoutoftheconceptofthevonNeumanncomputerastheydid,thefactthatsuchlanguageshavedominatedourthinkingfortwentyyearsisunfortunate.Itisunfortunatebecausetheirlong‐standingfamiliaritywillmakeithardforustounderstandandadoptnewprogrammingstyleswhichonedaywillofferfargreaterintellectualandcomputaYonpower.
JohnBackus,1978
LISP
• Em1956aconteceuumaconferênciadeIAemDartmouth:McCarthy,Minksy,Newell,Simon.
• Newell,ShaweSimonintroduziramLogicTheorist,umprogramaderacioncínioescritoemIPL(InformaYonProcessingLanguage).
• IPLYnhasuportealistasencadeadas,echamouaatençãodeMcCarthy.
• SurgiaLISP,aprimeiralinguagemfuncional.
UmalinguagemparaIA
• JohnMcCarthyeraumprofessornoMIT,trabalhandocomIA.
• EleYnhaumalistadedesejos:– Expressõescondicionais– Recursão– Funçõesdealtaordem(comomap)– Coletordelixo.
• Fortrannãoservia…
AsintaxedeLISP
• Umprogramaéumalista,representandoumaAST:(+a(*bc))
• McCarthyescreveuumafunçãoevalparainterpretaraAST.– AASTacabouvirandoapróprialinguagem.
• Estafunçãoevalfoiescritaamão,usandolinguagemassembly.
AevoluçãodeLISP
• LISPépossivelmentealinguagemmaispopularparaIA.
• Atéporvoltade1980haviamuitosdialetos:– CadagrupodepesquisaemIAYnhaseupróprioLISP.– HaviainclusivecomputadoresqueforamdesenvolvidossomenteparaexecutarLISP.
• Hojeháumacertapadronização:– CommonLISP:alinguagemebibliotecas.
– Scheme:umdialetomaissimples,ensinadoemescolas.
AinfluênciadeLISP
• LISPéasegundalinguagemdeprogramaçãoaindaemuso.
• Idéiascomoexpressõescondicionaiserecursãosãoamplamenteadotadashoje.
• Muitaslinguagensfuncionaissurgiram.
• Acoletadelixoétambémmuitopopular.
Algol
• Em1957aslinguagensdeprogramaçãoestavamsurgindoaosmontes.– IndústriasYnhamseuspadrões.– UniversidadesYnhamseuspadrões.– Haviamuitospadrões,enenhumapadronização.
• Algolsurgiuparaacabarcomisto.– Universal,independentedemáquina.
• Umcomitêinternacionalfoicriadoem1958,paraestabeleceroprojeto.
MuitosAlgols(!)
• Nofinaldascontas,trêsprojetos:Algol58,Algol60eAlgol68.
• Oscomitêsforamficandocadavezmaioresemaisestrelados.
Alongaherança
• Quasetodalinguagemquesurgiudepoisde1958usaidéiasdeAlgol:– Blocosdelimitadores.– Estruturaléxicadeformatolivre.– SintaxedefinidaviaBNF– Escopodeblocoparavariáveislocais– TipagemestáYcacomanotaçõesdeYpo– If‐then‐else’saninhados– Chamadaporvalor– Recursãoeexpressõescondicionais– Alocaçãodinâmicadememória.– Procedimentosdeprimeiraclasse.– Operadoresdefinidospelousuário.
Polêmicas
• Asprimeiraslinguagensusavamrótulosego‐to’sparacriardesviosdefluxo.
• Algolesimilaresvieramcomumanovaproposta,baseadaemestruturasdecontrole.
• Houvemuitapolêmica.
• Em1968,EdsgarDijkstraescreveuumarYgomuitofamoso:“Gotostatementconsideredharmful”.
AProgramaçãoEstruturada
• Aprogramaçãobaseadaemestruturasdecontrole,emvezderótulos,échamadaprogramaçãoestruturada.
• Muitosprogramadoresachavamdiscilprogramarsemgo‐tos.
• Hojeapolêmicapareceterchegadoaofinal– Algumaslinguagens,comoJava,nempossuemgo‐to’s
– Emesmoemlinguagensondego‐to’sexistem,osprogramadoresraramenteosusam.
• EstapolêmicatodasurgiucomAlgol
Ortogonalidade
• OprojetodeAlgoltentavaaomáximoevitarcasosespeciais:– Sintaxeindependendedaformadosprogramas– Eliminaçãodelimitesarbitrários:nomespodemterqualquertamanha,arranjospodemterqualquernúmerodedimensões,etc.
– Ortogonalidade:conceitospodemsercombinadosdequalquerforma.Ex.:declaraçãodeparâmetros=declaraçãodevariáveis,arranjosdequalquerYpoprimiYvo,registroscomquaisquercampos,etc.
ExemplodeOrtogonalidade
• Cadacombinaçãoproibidaéumcasoespecial,queprecisaserlembradopeloprogramador.
• EmAlgol68todasascombinaçõesacimasãopossíveis.
• PoucaslinguagensmodernaslevamortogonalidadetãoasérioquantoAlgol.
Integers Arrays Procedures
Passar como parâmetro x x x
Armazenar em variável x x x
Armazenar em arranjo x x x
Retornar de uma função x x x
Másno�cias
• Algolnuncafoitãousadaquantoseesperaria.– Algol58deuorigemaJovial.
– Algol60foiusadacomopadrãodepublicaçãodealgoritmos.
• Razõesdoinsucesso:– Oprojetonegligenciouentrada/saída.– Alinguagemeraconsideradacomplicada.– Algunserros:passagempornome(!)
– NãohaviasuportecoorporaYvoougovernamental.
Os grandes problemas da programação imperativa, estruturada: -- Grande Acoplamento! -- Baixa Coesão!
Temos os dados, e o programa é constituído por milhares de funções que… -- Ou manipulam diretamente esses dados -- Ou trocam muitos valores por parâmetro
`
Em OOP (Object-Oriented Programming), as funções estão encapsuladas juntamente com os dados a que podem (e devem acessar)
A principal ideia dos objetos é que: - Apenas as funções relacionadas com os dados os acessam - Reduzir o acoplamento e aumentar a coesão, isto é, permitir a construção de software em projetos de larga escala, de forma consistente e fácil de gerenciar - Além disso, é muito mais natural pensar em termos de objetos e suas relações do que em termos de dados e algoritmos
Programação estruturada: PROGRAMA = DADOS + ALGORITMOSProgramação orientada a ObjetosPROGRAMA = OBJETOS + RELAÇÕES
HaviaSimula…
• HaviaunsnaviosentrandonoportodaNoruega.
• KristenNyggardandOle‐JohanDahlYnhamdesimularestesnavios.
• SimulaI:umavariantedeAlgol,comextensõesparafacilitarsimulações:aviõesnoaeroporto,clientesnobanco,etc.
• Simula67:umalinguagemdepropósitogeralcomclasses,objetoseherança.
SmallTalk
• AlanKay,Xerox,1972• SmalltalkfoiinspiradaporSimula,Sketchpad,Logo,biologiacelular,etc.
• Smalltalkémaisorientadaporobjetosqueamaiorpartedeseusdescendentes.
• Tudosãoobjetos:variáveis,constantes,classes,registrosdeaYvação,etc.
• Todacomputaçãoéfeitaporobjetosquerecebemeemitemmensagems:1+2=1.sum(2)
Filosofiadeprojeto
• Criealinguagememtornodeidéiassimples:– Listas,recursão,eval:LISP– Objetos,trocademensagens:Smalltalk– Inferênciaeunificação:Prolog
• Benescios:– Aimplementaçãoinicialésimples
– Éfácilmodificaralinguagemdepois
– Acurvadeaprendizadoépequena.
AInfluênciadeSmalltalk
• JuntamentecomSimula,Smalltalkinfluenciouumageraçãodelinguagensorientadasporobjetos.
• Smalltalkaindaéusada.
• MuitaslinguagensOOacabaramenfaYzandoaeficiênciadecompilação.– TipagemestáYca(smalltalkédinâmica)– TiposprimiYvosquenãosãoobjetos.
Prolog
• Em1965AlanRobinsonestavatrabalhandoemumprovadordeteoremas.– Provaseramencontradasviaunificação.
• Em1971(Edinburgh)RobertKowalkidesenvolveutécnicasderesoluçãomaiseficientes.
• AlainColmerauerePhilippeRousselinventaramPrologem1972.– PrologerapartedeumprojetoemIA(Marseilles,França),baseadoemdeduçõeslógias.
AevoluçãodeProlog
• Umanovaversãoem1973– OprogramadorYnhaaopçãodepararobacktracking.
– Otestedeocorrênciaacabousendoeliminado.
•
Davidwarreninventouumcomplador eficienteem1977,baseadonasMáquinas Abstratas de warren (intermediária sequencial)
• Estastécnciasdecompilaçãoacabaramsendousadasemoutraslinguagens:SmalltalkeML,porexemplo.
ML
• Provadoresdeteoremaestavamnamoda.
• RobinMilner,Edingurgh,1974• LCF:umaferramentaparadesenvolveraconstruçãodeprovasformaisdeteoremas.
• MLfoiprojetadacomoalinguagemusadaemLCFparaescreveraxiomaseteoremas.
• Tipagemforte,polimorfismoparamétricoeinferênciadeYposjáestavamnoprojeto.
SemânYcaFormal
• AdefiniçãodeMLincluisuasemânYcaformal– SemânYcanatural.
• Emgeral,alinguagemapareceantesdesuasemânYcaforma.– EmMLfoiocontrário.
• Foiassimporque,afimdeconfiarnasprovasdeLCF,eraprecisotercertezanacorretudedeML.
AevoluçãodeML
• Em1980LucaCardelliimplementouumcompiladoreficienteparaML.
• Em1983foipublicadoopadrãodeML.• Novasconstruções:casamentodepadrões,módulos,registros,tratamentodeexceções.
• Dialetos:– StandardML(aversãoqueusamos)– LazyML:MLcomavaliaçãopreguiçosa– Caml:Umdialetocriadoantesdaadiçãodemódulos– Ocaml:Camlcomorientaçãoporobjetos.
OsdescendentesdeJava
Algol60
CPL
BCPL
B
“BasicCPL.”CPLsimplificada.SemApos:dadossãopalavrasdemáquina.Introduziuanotaçãocomumdearranjos:A[i]echavesparablocos.MarAnRichards(astudentofStrachey),1967
UmalinguagemaindamaiorqueAlgol,comconstrutosparaprocessamentodedadosdenegócios.ChristopherStracheyetal.1962‐66
UmalinguagemaindamaissimplesqueBCPL.FoiusadanosprimeirossistemasUNIX.Re‐introduziuasatribuiçõescompostas:(a+=b),vistasemAlgol68.KenThompson,1969
CPL
BCPL
B
Maisdescendentes
B
C
C++
Java
C++eraoriginalmenteumpreprocessadordeCqueincluianalinguagemorientaçãoporobjetos:“C++=CcomClasses”.Trouxedynamicdispatch,sobrecargadeoperadoresefunções,polimorfismoparamétrico,tratamentodeexceções.
BjarneStroustrup,1984
ExtensãodeB(originalmentechamada“NB”).OobjeAvoeraaproveitarmelhorohardware(PDP‐11).SistemadeApos,pre‐processador,bibliotecasdeentrada/saída,etc.Foiusadaparare‐implementarokerneldoUNIXeváriasaplicaçõesdestesistemaoperacional.
DennisRitchieet.al.,1971‐1973
CA primeira versão de C foi criada por Dennis Ritchie em 1972 nos laboratórios Bell para ser incluído como um dos softwares a serem distribuídos juntamente com o sistema operacional Unix do computador PDP-11, na equipe certificada por Ken Thompson.
Tanto BCPL quanto B mostravam-se muito limitadas, prestando-se apenas para certas classes de problemas. Isto se fez sentir especialmente na primeira versão do PDP11, lançado no mercado em 1971. Um dos fatores que levou à isto foi a intenção do grupo responsável pelo UNIX de reescrevê-lo todo em uma linguagem de alto nível, e para isto B era considerado lenta.
Estes problemas levaram a que o projetista Dennis Ritchie, do Bell Labs, fosse encarregado de projetar uma nova linguagem, sucessora do B, que viria então, a ser chamada de C. A linguagem C buscou manter o "contato com o computador real" e ainda sim dar ao programador novas condições para o desenvolvimento de programas em áreas diversas, como comercial, científica e de engenharia.
C++
Bjarne Stroustrup queria ter classes e objetos na linguagem C e Criou um pré-processador que compilava a sua linguagem “C with Classes” para C1984, Bell Labs, C++
Alguns dos problemas do C++ é que é muito grande, complicada de utilizar e muito fácil de cometer erros/gerar código de baixa qualidade pois depende da qualidade do programador muito mais do que depende de ferramentas da linguagem
Java
• JamesGosling,SunMicrosystems• 1991:Oak–umalinguagemparaaplicaçõesderede.– ParecidacomC++,porémmenoremaissimples.
–Maissegura–fortementeYpada.–Maisportável–máquinavirtual.
• Em1995foirenomeadaJava,evoltou‐separaaweb.– Incorporadaemnavegadores.
Filhodemuitospais
• JavanãovemsomentedeCPL.• Javatambémtem:– Coletadelixo,comoLISP.
– Concorrência,comoErlang.– Pacotes,comoModula
• Masjavanãotemnadanovo.SeuobjeYvoéserumalinguagemdeprodução,nãoumalinguagemdepesquisa.
Acalçadadafama
• MuitospioneirosdaslinguagensdeprogramaçãoganharamPrêmiosTuring:– AlanPerlis,JohnMcCarthy,EdsgerDijkstra,DonaldKnuth,DanaSco�,JohnBackus,RobertFloy,DennethIverson,C.A.R.Hoare,DennisRitchie,NickausWirth,JohnCocke,RobinMilner,KristenNyggard,Ole‐JohanDahl
• Foiestagentequepopularizoucoisasquehojesãoóbvias:– Variáveislocaiscomescopodebloco.
– Programaçãoestruturada.
Eofuturo?
• Seráqueaindaháespaçoparamaisevoluçãoentreaslinguagensdeprogramação?
• Talveztodasasdescobertasimportantesjáforamfeitas,eaevoluçãoagoraserámuitomaislenta.
• OutalvezaindateremosoprazerdeassisYrosurgimentodenovasidéias,hojedesconhecidas,masquesetornaramóbviasparatodoomundo.