We consider the problem of lightweight closure conversion, in which multiple procedure call protocols may coexist in the same code. A lightweight closure omits bindings for some of the free variables of the procedure that it represents. Flow analysis is used to match the protocol expected by each procedure and the protocol used at its possible call sites. We formulate the flow analysis as a deductive system that generates a labeled transition system and a set of constraints. We show that any solution to the constraints justifies the resulting transformation. Some of the techniques used are similar to those of abstract interpretation, but others appear to be novel.
|
2762
|
Communication and Concurrency
– Milner
- 1989
|
|
1266
|
Abstract interpretation : a unified lattice model for the static analysis of programs by construction or approximation of fixpoints
– Cousot, Cousot
- 1977
|
|
952
|
An axiomatic basis for computer programming
– Hoare
- 1969
|
|
588
|
Compiling with Continuations
– Appel
- 1992
|
|
402
|
Assigning meanings to programs
– Floyd
- 1967
|
|
257
|
The mechanical evaluation of expressions
– Landin
- 1964
|
|
251
|
Call-by-name, call-by-value and the *-calculus
– Plotkin
- 1975
|
|
231
|
Control-Flow Analysis of Higher-Order Languages or Taming Lambda
– Shivers
- 1991
|
|
226
|
A unified approach to global program optimization
– Kildall
- 1973
|
|
205
|
Orbit: An optimizing compiler for Scheme
– Kranz, Kelsey, et al.
- 1986
|
|
159
|
ObjectOriented Type Systems
– Palsberg, Schwartzbach
- 1994
|
|
138
|
Typed closure conversion
– Minimide, Morrisett, et al.
- 1996
|
|
129
|
RABBIT: A compiler for SCHEME
– Steele
- 1978
|
|
112
|
closure-passing style
– Appel, Jim, et al.
- 1989
|
|
97
|
Set Based Program Analysis
– Heintze
- 1992
|
|
97
|
A flexible approach to interprocedural data flow analysis and programs with recursive data structures
– Jones, Muchnick
- 1982
|
|
82
|
A compiler for lazy ML
– Augustsson
- 1984
|
|
78
|
Selective and lightweight closure conversion
– Wand, Steckler
- 1994
|
|
74
|
Replacing function parameters by global variables. M.Phil
– Sestoft
- 1988
|
|
63
|
Space-efficient closure representations
– Shao, Appel
- 1994
|
|
46
|
Analysis and Efficient Implementation of Functional Programs
– Sestoft
- 1991
|
|
41
|
Safety analysis versus type inference
– Palsberg, Schwartzbach
- 1995
|
|
39
|
Compilation of functional languages by program transformation
– Fradet, Métayer
- 1991
|
|
38
|
Specifying the correctness of binding-time analysis
– Wand
- 1993
|
|
36
|
Correctness of procedure representations in higher-order assembly language
– Wand
- 1991
|
|
27
|
Flow Analysis of Lambda Expressions
– Jones
- 1981
|
|
26
|
Type systems for closure conversion
– Hannan
- 1995
|
|
23
|
Program transformations in a denotational setting
– Nielson
- 1985
|
|
21
|
Automatic autoprojection of higher-order recursive equations
– Bondorf
- 1991
|
|
21
|
Set-based analysis for full Scheme and its use in soft-typing
– Flanagan, Felleisen
- 1995
|
|
21
|
Is continuation-passing useful for data flow analysis
– Sabry, Felleisen
- 1994
|
|
20
|
An Equational Framework for the Flow Analysis of Higher-Order Functional Programs
– Stefanescu, Zhou
- 1994
|
|
14
|
Selective thunkification
– Steckler, Wand
- 1994
|
|
8
|
Abstract analysis and optimization of Scheme
– Ayers
- 1993
|
|
5
|
Correct Higher-Order Program Transformations
– Steckler
- 1994
|
|
3
|
Flow analysis of lambda expressions (preliminary version
– Jones
- 1981
|
|
2
|
Programming Languages Selective and Lightweight Closure Conversion \Delta 39
– Steckler, Wand
- 1994
|
|
1
|
Programming Languages Lightweight Closure Conversion \Delta 39
– Nielson
- 1985
|
|
1
|
Detecting local channels
– Steckler
- 1996
|
|
1
|
Tracking available values for lightweight closures (summary
– Steckler, Wand
- 1994
|
|
1
|
Programming Languages Lightweight Closure Conversion \Delta 39
– Minamide, Morrisett, et al.
- 1996
|