History pl

59
A História das Linguagens de Programação Fernando Magno Quintão Pereira (apresentação extraída de slides de Adam Brooks Webber)

Transcript of History pl

Page 1: History pl

AHistóriadasLinguagensdeProgramação

FernandoMagnoQuintãoPereira(apresentaçãoextraídadeslidesde

AdamBrooksWebber)

Page 2: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 3: History pl

Babilônia

•  Escritacuneiforme:1790BC•  Tábuasdeargilaaindaexistem:– Poemaseestórias

– Contratoseacordos– Astronomia– MatemáYca

Page 4: History pl

NúmerosdaBabilônia

•  Base60.Porque?•  Númerosdepontoflutuante!

1× 601 +10 × 600 = 70

1,10=

Page 5: History pl

ProgramasdaBabilônia

•  Algoritmoseramescritosusandolinguagemnatural.

•  AlgoritmosdescreviamprocedimentosdavidacoYdiana:– Paracalcularovolumedacisterna,seseuraioé2.0esuaalturaé7.0,entãoovolumeé3.1vezes2.0vezes2.0vezes7.0.

•  Nãousavamvariáveis.Númerosserviamparaexemplos.

Page 6: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 7: History pl

Baghdad,780‐850

•  Enquantonaeuropasenhoresfeudaisestavammatandounsaosoutros,umaculturaricaevibrantefloresciaemBaghdad.

•  HaviaumcortesãoematemáYcochamadoAl‐Khorezmi,queescreveuunslivros…

Page 8: History pl

Númerosindo‐arábicos

•  Olivrodosalgoritmos:ooriginalperdeu‐se.•  TraduçãoemlaYm:AlgorthmidenumeroIndorum.

•  Algoritmosparafazercontascomnúmeroshindus.– Base10– Sistemaposicional

•  InfluencioufortementeamatemáYcanaEuropamedieval.

Page 9: History pl

OutrosalgoritmosanYgos

•  Euclides,porvoltadoano300antesdeCristo,descreveuumalgoritmoparacalcularMDC.

•  AlexanderdeVillaDei,1220depoisdeCristo:CantodeAlgorsmo:algoritmosemverso!

•  Claro,nãohaviaummétodoformalparadescreveralgoritmos.Qualquercoisavalia:linguagemnatural,poesiaeatémúsica.

Page 10: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 11: History pl

AugustaAda

•  FilhadeLordByron,umgrandepoetaInglês.

•  1800epouco:mulheresnãorecebiameducaçãoformal.MatemáYcaeratabu.

•  AdatomouaulasparYcularesdematemáYca.

•  Casou‐seaos19,tornando‐seLadyLovelace,etevetrêsfilhos.– Nenhumanovidade…

Page 12: History pl

CharlesBabbage

•  MatemáYcoInglês•  Projetoucomputadoresmecânicos– Amáquinadiferencial(nãochegouaserterminadaporBabbage)

– MáquinaanalíYca(nuncaconstruída)

IwishtoGodthesecalculaAonshadbeenexecutedbysteam!

CharlesBabbage,1821

Page 13: History pl

AdaandCharles

•  AdaLovelaceeCharlesBabbageficaramamigosetrabalharamjuntosemmuitasdasidéiasdeBabbage.

•  AdadescreveuumalgoritmoparacalcularnúmerosdeBernoulliusandoamáquinadiferencial.– Nãochegouasertestado,afinalamáquinanãoexisYadefato.

– Maséconsideradooprimeiroprograma.

Page 14: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 15: History pl

KonradZuse

•  1936:construiuumcomputadormecânico,nasaladeestardeseuspais,emBerlim:oZ1

•  Eraumábacomecânico,controladoporpinosdemetalecorreias.

•  Programávelviafitasperfuradas.•  Númerosdepontoflutuante,embinário,comexpoenteexplícito.

Page 16: History pl

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.

Page 17: History pl

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?

Page 18: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 19: History pl

Programardavaumtrabalho…

•  Programareratrocarfiosdelugar.– Namelhordashipóteses,furarcartões.

