L AB O RATO R I O Department of Computer Science − DE C O M P I LAD O R E S Universidade Federal de Minas Gerais LinguagensdeProgramação FernandoMagnoQuintãoPereira − Brazil • Oquesãolinguagensdeprogramação? • Porqueelasexistem? • Comocomputadoreseramprogramadosantes daslinguagensdeprogramação? ATorredeBabel • Existementre5.000e6.000 línguasfaladasemnosso planeta. • Cercade200idiomas possuemmaisdeummilhão defalantes. • Comodescreverumidioma? Queelementosestão presentesnadescriçãode umalinguagem? Computadorestambémconversam • Comoéalinguagem faladapelos computadores? – Quesímboloselausa? – Quaispalavras? – ComoseriaagramáMca dessalínguaeletrônica? Vamosfalarzero-um-nês? • Computadorespossuem cordasvocaismuitosimples: ouemitemsom,ounão emitem • Épossívelhaveruma linguagemcomapenasdois símbolos? • Porquesomentedois símbolos? Dialetosdozero-um-nês • Hámuitaslinguagensde zeroseunsdiferentes,assim comohámuitaslinguagens diferentesusando caractereslaMnos:inglês, português,espanhol,etc. • Quemmedáexemplosde zero-um-nêsdiferentes? “Thebookisonthetable” • Cadainstruçãoemzero-um-nêspossuium nome,chamadoopcode,eoperandos. • Instruçõesmudamoestadodocomputador. • QueMposdeinstruçõespoderiamexisMr? • Falarzero-um-nêsdeveserfácil,nãoé? Masnãoénão… • AnMgamenteprogramar computadoreseramuito di[cil. • Qualoproblemacomzeroum-nês? • Alguémaiconhececartões perfurados? • Comodeixarzero-um-nês maisfácildeusar? EveioaDeusa • Palavrassãomaisfáceis delembrarque sequênciasdezerose uns. • Porexemplo:qual instruçãoémaisfácilde ler:mov $1, AL,ou 10110000 01100001? OQueesteprogramafaz? movl $5, %eax movl $1, %edx .L4: imull %eax, %edx decl %eax testl %eax, $0 jg .L4 OQueesteprogramafaz? Coloque5em%eax movl $5, %eax movl $1, %edx .L4: imull %eax, %edx decl %eax testl %eax, $0 jg .L4 Coloque1em%edx MulMplique%eaxpor%edx,e coloqueoresultadoem%edx Subtraia1de%eax Testese%eaxéZero SeZero,entãovápara.L4 OMontador • Aspessoasfalavam assembly,masos computadoresainda falavamzero-um-nês. – Eraprecisoumtradutor. • Oqueumtradutor desteMpodeveriaser capazdefazer? ADeusanãofoisuficiente • Programaremassemblyaindaeradi[cil. • Osprogramadoresqueriamqueos computadoresfossemcapazesdefalarlínguas aindamaisparecidascomlinguagens humanas. • Quaisforamasprimeiraslinguagensde programação? • Quemforamospaisdessaslinguagens? SurgeFortran • JohnBackusestavacom preguiçadeescrever programasemassembly. • IBM1953/54 • Programarficouumas20 vezesmaisfácil – Masaspessoasainda estavamrelutantes… Porque? ExemplodeprogramaemFortran Fortran nfact=1 do i=1, 5 nfact = nfact*I enddo Quenovidadessurgiram comFortran? Assembly movl $5, %eax movl $1, %edx .L4: imull %eax, %edx decl %eax testl %eax, $0 jg .L4 ESurgeLISP • 1958,Massachuse<sIns>tuteofTechnology • ProfessorJohnMcCarthy. • Umanotaçãosimples,baseadaemfunções matemáMcas. • Muitosparênteses, • Elistas… ExemplodeProgramaemLISP LISP (defun factorial (n) Recursão! (if (<= n 1) 1 (* n (factorial (- n 1))))) Equando,nosanos70, ossoviéMcosconseguiram asúlMmas500linhasdo sistemademísseis americanos… Fortran nfact=1 do i=1, n nfact = nfact*I enddo ALGOL–umMmedeestrelas • Precisava-sedeumpadrãopara algoritmos. • Umcomitêfoiformadoem1958. – JohnBackus – C.A.R.Hoare – JohnMcCarthy,etc • DestecomitênasceuALGOL58. • Talvezamaisinfluente linguagemdeprogramação. ALGOL–exemplo integerprocedureFactorial(m);integerm; Begin integerF; F:=ifm=1then1elsem*Factorial(m-1); Factorial:=F end; • Vocêsjáviramalgoparecidocomisto? ECOBOL • COBOLfoifeitaparanegócios: – Contadores,economistas,etc – Comodeveriaseruma linguagemassim? • 1958:COBOLfoicriadapor umcomitê. – Indústria,governoeacademia • Aindausadaemmuitas companhias,atéemBH! ExemplodeprogramasemCOBOL ADD YEARS TO AGE. MULTIPLY PRICE BY QUANTITY GIVING COST. SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST. • Quantaslinguagensdeprogramaçãoexistem? • Quaisaslinguagensmaispopulares? Quantassão? • AeditoraO’Reillydizque existem2.500linguagens deprogramação documentadas. • Awikipédiadocumenta 650. • Existemmuitas… • Mas,porquetantas? Propósitosdiferentes • Fortranserviaparacálculos cienyficos. • Lisperausadaemteoriada computação. • COBOLfoifeitaparaaplicações comerciais. • Algoléumalinguagem acadêmica. • Easoutraslinguagensque conhecemos? Quaissãoaslinguagenspop? • DadosreMradosde www.tiobe.com – Java:18.71% – C:16.89% – PHP:10.39% • Googlecode:C,Java,C++, PHP • Craigslist:PHP,C,SQL • Queoutrasmedidas? AlguémaífalaJavanês? • Deacordocommuitoscritérios,Javaéaa linguagemmaispopular. • ParaqueserveJava? • Comoestalinguagemsurgiu? • Oqueelatemdemais? Umexemplodejavanês: public class Fact { public static void main(String a[]) { int n = 5; int fact = 1; while (n > 1) { fact *= n; n--; } System.out.println(fact); } } éA,éB,éC… • Csurgiuem1972,efoi,durantemuitos anos,alinguagemdeprogramaçãomais popular. • PorqueCtemestenome? • OqueagentefazcomC? • PorqueCfoitãopopular? • QuaisosproblemascomC? • Ctevegrandeinfluência… FalandoemC… int main() { int n = 5; int fact = 1; while (n > 1) { fact *= n; n--; } printf("%d\n", fact); } • Alguémjáviuistoantes? Ctevegrandeinfluência… int n = 5; int fact = 1; while (n > 1) { fact *= n; n--; } int n = 5; int fact = 1; while (n > 1) { fact *= n; n--; } AInternetrespiraPHP • AlguémaquijáprogramouemPHP? • Oqueestenomequerdizer? • Comodeveserumalinguagempara desenvolvimentoweb? UmexemplodePHPês: $id = $_GET[”user”]; if ($id == '') { echo "Invalid user: $id" } else { $getuser = $DB->query (”SELECT * FROM 'table' WHERE id=’$id’”); echo $getuser; } • AlguémnotouumpouquinhodeCaí? • QualoMpodavariável$id? • Computadoresfalamzero-um-nês,nós falamoslinguagensdeprogramação…quem traduzestascoisas? • Ecomoestatraduçãoéfeita? Compiladoressãopontes • Oprimeirocompiladorfoi, provavelmente,oA-0de GraceHopper(1949). • Linguagensde programaçãodiferentes possuemdiferentes compiladores. • Masomesmocompilador tambémpodecompilar linguagensdiferentes. Anatomiadeumcompilador PowerPC Fortran COBOL Lisp … x86 Front End OMmizador Back End ARM … MáquinasVirtuais • Umamáquinavirtualéum hardwareimplementadoem soDware. • Porqueistoéinteressante? • Quelinguagensexecutam emmáquinasvirtuais? • Aindaénecessárioum tradutor? Àsvezes,tudoéinterpretado • Uminterpretadornãoproduzcódigodemáquina. Aocontrário,elelêocódigodoprogramafonte,e interpretacadacomandoencontrado. • Quaisasvantagensdeuminterpretador? • Quaislinguagenssão interpretadas? • Seráqueháalguma linguagemque necessariamentetenhade serinterpretada? • Essascoisassãoeficiente? Fazemosjust-in->me • Algumaslinguagenssãocompiladasenquanto estãosendointerpretadas. – JavaScript,porexemplo. • Edeondevemaeficiência? • Seráquedáparafazer melhorqueumcompilador tradicional? • Existeumalinguagemdeprogramação“mais poderosa”quetodasasoutras? • Seexiste,quelinguageméesta? • Mascomomedireste“poder”? FácilouDi[cil 1. Encontrearededeestradasmaiscurtaque ligatodasascidadesdeMinasGerais. 2. Encontreamenorrotapassandoportodasas cidades,semrepeMr. 3. DadoumprogramaPpara resolver(2),verifiquesea primeiracoisaqueP imprimeéNovaEra. Háquesermoshumildes • AmáquinadeTuringéummodelotéoricoque definetodososproblemasquesão computáveis. – Estado,fita,leitor,símbolos, instruções. • Senãohásolução naMáquinade Turing,entãonão temjeitomesmo... LinguagensTuring-Completas • SeumalinguageméequivalenteàMáquinade Turing,entãoelaéTuring-Completa. • QuasetodaLPéTuring-Completa. • Masexistemlinguagensquenãoosão.Algum exemplo? Brain-fuc* Umarranjomuitogrande,contendonúmeros. Oitocomandos: >moveumaposiçãoparadireita <moveumaposiçãoparaesquerda +somaumàposiçãocorrente(PC) -subtraiumdaPC .imprimeconteúdodaPC ,lêentradaearmazenanaPC [vaiparacomandoapós]sePCézero ]voltaparacomandoapós[sePCnãoézero. Oqueestesprogramasfazem? [-]ou[ > + < - ] • Essaslinguagenstodasqueagenteviu…Java, PHP,C,Fortran,COBOL,Algol,etc,etc…elas sãomuitoparecidas:variáveis,loops, comandos…Seráquenãoexistenenhum outroparadigmanão? LinguagensImperaMvaseDeclaraMvas • LinguagensimperaMvas: – Oprogramasãoinstruções. – Atribuições,loops,sequências. – Efeitoscolateraiseestado. • LinguagensdeclaraMvas: – Oprogramadescreveumaverdade. – Ausênciadeefeitoscolaterais. – Loopsviachamadadefunçõesrecursivas. SML • Oprogramaéumconjuntodefunções. – Programassãoprovasporindução. • Principaisestruturasdedadossãolistase tuplas. fun sum [] = 0 | sum (h::t) = h + sum t fun filter [] _ = [] | filter (h::t) f = if (f h) then h :: (filter f t) else (filter f t) SorMng fun leq a b = a <= b fun grt a b = a > b fun filter _ nil = nil | filter f (h::t) = if f h then h :: filter f t else filter f t fun qsort nil = nil | qsort (h::t) = (qsort (filter (grt h) t)) @ [h] @ (qsort (filter (leq h) t)) Prolog • Oprogramaéumconjuntoderestrições: – SeAéverdade,eA!Béverdade,entãoBé verdade. parent(kim, holly). parent(margaret, kim). parent(margaret, kent). parent(esther, margaret). parent(herbert, margaret). parent(herbert, jean). • Oqueproduzirá bisavo(X, Y)? bisavo(GGP, GGC) :parent(GGP, GP), parent(GP, P), parent(P, GGC). ancestor(X, Y) :- parent(X, Y). ancestor(X, Y) :- parent(Z, Y), ancestor(X, Z). UmproblemaNP-completo DadaumalistaLdenúmerosinteiros,existeuma sublistaScujasomasejaN? sum([],0). sum([Head|Tail],X) :sum(Tail,TailSum), X is Head + TailSum. subList([], []). subList([H|T], [H|R]) :- subList(T, R). subList([_|T], R) :- subList(T, R). intSum(L, N, S) :- subList(L, S), sumList(S, N). PorquesabermaissobreLPs? • Porqueelasestãoaí! • Algumasdisputassão fascinantes. • Ahistóriadelasé incrível. • Diferentesproblemas pedemdiferentes soluções.