You are on page 1of 7
Evaluacién Perezosa: Una Optimizacién para Lenguajes Estrictos* Juan Carlos Guzman Ascénder Suarez Universidad Simén Bolfvar = Depto. de Computacién, Valle de Sartenejas - Caracas 1080 Venezucla, ‘Email: {jeguaman ,suarez}@usb.ve Resumen Enoste trabajo se presenta una optimizacién en compilacién de Ienguajes que consiste en Ia introduccién de construcciones perezosas en un lenguaje estricto. La metodologfa utilizada es la de sistemas de tipos extendides y Tas condiciones de aplicabilidad de Ia optimizacién propuesta son cansocuecia de la combi- nacién de varios andlisis definides como sistemas de tipos extendides. ‘This paper presents a compile-time optimization based on the introduction of lazyness in astrict language. ‘The approach usod here is based on Extended Type Systems and the applicability of the optimization is the result of the combination of various types extensions which cooperate together. 1 Introduccién Las necesidades de control y verificacién del software crecen con la complejidad de la tarea a resolver. Esta necesidad surge tanto del propio programador, que quiere tener herramientas mAs idéneas para trabajar comectamente, como del propio cempilador o interpretador, el cual necesita verificar propiedades para decidir si estan dadas las condiciones para realizar cierta aptimizacién de abigo. De estas nevesidadles tnidas con la biisqueda de la expresividad, han surgido los lenguajes de pro- sgamacién. Con su ayuda se pueden desartollar sistemas cadla vez ms complejo, y con estos desarrolles, Ta necrsidad de controlar la calidad de estos. De todas las Verificaciones ques» pueden imaginar, el conocer el “tipo” de cada tna de las variables ‘que apareoen an el programa es Ja mds comunmente requerida, Esta verificacién sirve de gufa al pro- sgamador y de control para el compilarler. Divensas teorfas de tipos han sido desarolladas grandemente ‘para poder expresar con estas herramientass nociones cadla vez: més poderosas y mAs flexibles. Lanocién de tipos es un sitema formal de verificacién de programas donde se realiza una prueba de comeccién con respecto a las tipas de los objetes. El obtener tal prueba solamente indica que ls tipos son. compatibles. El no poder obiener la prueba establece que existe algyin error en el programa, El obtener ‘un tipaje correcto para el programa también indica una propiedad operacional sobre cada expresién: el conjunto de valores que éta puede tomar. Dependiendo del sistema, el tipaje puede ser dado por el programador y verificado per el andlisis, o puede ser reconstrufdo totalmente por el verificador, o puede haber algtin compromiso entre estes extremes. Existen muchas otras verificaciones que se pueden realizar sobre les programas. Por lo general étas sungen por propiedades que suponen posibles optimizaciones, o al menes, pura “curiosidad”. Tal es el caso de recursién de oola, cardcter estticto de funciones, control de variables globaks, aonteo de ‘Presentarde va 300 Conflrenca Latincameriaana de Tnformitica,Canela, Pe Brocil, 1905 referencias, ete, Las optimizaciones realizadas por los compiladores generalmente se realizan sin renditle cuentas al programador de donde se hicieron étas. En este caso, el programador sencillamente supone al optimizador como tna caja negra con la cual no hay’ ninefin tipo de interaccién. Inevitablemente, el usuario deja de interesaise por escribir programas optimizables, y, en toro cas, no puede saber ni cuando ni donde una optimizaciénse llevaa cabo. Por otto lado, el poder expresar estas otras propiedades, ‘operacionales como parte del tipo de les programas tiene como ventaja que el programador pueda verificar facilmente estas otras facetas Qperacionales sus programas. Més afin, en las sistemas de tipos que ast lo permitan, el usuario puede expresar restricciones en los tipos mediante el tipaje adecuado.. En la siguiente seccién se presenta una introduccién informal a la optimizacién propuesta. En la Scecién 2 introducimos el marao general de los sistemas de tipos extendides y en las Seecicnes 3, 4 y 5 presentamos las diferentes facetas del sistema de tipos extendidos que se necesitan para determinar la factibilidad de la optimizacién. Evaluacién Perezosa En Jos casos en que una expresién puremente funcional (no procuzca efectos de borde ni dependa de objp- ‘tos suceptibles a ser motificades) sea evaluada varias veces, ésta pudiera ser evalua solamente una vez ¥ ‘todas las dems evaluaciones reemplazadas por la recuperacién del valor ya calculado. Esta optimizacién se conoce como evaluacién perezasa y es de particular importancia en la implementacién de lenguajes funcionales con orden de evaluacién normal, En este artfculo proponemos levar esta optimizacién a Jenguajes con orden de evaluacién aplicativo. Sea la fimeién map (escrita en ML [1]): Iet ree map = fim f — (fm O — 0 | (x21) = Cf x)::C(mep 2) D) En Ja Hamada fun x 1—map (fun y—(fact x)) 1, la expresion (fact x) es una constante dentro de Ia abstraccién interna (fim y—(fact x)) y por lo tanto pudiera calculamse una sola vez s1 valor, para luego aplicarlo todas las veces que sea necasario. Cabe destacar sin embargo, que una transformacién que carsiste en dedarar la expresién en un ambiente exterior (con un “Iet”) no produce en general tn programa equivalente, dado que la expresién poxlrfa evaluarse innecesariamente y peor atin, pocra comprometer la terminacién del programa, Para obtener un comportamiento similar al del et”, sin afectar el orden de evaluacién de las expesianes, se puede recuperar el valor de la expresién ¢ auyo resultado se desea compartir en una estructura de dates que pueda mantener el estado de evaluacién, de la expresién, En caso de ya haber sido evaluada, esta estructura debe mantener también el valce resultante de Ia evaluacién. La creacién de esta estructura puede hacerse en la expresién mas grande que contenga ¢ para la cual ninguna variable libre en € haya sido ligada. En general, la expresion de la forma: fm v—(...c...) donde ves libre en ey toda variable libre en e también lo es en (...€...) se optimiza como fim v—allocate in (...(¢—e)) donde ¢ es una variable de asignacién tinica y (t —¢) es la correspondiente operacién de asignacién: la primera vez que la expresién es evaluada, se evalfia ¢ y se Ie asigna a t. Todas las veers subsiguientes, el valor de ¢ es simplemente recuperado. La expresién anteriormente propuesta puede ser transformada como fim x — allocate t in fun 1 — map (fan y — t—(Zact x)) 1 Elresultado de esta transformacién es que la expresién (fact x) se evabia una sla vez en la abstraccién, map (fim y — (fact x)) 1 Esta optimizacién alo se puede realizar en el caso que € no contenga (1) operaciones de en trada/salida, (2) efectes de borde, y (8) referencias a variables mulables. Cada uno de estes requeri« mientos se verifica a través de un sistema de tipos extendido [8, 9]. In este artfculo presentamos varias aplicaciones de los sistemas de tipes extendides. Se muestra asf como propiedades operacionales que pparecen tan distintas pueden ser tratadas bajo el mismo enfoquue y obtener resultades satisfactorios. Otros Trabajos El uso de sistemas de tipes para calcular otras propiedades operacionales ha sido utilizado por Gifford, Lucassen y Juvelot en los sistemas de efectos, utilizados primordialmente para calcular propiedades de 2 efectos de borde [13, 3, 1g). Kuo y Mishra utilizaron una extensién de los tipes mAs una témica conocida como sublipaje para realizar andlisis del caracter estricto de fimciones [Ll]. El trabajo de Guzman y Hudak en Singles Threaded Polymorphic Lambda Calculus (6, 5, 4] y anélisis de la durecién de vida de estructuras de dates [7], asf como los trabajos de Guzmén y Sudrez en andlisis del caracter estricto de funciones [9] ¥ andlisis de compertamiento excepcional [8] también se basan en célculo de extensiones de tips. 2 Metodologfa En les sistemas de tipes extendides, la estructura de los tipas se utiliza como vehiculo para la el edleulo de propiedades operacicnales de los objetos asociadas. Por ejemplo, tomemes las finciones uno=Are/x : Int Int cuadrado=Arx%x : Int > Int Ambas funciones operan sobre un entero y producen camo resultado otro entero, hecho que esté diectae mente reflejado en su tipo. Sin embargo, cuadrado calcula al cuadrado de cualquiera que sea su argumento mientras que uno deja de producir resultado si ¢s aplicado al néimero 0, En ese caso, uno produce una excepcién en vez, ‘También podemes indicar que ambas funciones son estrictas, y que ninguna de ellas utiliza ninguna Variable global. Estas aserciones, entre otras, noson indicadas por el tipo de las funciones, eto pueden ser expresadas mediante una extensién al concepto de tipes. La expesicién de este articulo se basa en un lenguaje fimcional genérico (Definicién 1) para el que dames la extensién a su sistema de tipos de Hindley-Milner. Esta extensién consiste en agregar una, anotacién que indica la manipulacién del objeto que correspond al tipo. En el caso del comportamiento excepcional de programas, la anotacién comesponde con el conjunto de excepciones pesibles que pueden cocurtir al evaluar el objeto, De esta forma, ls tipos extendidas de uno y cuadrado son uno : (Int = Int)” y cuadrado : (Int — Int)? les cuales indican que uno puede fallar por la divisién, mientras que cuadrado minca falla. La anotacién al tipo se denomina uso abstracto e indica una propiedad operacional satisfecha por elabjeto comespondiente. En todo momentose asume que el conjunto de usos abstractos es un reticulado completo (un reticulado dande cada par de elementos tiene un supremo y un fnfimo). Expresiones En este artfculo usaremos una versién de A-célculo con constantes. Solamente se introclucirén las cons ‘mucciones que sean absolutamente necesarias. En particular, nuestro lenguaje genérico tiene variables, constantes, abstracciones, aplicaciones, el operador de punto fijo, operacién de entrada /salida (s6lo salida) y asignacién, Su sintaxis se especifica a continuacién: Definition 1 (El Jenguaje) Sea Vn conjunto de identificadores para ser usados como nombres de variables y Cun conjunto de constantes con ements tfpieas ¢ y v respectivamente. Se define el conjunto E de expresiones del lenznaje como: c€F z= vel we la e| fix v=c|writec|v Tipos Extendidos Elsistema de tipes usado en este articulo esta basado en dl sistema de tipos de Hindley-Milner. Les tipos pueden ser constructores (c) 0 variables (a), Fl constructor de tipas fimcionales se mantiene ocmo un caso particular dada la televancia que éste tiene en el sistema de tipas. Su sintaxis es como sigue: Definition 2 (Tipos) Sean TC um onjunto de constantes y TV un conjunto de identificadores con elementos tipicas ¢ y a respectivamente. Se define el conjunto T' de expresicnes de tipo como: PET == cla] (Piy-+-5pn)e [pi > p2) EL enguaje de tipos debe ser extencido con anotaciones que mantengan informacién sobre las propiedades coperacionales de las expresiones. Las anotaciones son propesiciones satisféechas por los objetos que tengan, el tipo asf anotado, Estas propiedades se denominan uses abstractos, o simplemente usos. Definition 3 (Usos Abstractos) Sea Dun reticulado completo con supremo-h minimo elemento Ly elemento tipico d, y UV im conjunto de variables de uso can elemento tipico - Llamamesel uso de una expresién al conjunto [/ de términes de la forma: w€U == d |x |u-tur Les lipos extendidos sen precisamente tipes con anotaciones para uscs abstractes. Su definicién formal es como sigue: Definition 4 (Tipos Extendidas) Se define el conjunto XT de expresiones de tipas extendides como: GTEXT = ca" |(n,...me" | (Mn) Segin esta definicién, los tipos extendides se comportan como vehfeules para expresar otra informacién respecto al programa, F] tipo (¢ — 7)" se lee como “una funcién de ¢ hacia T permitiendo u.” Se escribe =r cuando el ts0 abstracto del tipo ¢s una variable que no aparece en d texto de ninguna otra forma. La sastitucién de tipas puede afectar tanto a variables de tipo como a variables de uo. La unificacién cn los tips es la unificacién usual extendida para atacar unificaciones en uscs mediante la operacién (+) definida anteriormente. Sistema de Tipos Extendidos En esta seccién presentamos una modificacién al sistema de tipos de Hindley-Milner que permiteel célculo de uses abstractos genérices. El dominiode sos debe ser un conjunto de ebjetes atémicos (sin estructura separable). Las operaciones elementales que se definan sobre este caminio deben ser monoténicas. Las reglas del sistema de tipos aparecen en la figura 1 y son muy parecidas a las correspondientes para el sistema de Hindley-Milner. De hecho, la extensién a cada regla consiste en el cflculo del uso alstracto del tipo rsultante basado en los usos que aparecen en las premisas. Para cada regla I hemes resumido ese cilculo como una funcién Fg que calcula el uso resultante a partir de los uscs exteriores de cada tipo constituyente, excepto en F app donde consideramas conveniente tambien involucrar las anotaciones del argumento y cuerpo de la fancién en dicho cAleulo, De esta manera, variando las finciones, Fr obtendremes diverses sistemas de tipos extendides. En la seccién siguiente veremos varios ejemples de tipos extendidos presentados mediante la instanciacién apropiada de estas fumciones. —_PsperinlY _yritey «- PepasintY Paperinl® (Agig) T= write e : int? wnte Tapa: intFawgue —Pez:o (van Beira?! (ats) Porg@erel Tree nym Tra: Deez? (ap) r+t ow) Tha eitamuv) Trix f PhO: bool” Prer:o% Phe Th if 6 then ey else ey : 0 Foon WV Figure 1: Sistema de Tipas con Usos Abstractos Por razones de simplicidad, hemes decidido exclufr la introeluecién del polimorfismoque nes provee Ia cerstruceién “let”. Sin embargo, esta regia no representa ningyin problema al sistema, Cada sistema de tipos extendidos debe ser verificado parasaber sise tiene la propiedad del “tipo principal”. Esta propiedad indica que sia una expresién se Ie puede otorgar un tipo mediante el sistema, entonces el sistema puede otorgarle un tipo principal del que todos los demas pueden ser calculadcs mediante instanciacién. Un sistema de tipas se considera generalmente sin valor si no se le puede conseguir una definicién adecuada de principalidad, La exigencia de que las funciones Fie sean monoténicas es una condicién necesaria para ogtar este objetivo, 3 Anilisis de Expresiones Independientes Una expresién ¢ s independiente de una variable x cuando no existen en ¢ ocurrencias libres de 2. Para calcular la independencia de las expresiones se puede usar una extension de la notacién de de Bruijn [2] para las expresiones del cdleulo. Notacién de de Bruijn En esta notacién, las variables son representadas por entercs que indican la distancia en nfimero de abstracciones entre el uso de la variable y su definiciSn, Por ejemplo, la expresién (Af.\r(f (fx) 8¢ representa con esta notacién como (\A1(12)). Aunque poco legible, esta notacién tiene un interes préctico dado que Ta representacién de las variables se puede ver ccmo su algoritimo de acceso. Teezint® _— (yrite) Poaiint! Poerin® (iy) T => write e : int® Dsere:intt {ersticiseesnroiezo! (Var) Meso}het (Abs) Trane i(e > neler) Thai@—7! These PHlfso}berot Prar@s7t Phere Qy) _tilfalhedt ay Tra ain Tifix fae:oh@nes [hb:bool” Prey:o% Pherzo® (Cond) Tif} then e; else e204 Figure 2: Sistema “Dep” de dependencias de expresiones El sistema de tipes extendido “Dep” que se presenta en la figura 2, se inspira en la notacién de de [Bruijn para decorar los tipos de las expresiones con informacién sobre la dependencia de sus variables. Porejemplo, al programa Az y.((\ze) (Aza) le comesponde la derivacién de la figura 3. Figure 3: Una derivacién aon el sistema “Dep” En esta derivacién, el tipo de cada subexpresién recuenta las variables que pueden ser usadas durante su evaluacién. Se puede demestrar que sia partir de un ambiente T' se deriva utilzando las reglas del sistema “Dep? que la expresion ¢ tiene el tipo r{U entonces la #¢sima variable del ambiente T tiene una ocurrencia libre en e. 4 Anilisis de Efectos de Borde Les sistemas de tipas extendides permiten también hacer Ia deteccién de expresiones que no dependan nj contengan efectos de borde, Llamaremes a éstas las expresiones puras. Un ccmpilador que detecte expresiones puras ¢ independientes podrfa armglirselas para evaluar éstas una sola vez y guardar su resultado para un uso posterior. Tsezint! (rite) P= write ¢: int P+ {f:o%} he zo" ae any Tee a (ix) They ey ae Tr fix os) Thb:bool! Theo” Dre:ov Tif then ey else e220) (Cond) Figure 4: Sistema “SE” de Expresiones Puras Elsistema “SE de la figura 4 extiende los tipas de los programas.con informacién sobre los posibles efectos de borde de las expresiones, Alf se marca toda expresién. que pueda evaluar subexpresiones con. efectos de borde como impura por escritura y se nota con el uso WY. Este sistema es muy similar al sistema extendido presentado por los autores en [S] para el tratamiento de excepciones. En ese articulo se denmestra en particular que las informaciones obtenidas son vélidas atin para dl caso de funciones de orden superior. Otros efectos de borde que se pueden considerar son las asignaciones y el uso de valores ‘modificables. En [12], Leroy y Weis presentan un método de andlisis para este tipo de efectos. He andlisis podrfa ser reformulado como un sistema de tipas extendidos. Si.se puede derivar que una expresion ¢ tiene un tipo de la forma 7 entonces durante la evaluacién de € no interviene ningtin efecto de barde. Note que una subexpresién con un tipo sin efectos de borde puede ser evaluada una sola vez y su resultado puede ser utilizado en repetidas ocasiones, en vez de ser evaluada cada vez que se requiera su valor. 5 Introduccién de Construcciones Perezosas Para realizar Ia optimizacién propuesta se extiende la representacién intema del lenguaje con una opera cién primitiva “freeze:a — a” cuyo tinico efecto es el de congelar el aédigo de la expresin hasta s primer uso, momento en el cual el céxigo es evaluaclo completamente produciendo un resultado que reemplaza el valor de la variable. Les uses subsiguientes de Ia Variable tendran accesp al resultado y no tendran que evaluar de nuevo el cédigo asociado a la expresién. Es importante notar que esta optimizacién s5lo se aplica cuando Ia expresién desplazadla es pura, dado que en otros cases se podria cbservar una diferencia en el comportamiento del programa; En consecuencia, esta transfomacién es tnicamente aplicable a los programas pures. Per otra parte, silo al extraer el cédligo fuera de las abstracciones se logra compartir el resultado con otras eventuales aplicaciones de la misma funcién; De aqut la utilidad del andlisis de de independencia de las expresiones. Cabe destacar que la operacién “freeze,” introducida es la misma que se utiliza para implementar la pereza en los lenguajs con evaluacién perezcsa. Con una implementacién cuidadosa de “freeze”, se puede puede incluir en este tratamiento el caso de optimizacién perezosa en. presencia de excepciones, pues basta guardar como resultado de la evaluacién de una expresién congelada, Ta eventual excepeién que se pueda producir en su evaluacién, 6 6 Conclusiones En este artfoulo se presenté una aplicacién de los tipos extendidos a la compilacién, La informacién calculada también puede ser de importancia para el usuario, bien sea para restructurar su programa, 0 para indicarle al compilador selectivamente cuales optimizaciones él preferifa no hacer. En este contexto, es importante conocer exclusivamente donde se genera la Variable de asignacién nica para toda expresiGn «que sea optimizada, Esa infommacién puede danse como anotacién de cada expresiGn optimizada: let rec map = fun tO > O11 Ges) > Cf x)=: (up 1)? 1) in fim x1— map (fm y — (fact )°) 1 En Jo que respecta a la optimizadén, éta incurre en un costo de tiempo y espacio por la creaciéin de la variable de asgnacin tina. El ccmpilador puede decidir, dependiendo de factores tales como el tamaiio de ln expresifn si amerita realizar tal optimizacién, Otros uss de les sistemas de tipos extendides pueden ser las aplicaciones en compilacién de interfaces, ayuda en documentacién y eliminacién de errores. 1a informacién neocsaria para la optimizacién fue obtenida modulamnente mediante diversas ex ‘ensiones al ssterna de tipes. Dado que el producto cartesiano de extensiones de tipes ¢s una extersin, resulta sencillo atacar problemas complejos de esta manera. References [i] M. Aponte, A. Laville, M, Mamny, A. Suérez, and P, Weis, ‘The CAML reference manual. ‘Technical Report 121, INRIA, Domaine de Volocat, Rooquencourt, France, 1990, 12 N.G. de Brujin, Lambde-caleus notation with namekss dummies a tod for automatic formula manipula- tion. frag Math, 34:381-392, 1972. (3] D.K. Gifford and JeM, Lucassen, Integrating, functional and imperative programming, In Proceadlings of the 13" ACM Synposiuin on Principles of Programming Languages. ACM, 1986. [4] J.C. Guzmdn, Extended typesystems: A denotational metodology for computation of operational properties. Jin Proceedings ofthe XIX Latin American Jnformatics Conference, 198. [5] J.C. Guzmén, On Expressing the Mutation of State én a Functional Progrumening Language. Pid thesis, ‘Yale University, May 1993, [o] J.C. Guzman and P, Hudak, Singlethreaded polymorphic Lambda calculus In Prowedings of the Fifth Annual IEEE Symposium on Logic in Computer Sciences IEEE, 1900. [7] J.C. Guzman and P. Hudak. Liveness analysis via typeinference. In Proceedings of the XVII Latin Ameria “Informatics Conference, 191. [8] J.C, Guaman and A. Sudrez An extended type sgstem for exceptions, In Record of the 5 ACM SIGPLAN uworkshop on ML and ts Applications Orlando, USA, June 1994, Published by INRIA, Rapport de Recherche No 2265, BP 105 ~ 78158 Le Chesnay Cadex, France. [9] J.C. Guamdn and A. Suérez, Viewing type systems as information cartiens In Prooedings of the 108 Workshop on the Mathematical Foundations of Programming Semantics, Kansas, USA, 3 1994, [io] P, Juvelbt and K.G. Gifford, Communication effects for message-based concurrency. ‘Technical Report LCS, "TME396, MIT, February 1989, [1] T.M. Kuo and P, Mishra, Strictness analysis A new perspective based on type inference, Technical Report 89/13, The State University of New Tork at Stony Brook, 1989. [12] X. Leroy and P. Weis, Pelymomphic type inference and assignment. In Procendings of the 18" ACM Siympo ‘ium on Principles of Programming Languages; pages 2-302. ACM, 1991. [13] JM, Lucssen and DAK. Giffonl. Polymomphic effect systems, In Prowedings of the 15" ACM Symposium on Principles of Programming Languages. ACM, 1988.

You might also like