clase1

25
1 Compilación de Lenguajes Funcionales Perezosos Gustavo Betarte

description

Compilacion de lenguajes

Transcript of clase1

1Compilacin de Lenguajes Funcionales PerezososGustavo Betarte2Contenido del curso Introduccin: LF puros y perezosos Programacin mon!dica Parsing: Com"inadores de parsing La mnada Parser Chequeo de tipos: #indley$%ilner &lgoritmo de in'erencia Reduccin de grafos: (valuacinperezosa de e)presiones 'uncionales (studio de un int*rprete Compilacin de pattern-matching y lambda lifting. La mquina G: %!+uina a"stracta y su modelo computacional Compilacin y ejecucin de supercom"inadores (s+uemas de compilacin Las mquinas I! y "pineless agless G Recoleccin de residuos #garbage collectors$.,(volucin de Lenguajes de Programacin Funcionales C!lculo Lam"da Lenguajes de programacin: Lisp- .s/im- %L- #as0ell Caracter1sticas principales de LPF: Funciones de alto orden (valuacin perezosa &"straccin de datos (cuaciones y pattern$matc2ing3C!lculo Lam"da4n c!lculo +ue captura el aspecto computacional de la nocin de funcin5C2urc2 617,2$17,,- 17389:Los lenguajes 'uncionales modernos pueden ser entendidos como un em"ellecimiento sint!ctico de .%ef & xpresiones de (puro y no tipado)e :; )< =)e < e> e>>%ef '. Variables libresF?5): ; @)A-F?5e> e>>: ; F?5e>: 4 F?5e>>:- F?5=)e: ; F?5e: $ @)A%ef (. Variables ligadasB?5): ; @A-B?5e> e>>: ; B?5e>: 4 B?5e>>:- B?5=)e: ; @)A 4 B?5e:BC!lculo Lam"da 52:%ef. )Sustitucin )6z :; e9 ; esi ) z; ) si ) z5e> e>>:6z :; e9 ; 5e> 6z :; e9: 5e>>6z :; e9: 5=)e1:6) :; e9 ; =)e15=)e1:6z :; e9 ; =)e16z :; e9si ) z y) e ; =y55e16) :; y9: 6z :; e9: si ) z -) F?5e:ey F?5e1 e:%ef. *Reducciones Beta y Eta5=)e1: e2 e16) :; e19 5)(=)e ): e si ) F?5e: 5)%ef. +Cual+uier e)presin de la 'orma 5=)e1: e2es llamado un -redexCC!lculo Lam"da 5,:%ef. ,e1 e2 signi'ica +ue e2 puede ser o"tenido a partir de e1 medianteuna secuencia 'inita 5posi"lemente vac1a: de pasos de reduccin usando (clausura re'le)o$transitiva:%ef. - La e)presin e est! en 'orma normal 5respecto a )si e e> implica +ue e ; e>%ef. . De dice +ue es con'luente 5o es C2urc2$Eosser: si:para todo e- e1- e2 tal +ue e e1y e e2 entonces e)iste e, tal +ue e1 e,y e2 e, (n particular- es con'luente.eorema Di es con'luente entonces para toda e)presin e su 'orma normal- si e)iste- es FnicaGC!lculo Lam"da 53:(strategias de reduccinEeglas de computacin para seleccionar pasos de reduccin Leftmost-Outermost 5Hormal order:: (l rede) seleccionado en cada paso de reduccin es a+uel +ue comienza m!s a la iz+uierda en la e)presin 5argumento no necesariamente en 'orma normal:Leftmost-nnermost 5&pplicative order:: (l rede) seleccionado en cada paso de reduccin es a+uel +ue termina m!s a la iz+uierda en la e)presin 5la a"straccin y argumento ya estar!n en 'orma normal cuando se selecciona el rede):!all-by-"ame:LI pero no se reduce en el cuerpo de una a"straccin!all-by-Value:L. pero no se reduce en el cuerpo de una a"straccinJC!lculo Lam"da 5B:#eorema del punto fi$oKoda e)presin lam"da e tiene un punto 'ijo e> tal +ue 5e e>: ; e>/ ; ='5=)' 5) ):: 5=)' 5) )::5parado)ical com"inator:5L e: ; e 5L e:Koda 'uncin recursiva puede ser escrita sin usar recursin:'ac ; L 5='ac=ni' 5n ; 8: t2en 1 else 5n M 5'ac 5n $ 1:::#esis de !%urc%Las 'unciones de H en H e'ectivamente computa"les son a+uellas de'ini"les en el c!lculo lam"daNleene617,C9: $de'ini"ilidad e+uivalente a recursividad 5GOdel y #er"rand:Kuring617,G9: Kuring$computa"ilidad e+uivalente a $de'ini"ilidad7L.DP4n lenguaje alge"raico para el procesamiento de listas%cCart2y617C8- 17C,9Contri"uciones: La e)presin condicional y su uso en recursin (l uso de listas y 'unciones de alto orden so"re ellas (l uso de gar"age collecting (l uso de S-expressions para representar programas y datos&18C!lculo Lam"da con constantesKrue ; =)=y)False ; =)=yycond ; =p=c=ap c a5cond p c a ; i' p t2en c else a:5; n n:;P Krue5; n m: ;P FalseQue pasa con R- M- 8- 1S&lternativas: Codi'icacin en Hociones primitivas: sem!ntica usando $reduccin e :; ) < c < e1 e2 < =)e.' Krue e1 e2 ;P e1.' False e1 e2 ;P e2e)tensin conservativa: e1 e2 en entonces e1 e2 en 11.s/im%ecanizacin de evaluacin de e)presiones usando una m!+uina a"stracta5D(CT- P Landin617C39: Du"set de &LGIL C8 de'inido en ..nnovacionesSint'cticas Hotacin in'ija ()presiones let y /2ere: de'iniciones mutuas y recursivas 4so de layoutSem'nticas (n'asis en generalidad: lenguaje rico sint!cticamente en 'uncin de un lenguaje pe+ueUo y muy e)presivo (n'asis en razonamiento ecuacional D(CT como simple m!+uina a"stracta en la cual se ejecutan e)presiones 'uncionales12.s/im52: e)tendido con constantes y e)presiones let y /2ere e :;< e /2ere d1dn < let d1dn in ed :; ) ; e < ) )1)n ; e let d1dn in e ;P e /2ere d1dn ) )1)n ; e ;P ) ; =)1=)2 =)ne e /2ere )1 ; e1 ;P 5=)1e: 5L =)1e1: e /2ere 5)1 ; e1: 5)2 ; e2:5)n ; en: ;P 5=)1e: 5L =)1e1:/2ere )2 ; 5=)1e2: 5L =)1e1: )n ; 5=)1en: 5L =)1e1:Landin y LF modernos: +u* es el resultado en contraposicin a cmo se calcula estilo declarativo de programacin es mejor +ue el imperativo1,Caracter1sticas principales de lenguajes 'uncionales modernos Funciones de alto orden (valuacin perezosa (cuaciones y pattern$matc2ing &"straccin de datos13Funciones de alto ordenFunciones son consideradas V'irst$class valuesV: a"straccin so"re un mecanismo de a"straccinadd2 = twice succ add2 = twice (\x -> x + 1)where twice = f . f where twice = f . f succ x = x + 1 &lto orden como un mecanismo de modularizacin 5#ug2es617J39:sum [] = 0 prod [] = 1sum (x:xs) = add x (sum xs)prod(x:xs) = mu x (prod xs)a"straccin: add!mu como '-0!1 como init-sum!prod como 'old ' init- donde(fod f i"it) [] = i"it(fod fi"it) (x:xs) = f x ((fod f i"it) xs) sum = fod add 0prod = fod mu 11B(valuacin perezosa Eeglas de reduccin con orden normal son las m!s seguras- en el sentido de +ue garantizan la produccin de 'orma normal 5si e)iste: Permite emular recursin usando L .mplementacin ingenua puede ser muy ine'iciente5=) 5R ) ):: 5M B 3: ;P 5R 5M B 3: 5M B 3:: ;P 5R 28 5M B 3:: ;P 5R 28 28: ;P 38La e)presin5M B 3: es calculada tantas veces como ocurrencias de )Call-by- 0alue: 5=) 5R ) ):: 5M B 3: ;P 5=) 5R ) ):: 28:;P 5R 28 28: ;P 38(l argumento es evaluado antes +ue la $reduccin se e'ectFe(es)enta$as: Puede evaluar innecesariamente 5(j 5=)=y): B 55=)) ): 5=)) )::: ()ige reduccin especial para implementar recursin Lisp- #ope- %L aprovec2an tecnolog1a en compiladore para leng imperativos1C(valuacin perezosa 52:Cu!l es el verdadero pro"lemaSEeduccin en es orientada a strings- entonces naturalmente imposi"ilita una nocin de s%aring&&lternativa: reduccin de gra'os 5Wads/ort2- P2T tesis 617G19:5=)5R ) ):: 5M B 3: ;P 5R : ;P 5R : ;P38

