1997
DOI: 10.1145/239912.239915
|View full text |Cite
|
Sign up to set email alerts
|

Lightweight closure conversion

Abstract: 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 co… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
3
1
1

Citation Types

0
11
0

Year Published

1998
1998
2017
2017

Publication Types

Select...
5
3
1

Relationship

0
9

Authors

Journals

citations
Cited by 45 publications
(11 citation statements)
references
References 26 publications
0
11
0
Order By: Relevance
“…(1) uncurrying [19], which can increase the number of closed functions; (2) closure representations that exclude free variables from an environment if their values are available at all call sites [36]; and (3) register allocation and calling conventions informed by flow information. There are numerous other closure representation tricks (e.g., those discussed in [24,2,34]) to investigate in the context of our framework.…”
Section: Discussionmentioning
confidence: 99%
“…(1) uncurrying [19], which can increase the number of closed functions; (2) closure representations that exclude free variables from an environment if their values are available at all call sites [36]; and (3) register allocation and calling conventions informed by flow information. There are numerous other closure representation tricks (e.g., those discussed in [24,2,34]) to investigate in the context of our framework.…”
Section: Discussionmentioning
confidence: 99%
“…Steckler and Wand [17] describe a closure-conversion algorithm that creates "light-weight closures" that do not contain free variables that are available at the call site. This is a limited form of lambda lifting and, as with full lambda lifting, can sometimes do harm relative to the straight flat-closure model.…”
Section: Related Workmentioning
confidence: 99%
“…While a few of the optimizations have long been performed by our compiler, descriptions of them have never been published. Various closure optimizations have been described by others [2,6,8,[11][12][13][14]17], but most of the optimizations described here have not been described previously in the literature, and many are likely novel.…”
Section: Introductionmentioning
confidence: 99%
“…For any first-order imperative program, such information is available via a flowchart constructed from the program text. Given this information, the call-graph of a program can be constructed and a suite of compiler optimisations, for example, closure conversion (Steckler and Wand 1997;Dimock et al 2001), useless variable elimination (Wand and Siveroni 1999), constant propagation, induction variable elimination (Shivers 1991), and so on, can be enabled. For higher-order programs, however, a control-flow graph is often not evident from the program text.…”
Section: Introductionmentioning
confidence: 99%