@InProceedings{shao94:_space_effic_closur_repres,
  author =	 {Zhong Shao and Andrew W. Appel},
  title =	 {Space-Efficient Closure Representations},
  booktitle =	 {Proc. 1994 ACM Conf. on Lisp and Functional
                  Programming},
  pages =	 {150-161},
  year =	 1994,
  address =	 {Orlando, FL},
  month =	 {Jun},
  abstract =	 {Many modern compilers implement function calls (or
                  returns) in two steps: first, a <em>closure</em>
                  environment is properly installed to provide access
                  for free variables in the target program fragment;
                  second, the control is transferred to the target by
                  a ``jump with arguments (or results.'' <em>Closure
                  conversion,</em> which decides where and how to
                  represent closures at runtime, is a crucial step in
                  compilation of functional languages. We have a new
                  algorithm that exploits the use of compile-time
                  control and data flow information to optimize
                  closure representations. By extensive closure
                  sharing and allocating as many closures in registers
                  as possible, our new closure conversion algorithm
                  reduces heap allocation by 36\% and memory fetches
                  for local/global variables by 43\%; and improves the
                  already-efficient code generated by the Standard ML
                  of New Jersey compiler by about 17\% on a DECstation
                  5000. Moreover, unlike most other approaches, our
                  new closure allocation scheme satisfies the strong
                  ``safe for space complexity'' rule, thus achieving
                  good asymptotic space usage.}
}