•  ÉdiscilentenderquãodiscileraestaaYvidade.

•  OsprogramasdeAEDsIeramtrabalhodesemanas,uns60anosatrás.

Page 20: History pl

WishList

•  Númerosdepontoflutuante:programadoresYnhamdelembrarqualaposiçãodoponto.

•  EndereçorelaYvo:programadoresYnhadesaberoendereçodassub‐roYnasparacomputarendereçosabsolutos.

•  Subscritosparaarranjos.•  Algomaissimplesdelembrarqueinstruçõesoctais.

Page 21: History pl

Asprimeirasferramentas

•  Montadores•  CompiladoresprimiYvos:– Shortcode,JohnMauchly,1949

– A0,A1,A2,GraceHopper,1951‐53.CompiladoresparaexpressõesaritméYcas.

– SpeedCoding,JohnBackus,1954•  Eraprecisopoupartempodosprogramadores.

Page 22: History pl

Fortran

•  Aprimeiralinguagemdeprogramaçãoasetornarbastantepopular.

•  OprojetofoilideradoporJohnBackus,naIBM– Eraparaterlevadoseismeses;levoudoisanos.

– Diminuiuoserrosdeprogramação– Possuiaumcompiladorquegeravacódigodequalidade.

Page 23: History pl

CompilaçãoemSeparado

•  Inicialmentesemcompilaçãomodular.•  Porém,programascomeçaramacrescer.– CompilarprogramasgrandeseraimpráYco.

•  ComFortranIIveioapossibilidadedecompilarmódulos,enãoprogramasinteiros.

Idon'tknowwhatthelanguageoftheyear2000willlooklike,butIknowitwillbecalledFORTRAN.

C.A.R.Hoare

Page 24: History pl

Fortranfezescola

•  Usadaatéhoje:previsãodetempo,dinâmicadefluídos,etc.– Benchmarks:SPECCFP2006.

•  OcompiladoroYmizante:– Análiseléxica– Parsing– Alocaçãoderegistradores

Page 25: History pl

JohnBackus

•  Fortran,Algol58e60,BNFeFP(umalinguagempuramentefuncional)

Mypointisthis:whileitwasperhapsnaturalandinevitablethatlanguageslikeFORTRANanditssuccessorsshouldhavedevelopedoutoftheconceptofthevonNeumanncomputerastheydid,thefactthatsuchlanguageshavedominatedourthinkingfortwentyyearsisunfortunate.Itisunfortunatebecausetheirlong‐standingfamiliaritywillmakeithardforustounderstandandadoptnewprogrammingstyleswhichonedaywillofferfargreaterintellectualandcomputaYonpower.

JohnBackus,1978

Page 26: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 27: History pl

LISP

•  Em1956aconteceuumaconferênciadeIAemDartmouth:McCarthy,Minksy,Newell,Simon.

•  Newell,ShaweSimonintroduziramLogicTheorist,umprogramaderacioncínioescritoemIPL(InformaYonProcessingLanguage).

•  IPLYnhasuportealistasencadeadas,echamouaatençãodeMcCarthy.

•  SurgiaLISP,aprimeiralinguagemfuncional.

Page 28: History pl

UmalinguagemparaIA

•  JohnMcCarthyeraumprofessornoMIT,trabalhandocomIA.

•  EleYnhaumalistadedesejos:– Expressõescondicionais– Recursão– Funçõesdealtaordem(comomap)– Coletordelixo.

•  Fortrannãoservia…

Page 29: History pl

AsintaxedeLISP

•  Umprogramaéumalista,representandoumaAST:(+a(*bc))

•  McCarthyescreveuumafunçãoevalparainterpretaraAST.– AASTacabouvirandoapróprialinguagem.

•  Estafunçãoevalfoiescritaamão,usandolinguagemassembly.

Page 30: History pl

AevoluçãodeLISP

•  LISPépossivelmentealinguagemmaispopularparaIA.

