Lambda-Dropping: Transforming Recursive Equations into Programs with Block Structure
DOI:
https://doi.org/10.7146/brics.v4i6.18785Resumé
Lambda-lifting a functional program transforms it into a set of recursive
equations. We present the symmetric transformation: lambda-dropping.
Lambda-dropping a set of recursive equations restores block
structure and lexical scope.
For lack of scope, recursive equations must carry around all the
parameters that any of their callees might possibly need. Both lambda-lifting
and lambda-dropping thus require one to compute a transitive
closure over the call graph:
- for lambda-lifting: to establish the Def/Use path of each free
variable (these free variables are then added as parameters to
each of the functions in the call path);
- for lambda-dropping: to establish the Def/Use path of each parameter
(parameters whose use occurs in the same scope as their
definition do not need to be passed along in the call path).
Without free variables, a program is scope-insensitive. Its blocks are
then free to float (for lambda-lifting) or to sink (for lambda-dropping)
along the vertices of the scope tree.
We believe lambda-lifting and lambda-dropping are interesting per
se, both in principle and in practice, but our prime application is partial
evaluation: except for Malmkjær and Ørbæk's case study presented at
PEPM'95, most polyvariant specializers for procedural programs operate
on recursive equations. To this end, in a pre-processing phase,
they lambda-lift source programs into recursive equations. As a result,
residual programs are also expressed as recursive equations, often with
dozens of parameters, which most compilers do not handle efficiently.
Lambda-dropping in a post-processing phase restores their block structure
and lexical scope thereby significantly reducing both the compile
time and the run time of residual programs.
Downloads
Publiceret
Citation/Eksport
Nummer
Sektion
Licens
Authors who publish with this journal agree to the following terms:- Authors retain copyright and grant the journal right of first publication with the work simultaneously licensed under a Creative Commons Attribution License that allows others to share the work with an acknowledgement of the work's authorship and initial publication in this journal.
- Authors are able to enter into separate, additional contractual arrangements for the non-exclusive distribution of the journal's published version of the work (e.g., post it to an institutional repository or publish it in a book), with an acknowledgement of its initial publication in this journal.
- Authors are permitted and encouraged to post their work online (e.g., in institutional repositories or on their website) prior to and during the submission process, as it can lead to productive exchanges, as well as earlier and greater citation of published work (See The Effect of Open Access).