5M B 3: 28E)aluacin pere*osa (call-by-need) :Irden normal de reduccin R s2aring&rgumentos de 'unciones son evaluados a lo sumo una vez1G(valuacin Perezosa 5,:Por +u* evaluacin perezosaS Li"era al programador de pro"lemas concernientes al orden de evaluacin Provee la posi"ilidad de computar usando estructuras de datos in'initas 5Kurner617J1-17J29- #ug2es617J39: Deparacin de datos del control"ats = 0 : map succ "atsfiter p [] = []fiter p (x:xs) = if (p x) the" (x:rest) ese fiter p xsfiter p "ats puede ser escrito sa"iendo +ue el grado de computacin de la lista ser! determinado por el conte)to &l no tener control operacional puede ser compuesta con otras 'unciones modularmente1J&"straccin de datosKipos alge"raicos de datos 5o concretos:data #ist a = $i%&o"s a (#ist a)data 'ree ( = )mpt* %$ode ( (#ist ('ree ())#ist+ 'ree:constructores de tipos 5 #ist :: '*pe -> '*pe:$i+ &o"s+ )mpt*+ $ode: constructores de datos 5o simplemente constructores:&"reviacin 5sinnimos:t*pe ,"tree='ree ,"tt*pe -atte"er=,"tree->[,"t]17&"straccin de datos52:Kipos a"stractos de datosEn +L:a(st*pe .ueue a= . [a] where first (. as) = ast asisempt* (. []) = 'rueisempt* (. as) = -ase