•  Atéporvoltade1980haviamuitosdialetos:– CadagrupodepesquisaemIAYnhaseupróprioLISP.– HaviainclusivecomputadoresqueforamdesenvolvidossomenteparaexecutarLISP.

•  Hojeháumacertapadronização:– CommonLISP:alinguagemebibliotecas.

– Scheme:umdialetomaissimples,ensinadoemescolas.

Page 31: History pl

AinfluênciadeLISP

•  LISPéasegundalinguagemdeprogramaçãoaindaemuso.

•  Idéiascomoexpressõescondicionaiserecursãosãoamplamenteadotadashoje.

•  Muitaslinguagensfuncionaissurgiram.

•  Acoletadelixoétambémmuitopopular.

Page 32: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 33: History pl

Algol

•  Em1957aslinguagensdeprogramaçãoestavamsurgindoaosmontes.–  IndústriasYnhamseuspadrões.– UniversidadesYnhamseuspadrões.– Haviamuitospadrões,enenhumapadronização.

•  Algolsurgiuparaacabarcomisto.– Universal,independentedemáquina.

•  Umcomitêinternacionalfoicriadoem1958,paraestabeleceroprojeto.

Page 34: History pl

MuitosAlgols(!)

•  Nofinaldascontas,trêsprojetos:Algol58,Algol60eAlgol68.

•  Oscomitêsforamficandocadavezmaioresemaisestrelados.

Page 35: History pl

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.

Page 36: History pl

Polêmicas

•  Asprimeiraslinguagensusavamrótulosego‐to’sparacriardesviosdefluxo.

•  Algolesimilaresvieramcomumanovaproposta,baseadaemestruturasdecontrole.

•  Houvemuitapolêmica.

•  Em1968,EdsgarDijkstraescreveuumarYgomuitofamoso:“Gotostatementconsideredharmful”.

Page 37: History pl

AProgramaçãoEstruturada

•  Aprogramaçãobaseadaemestruturasdecontrole,emvezderótulos,échamadaprogramaçãoestruturada.

•  Muitosprogramadoresachavamdiscilprogramarsemgo‐tos.

•  Hojeapolêmicapareceterchegadoaofinal– Algumaslinguagens,comoJava,nempossuemgo‐to’s

– Emesmoemlinguagensondego‐to’sexistem,osprogramadoresraramenteosusam.

•  EstapolêmicatodasurgiucomAlgol

Page 38: History pl

Ortogonalidade

•  OprojetodeAlgoltentavaaomáximoevitarcasosespeciais:– Sintaxeindependendedaformadosprogramas– Eliminaçãodelimitesarbitrários:nomespodemterqualquertamanha,arranjospodemterqualquernúmerodedimensões,etc.

– Ortogonalidade:conceitospodemsercombinadosdequalquerforma.Ex.:declaraçãodeparâmetros=declaraçãodevariáveis,arranjosdequalquerYpoprimiYvo,registroscomquaisquercampos,etc.

Page 39: History pl

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

Page 40: History pl

Másno�cias

•  Algolnuncafoitãousadaquantoseesperaria.– Algol58deuorigemaJovial.

– Algol60foiusadacomopadrãodepublicaçãodealgoritmos.

•  Razõesdoinsucesso:– Oprojetonegligenciouentrada/saída.– Alinguagemeraconsideradacomplicada.– Algunserros:passagempornome(!)

– NãohaviasuportecoorporaYvoougovernamental.

Page 41: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 42: History pl

HaviaSimula…

•  HaviaunsnaviosentrandonoportodaNoruega.

•  KristenNyggardandOle‐JohanDahlYnhamdesimularestesnavios.

•  SimulaI:umavariantedeAlgol,comextensõesparafacilitarsimulações:aviõesnoaeroporto,clientesnobanco,etc.

•  Simula67:umalinguagemdepropósitogeralcomclasses,objetoseherança.

Page 43: History pl

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)

Page 44: History pl

Filosofiadeprojeto

•  Criealinguagememtornodeidéiassimples:– Listas,recursão,eval:LISP– Objetos,trocademensagens:Smalltalk–  Inferênciaeunificação:Prolog

