a história das linguagens de programação

62
A História das Linguagens de Programação Prof. Maurício Dias Slides adaptados de Adam Brooks Webber e da Profa. Rosana Braga

Upload: others

Post on 03-Jan-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A História das Linguagens de Programação

AHistóriadasLinguagensdeProgramação

Prof. Maurício Dias

Slides adaptados de Adam Brooks Webbere da Profa. Rosana Braga

Page 2: A História das Linguagens de Programação

Babilônia

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

– Contratoseacordos– Astronomia–MatemáYca

Page 3: A História das Linguagens de Programação

NúmerosdaBabilônia

• Base60.Porque?• Númerosdepontoflutuante!

1× 601 +10 × 600 = 70

1,10=

Page 4: A História das Linguagens de Programação

ProgramasdaBabilônia

• Algoritmoseramescritosusandolinguagemnatural.

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

• Nãousavamvariáveis.Númerosserviamparaexemplos.

Page 5: A História das Linguagens de Programação

Baghdad,780‐850

• Enquantonaeuropasenhoresfeudaisestavammatandounsaosoutros,umaculturaricaevibrantefloresciaemBaghdad.

• HaviaumcortesãoematemáYcochamadoAl‐Khorezmi,queescreveuunslivros…

Page 6: A História das Linguagens de Programação

Númerosindo‐arábicos

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

• Algoritmosparafazercontascomnúmeroshindus.– Base10– Sistemaposicional

• InfluencioufortementeamatemáYcanaEuropamedieval.

Page 7: A História das Linguagens de Programação

OutrosalgoritmosanYgos

• Euclides,porvoltadoano300antesdeCristo,descreveuumalgoritmoparacalcularMDC.

• AlexanderdeVillaDei,1220depoisdeCristo:CantodeAlgorsmo:algoritmosemverso!

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

Page 8: A História das Linguagens de Programação

AugustaAda

• FilhadeLordByron,umgrandepoetaInglês.

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

• AdatomouaulasparYcularesdematemáYca.

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

Page 9: A História das Linguagens de Programação

CharlesBabbage

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

–MáquinaanalíYca(nuncaconstruída)

IwishtoGodthesecalculaAonshadbeenexecutedbysteam!

CharlesBabbage,1821

Page 10: A História das Linguagens de Programação

AdaandCharles

• AdaLovelaceeCharlesBabbageficaramamigosetrabalharamjuntosemmuitasdasidéiasdeBabbage.

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

–Maséconsideradooprimeiroprograma.

Page 11: A História das Linguagens de Programação

KonradZuse

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

• Eraumábacomecânico,controladoporpinosdemetalecorreias.

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

Page 12: A História das Linguagens de Programação

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 13: A História das Linguagens de Programação

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 14: A História das Linguagens de Programação

Programardavaumtrabalho…

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

• ÉdiscilentenderquãodiscileraestaaYvidade.

• OsprogramasdeAEDsIeramtrabalhodesemanas,uns60anosatrás.

Page 15: A História das Linguagens de Programação

WishList

• Númerosdepontoflutuante:programadoresYnhamdelembrarqualaposiçãodoponto.

• EndereçorelaYvo:programadoresYnhamdesaberoendereçodassub‐roYnaspara computarendereçosabsolutos.

• Subscritosparaarranjos.

• Algomaissimplesdelembrarqueinstruçõesoctais.

Page 16: A História das Linguagens de Programação

Asprimeirasferramentas

• Montadores• CompiladoresprimiYvos:– Shortcode,JohnMauchly,1949

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

– SpeedCoding,JohnBackus,1954• Eraprecisopoupartempodosprogramadores.

Page 17: A História das Linguagens de Programação
Page 18: A História das Linguagens de Programação

Fortran

• Aprimeiralinguagemdeprogramaçãoasetornarbastantepopular.

• OprojetofoilideradoporJohnBackus,naIBM– Eraparaterlevadoseismeses;levoudoisanos.

– Diminuiuoserrosdeprogramação– Possuiaumcompiladorquegeravacódigodequalidade.

Page 19: A História das Linguagens de Programação
Page 20: A História das Linguagens de Programação

CompilaçãoemSeparado

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

• ComFortranIIveioapossibilidadedecompilarmódulos,enãoprogramasinteiros.

Idon'tknowwhatthelanguageoftheyear2000willlooklike,butIknowitwillbecalledFORTRAN.

C.A.R.Hoare

Page 21: A História das Linguagens de Programação

Fortranfezescola

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

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

Page 22: A História das Linguagens de Programação

JohnBackus

• Fortran,Algol58e60,BNFeFP(umalinguagempuramentefuncional)

Mypointisthis:whileitwasperhapsnaturalandinevitablethatlanguageslikeFORTRANanditssuccessorsshouldhavedevelopedoutoftheconceptofthevonNeumanncomputerastheydid,thefactthatsuchlanguageshavedominatedourthinkingfortwentyyearsisunfortunate.Itisunfortunatebecausetheirlong‐standingfamiliaritywillmakeithardforustounderstandandadoptnewprogrammingstyleswhichonedaywillofferfargreaterintellectualandcomputaYonpower.

JohnBackus,1978

Page 23: A História das Linguagens de Programação
Page 24: A História das Linguagens de Programação

LISP

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

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

• IPLYnhasuportealistasencadeadas,echamouaatençãodeMcCarthy.

• SurgiaLISP,aprimeiralinguagemfuncional.

Page 25: A História das Linguagens de Programação

UmalinguagemparaIA

