Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456 Positive Supercompilation for a Higher Order Call-By-Value Language
Supercompiling Overloaded Functions
Peter A. Jonsson and Johan Nordlander; Submitted to ICFP'09.
A naïve translation of recursive cases in type class instances
will give code that allocates a new dictionary and copies the data
from the input dictionary to the new dictionary for the recursive
call. This record creation allocates memory and leads to bad
performance for a conceptually simple and rather common operation,
for example equality between lists. We present a positive
supercompilation algorithm, parametrized with respect to evaluation
order, and show how this algorithm can remove these allocations
resulting in both time and space savings. We also show how a small
extension to the folding mechanism of our supercompiler can give
similar effects the static argument transformation at nearly no
extra cost.
Positive Supercompilation for a Higher Order Call-By-Value Language
Related work (for a lazy language): Supero by Neil Mitchell and Colin Runciman
Abstract
Previous deforestation and supercompilation algorithms may
introduce accidental termination when applied to call-by-value
programs. This hides looping bugs from the programmer, and changes
the behavior of a program depending on whether it is optimized or
not. We present a supercompilation algorithm for a higher-order
call-by-value language and we prove that the algorithm both
terminates and preserves termination properties. This algorithm
utilizes strictness information for deciding whether to substitute
or not and compares favorably with previous call-by-name
transformations.
Positive Supercompilation for a higher order call-by-value language
Related work (for a lazy language): Supero by Neil Mitchell and Colin Runciman
Abstract
Intermediate structures such as lists and higher-order functions are
very common in most styles of functional programming. While allowing
the programmer to write clear and concise programs, the creation and
destruction of these structures impose a run time overhead which is
not negligible. Deforestation algorithms is a family of program
transformations that remove these intermediate structures in an
automated fashion, thereby improving program performance.
While there has been plenty of work on deforestation-like
transformations that remove intermediate structures for languages
with call-by-name semantics, no investigations have been performed
for call-by-value languages. It has been suggested that existing
call-by-name algorithms could be applied to call-by-value programs,
possibly introducing termination in the program. This hides looping
bugs from the programmer, and changes the behaviour of a program
depending on whether it is optimized or not.
We present a transformation, positive supercompilation, for a
higher-order call-by-value language that preserves termination
properties of the programs it is applied to. We prove the algorithm
correct and compare it to existing call-by-name transformations. Our
results show that deforestation-like transformations are both
possible and useful for call-by-value languages, with speedups up to
an order of magnitude for certain benchmarks.
Our algorithm is particularly important in the context of embedded
systems where resources are scarce. By both removing intermediate
structures and performing program specialization the footprint of
programs can shrink considerably without any manual intervention by
the programmer.