•  Benescios:– Aimplementaçãoinicialésimples

– Éfácilmodificaralinguagemdepois

– Acurvadeaprendizadoépequena.

Page 45: History pl

AInfluênciadeSmalltalk

•  JuntamentecomSimula,Smalltalkinfluenciouumageraçãodelinguagensorientadasporobjetos.

•  Smalltalkaindaéusada.

•  MuitaslinguagensOOacabaramenfaYzandoaeficiênciadecompilação.– TipagemestáYca(smalltalkédinâmica)– TiposprimiYvosquenãosãoobjetos.

Page 46: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 47: History pl

Prolog

•  Em1965AlanRobinsonestavatrabalhandoemumprovadordeteoremas.– Provaseramencontradasviaunificação.

•  Em1971(Edinburgh)RobertKowalkidesenvolveutécnicasderesoluçãomaiseficientes.

•  AlainColmerauerePhilippeRousselinventaramPrologem1972.– PrologerapartedeumprojetoemIA(Marseilles,França),baseadoemdeduçõeslógias.

Page 48: History pl

AevoluçãodeProlog

•  Umanovaversãoem1973– OprogramadorYnhaaopçãodepararobacktracking.

– Otestedeocorrênciaacabousendoeliminado.

•  Davidwarreninventouumcompiladoreficienteem1977,baseadonasMáquinasAbstratasdewarren.

•  Estastécnciasdecompilaçãoacabaramsendousadasemoutraslinguagens:SmalltalkeML,porexemplo.

Page 49: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 50: History pl

ML

•  Provadoresdeteoremaestavamnamoda.

•  RobinMilner,Edingurgh,1974•  LCF:umaferramentaparadesenvolveraconstruçãodeprovasformaisdeteoremas.

•  MLfoiprojetadacomoalinguagemusadaemLCFparaescreveraxiomaseteoremas.

•  Tipagemforte,polimorfismoparamétricoeinferênciadeYposjáestavamnoprojeto.

Page 51: History pl

SemânYcaFormal

•  AdefiniçãodeMLincluisuasemânYcaformal– SemânYcanatural.

•  Emgeral,alinguagemapareceantesdesuasemânYcaforma.– EmMLfoiocontrário.

•  Foiassimporque,afimdeconfiarnasprovasdeLCF,eraprecisotercertezanacorretudedeML.

Page 52: History pl

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.

Page 53: History pl

•  Pré‐históriadaslinguagensdeprogramação– ProgramadoresdaBabilônia.– MohammedAl‐Khorezmi– AugustaAda,CondessadeLovelace

•  Asprimeiraslinguagensdeprogramação– Plankalkul– Fortran– Lisp– Algol– Smalltalk

•  Aslinguagensqueestudamosnestecurso– Prolog– ML–  Java

Page 54: History pl

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

Page 55: History pl

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

Page 56: History pl

Java

•  JamesGosling,SunMicrosystems•  1991:Oak–umalinguagemparaaplicaçõesderede.– ParecidacomC++,porémmenoremaissimples.

– Maissegura–fortementeYpada.– Maisportável–máquinavirtual.

•  Em1995foirenomeadaJava,evoltou‐separaaweb.–  Incorporadaemnavegadores.

Page 57: History pl

Filhodemuitospais

•  JavanãovemsomentedeCPL.•  Javatambémtem:– Coletadelixo,comoLISP.

– Concorrência,comoErlang.– Pacotes,comoModula

•  Masjavanãotemnadanovo.SeuobjeYvoéserumalinguagemdeprodução,nãoumalinguagemdepesquisa.

Page 58: History pl

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.

Page 59: History pl

Eofuturo?

•  Seráqueaindaháespaçoparamaisevoluçãoentreaslinguagensdeprogramação?

•  Talveztodasasdescobertasimportantesjáforamfeitas,eaevoluçãoagoraserámuitomaislenta.

•  OutalvezaindateremosoprazerdeassisYrosurgimentodenovasidéias,hojedesconhecidas,masquesetornaramóbviasparatodoomundo.