• JohnMcCarthyeraumprofessornoMIT,trabalhandocomIA.

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

• Fortrannãoservia…

Page 26: A História das Linguagens de Programação

AsintaxedeLISP

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

• McCarthyescreveuumafunçãoevalparainterpretaraAST.– AASTacabouvirandoapróprialinguagem.

• Estafunçãoevalfoiescritaamão,usandolinguagemassembly.

Page 27: A História das Linguagens de Programação
Page 28: A História das Linguagens de Programação

AevoluçãodeLISP

• LISPépossivelmentealinguagemmaispopularparaIA.

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

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

– Scheme:umdialetomaissimples,ensinadoemescolas.

Page 29: A História das Linguagens de Programação

AinfluênciadeLISP

• LISPéasegundalinguagemdeprogramaçãoaindaemuso.

• Idéiascomoexpressõescondicionaiserecursãosãoamplamenteadotadashoje.

• Muitaslinguagensfuncionaissurgiram.

• Acoletadelixoétambémmuitopopular.

Page 30: A História das Linguagens de Programação

Algol

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

• Algolsurgiuparaacabarcomisto.– Universal,independentedemáquina.

• Umcomitêinternacionalfoicriadoem1958,paraestabeleceroprojeto.

Page 31: A História das Linguagens de Programação

MuitosAlgols(!)

• Nofinaldascontas,trêsprojetos:Algol58,Algol60eAlgol68.

• Oscomitêsforamficandocadavezmaioresemaisestrelados.

Page 32: A História das Linguagens de Programação
Page 33: A História das Linguagens de Programação

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 34: A História das Linguagens de Programação

Polêmicas

• Asprimeiraslinguagensusavamrótulosego‐to’sparacriardesviosdefluxo.

• Algolesimilaresvieramcomumanovaproposta,baseadaemestruturasdecontrole.

• Houvemuitapolêmica.

• Em1968,EdsgarDijkstraescreveuumarYgomuitofamoso:“Gotostatementconsideredharmful”.

Page 35: A História das Linguagens de Programação

AProgramaçãoEstruturada

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

• Muitosprogramadoresachavamdiscilprogramarsemgo‐tos.

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

– Emesmoemlinguagensondego‐to’sexistem,osprogramadoresraramenteosusam.

• EstapolêmicatodasurgiucomAlgol

Page 36: A História das Linguagens de Programação

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 37: A História das Linguagens de Programação

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 38: A História das Linguagens de Programação

Másno�cias

• Algolnuncafoitãousadaquantoseesperaria.– Algol58deuorigemaJovial.

– Algol60foiusadacomopadrãodepublicaçãodealgoritmos.

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

– NãohaviasuportecoorporaYvoougovernamental.

Page 39: A História das Linguagens de Programação

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

`

Page 40: A História das Linguagens de Programação

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

Page 41: A História das Linguagens de Programação

HaviaSimula…

• HaviaunsnaviosentrandonoportodaNoruega.

• KristenNyggardandOle‐JohanDahlYnhamdesimularestesnavios.

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

• Simula67:umalinguagemdepropósitogeralcomclasses,objetoseherança.

Page 42: A História das Linguagens de Programação

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 43: A História das Linguagens de Programação
Page 44: A História das Linguagens de Programação

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: A História das Linguagens de Programação

AInfluênciadeSmalltalk

• JuntamentecomSimula,Smalltalkinfluenciouumageraçãodelinguagensorientadasporobjetos.

• Smalltalkaindaéusada.

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

Page 46: A História das Linguagens de Programação

Prolog

• Em1965AlanRobinsonestavatrabalhandoemumprovadordeteoremas.– Provaseramencontradasviaunificação.

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

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

Page 47: A História das Linguagens de Programação
Page 48: A História das Linguagens de Programação

AevoluçãodeProlog

• Umanovaversãoem1973– OprogramadorYnhaaopçãodepararobacktracking.

– Otestedeocorrênciaacabousendoeliminado.

Davidwarreninventouumcomplador eficienteem1977,baseadonasMáquinas Abstratas de warren (intermediária sequencial)

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

Page 49: A História das Linguagens de Programação

ML

• Provadoresdeteoremaestavamnamoda.

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

• MLfoiprojetadacomoalinguagemusadaemLCFparaescreveraxiomaseteoremas.

• Tipagemforte,polimorfismoparamétricoeinferênciadeYposjáestavamnoprojeto.

Page 50: A História das Linguagens de Programação

SemânYcaFormal

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

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

• Foiassimporque,afimdeconfiarnasprovasdeLCF,eraprecisotercertezanacorretudedeML.

Page 51: A História das Linguagens de Programação

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 52: A História das Linguagens de Programação
Page 53: A História das Linguagens de Programação

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 54: A História das Linguagens de Programação

CPL

BCPL

Page 55: A História das Linguagens de Programação

B

Page 56: A História das Linguagens de Programação

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 57: A História das Linguagens de Programação

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.

Page 58: A História das Linguagens de Programação

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

Page 59: A História das Linguagens de Programação

Java

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

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

• Em1995foirenomeadaJava,evoltou‐separaaweb.– Incorporadaemnavegadores.

Page 60: A História das Linguagens de Programação

Filhodemuitospais

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

– Concorrência,comoErlang.– Pacotes,comoModula

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

Page 61: A História das Linguagens de Programação

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 62: A História das Linguagens de Programação

Eofuturo?

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

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

• OutalvezaindateremosoprazerdeassisYrosurgimentodenovasidéias,hojedesconhecidas,masquesetornaramóbviasparatodoomundo.