'irst- isempty-son visi"les en el scope de la declaracin de Queue- pero el constructor Qy su tipo no lo sonEn ,as-ell:modue .ueue (.ueue+ first+ isempt*) wheredata .ueue a= . [a]first (. as) = ast asisempt* (. []) = 'rueisempt* (. as) = -ase

28(cuaciones y pattern$matc2ing 4so de razonamiento ecuacional en el diseUo y construccin de programas La ausencia de e'ectos laterales permite el uso de r e Dinta)is tam"i*n puede ayudar: escri"ir la de'inicin de una 'uncin como una secuencia de ecuaciones21Pattern$matc2ingcase e ofpat1 => e1pat2 => e2si la estructura de econcuerda con pati entonces evaluar ei ...pat" => e" fpat1 = e1f=\x. case x of

fpat2 = e2===>pat1 => e1 ......fpat" = e"pat"=> e"22Pattern$matc2ing 52:E$emplos:1:fac 0= 1 2) fac 0 = 1fac " = " / fac (" - 1)fac " % ">0 = " / fac ("-1) ,:e"0th []=0e"0th (x:xs)=1 + e"0th xs3: data 'ree a=#eaf a %1ra"ch ('ree a) ('ree a)fri"0e (#eaf x) =[x]fri"0e (1ra"ch eft ri0ht)=fri"0e eft ++ fri"0e ri0ht2,Pattern$matc2ing 5,:Linealidad de par!metros 'ormalesmem(er x []=-asemem(er x (x:xs)='ruemem(er x (*:xs)=mem(er x xsPro"lemas:ae2 [x+x+x]='rueae2*=-aseae2 [1+2+(ot] S (valuacin de parametros de iz+uierda a derec2a ;;P False (n el caso derec2a a iz+uierda ;P el programa diverge(n #as0ell: Ho se permiten par!metros repetidos: Ecuaciones lineales23Pattern$matc2ing 53:Cone)in de ecuacionesfac0= 1 top$to$"ottom 5#as0ell- %L- etc:fac"=" / fac ("-1)Cmo garantizar +ue las ecuaciones son disjuntasS +oti)acin: el orden se vuelve irrelevante y se puede razonar so"re la aplicacin de una ecuacin independientemente del resto Para ecuaciones sin guardas la propiedad de ser disjuntas se puede veri'icar est!ticamente Pero- ecuaciones con guardas tornan el pro"lema indecidible 5e+uivale a determinar la igualdad de dos predicados recursivos:2BPattern$matc2ing 5B:Irden de evaluacin de argumentosf 1 1 = 1 0 1 1= 1 f 2 (ot3f 2 x = 2 0 x 2= 2 0 (ot 23Puede un compilador determinar siempre en +u* orden evaluar argumentosS(jemplo 5Berry617GJ9:f 0 1 x=1f 1 x 0=2 Tisjuntas- perof x 0 1=4f 0 1 (ot (= 13) f 1 (ot 0 (= 23)f(ot 0 1 (= 43)(n #as0ell: evaluacin de iz+uierda a derec2a