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, 1905referencias, 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
2efectos 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 adecuadade 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,
66 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.