Lambda-dropping: transforming recursive equations into programs with blockstructure

Citation
O. Danvy et Up. Schultz, Lambda-dropping: transforming recursive equations into programs with blockstructure, THEOR COMP, 248(1-2), 2000, pp. 243-287
Citations number
47
Categorie Soggetti
Computer Science & Engineering
Journal title
THEORETICAL COMPUTER SCIENCE
ISSN journal
03043975 → ACNP
Volume
248
Issue
1-2
Year of publication
2000
Pages
243 - 287
Database
ISI
SICI code
0304-3975(20001006)248:1-2<243:LTREIP>2.0.ZU;2-H
Abstract
Lambda-lifting a block-structured program transforms it into a set of recur sive equations. We present the symmetric transformation: lambda-dropping. L ambda-dropping a set of recursive equations restores block structure and le xical scope. For lack of block structure and lexical scope, recursive equations must car ry around all the parameters that any of their callees might possibly need. Both lambda-lifting and lambda-dropping thus require one to compute Def/Us e paths: for lambda-lifting: each of the functions occurring in the path of a free v ariable is passed this variable as a parameter; for lambda-dropping: parameters which are used in the same scope as their d efinition do not need to be passed along in their path. A program whose blocks have no free variables is scope-insensitive. Its blo cks are then free to float (for lambda-lifting) or to sink (for lambda-drop ping) along the vertices of the scope tree. To summarize: [GRAPHICS] Our primary application is partial evaluation. Indeed, many partial evaluat ors for procedural programs operate on recursive equations. To this end, th ey lambda-lift source programs in a pre-processing phase. But often, partia l evaluators [automatically] produce residual recursive equations with doze ns of parameters, which most compilers do not handle efficiently. We solve this critical problem by lambda-dropping residual programs in a post-proces sing phase, which significantly improves both their compile time and their run time. To summarize: [GRAPHICS] Lambda-lifting has been presented as an intermediate transformation in comp ilers for functional languages. We study lambda-lifting and lambda-dropping per se, though lambda-dropping also has a use as an intermediate transform ation in a compiler: we noticed that lambda-dropping a program corresponds to transforming it into the functional representation of its optimal SSA fo rm. This observation actually led us to substantially improve our PEPM'97 p resentation of lambda-dropping. (C) 2000 Published by Elsevier Science B.V. All rights reserved.