A História das Linguagens de Programação Fernando Magno Quintão Pereira (apresentação extraída de slides de Adam Brooks Webber)
AHistóriadasLinguagensdeProgramação
FernandoMagnoQuintãoPereira(apresentaçãoextraídadeslidesde
AdamBrooksWebber)
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
Babilônia
• Escritacuneiforme:1790BC• Tábuasdeargilaaindaexistem:– Poemaseestórias
– Contratoseacordos– Astronomia– MatemáYca
ProgramasdaBabilônia
• Algoritmoseramescritosusandolinguagemnatural.
• AlgoritmosdescreviamprocedimentosdavidacoYdiana:– Paracalcularovolumedacisterna,seseuraioé2.0esuaalturaé7.0,entãoovolumeé3.1vezes2.0vezes2.0vezes7.0.
• Nãousavamvariáveis.Númerosserviamparaexemplos.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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?
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
Programardavaumtrabalho…
• Programareratrocarfiosdelugar.– Namelhordashipóteses,furarcartões.
• ÉdiscilentenderquãodiscileraestaaYvidade.
• OsprogramasdeAEDsIeramtrabalhodesemanas,uns60anosatrás.
WishList
• Númerosdepontoflutuante:programadoresYnhamdelembrarqualaposiçãodoponto.
• EndereçorelaYvo:programadoresYnhadesaberoendereçodassub‐roYnasparacomputarendereç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
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Davidwarreninventouumcompiladoreficienteem1977,baseadonasMáquinasAbstratasdewarren.
• Estastécnciasdecompilaçãoacabaramsendousadasemoutraslinguagens:SmalltalkeML,porexemplo.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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.
• Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace
• Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk
• Aslinguagensqueestudamosnestecurso– Prolog– ML– Java
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
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
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.