Abstract
A major obstacle in partial evaluation (program specialization) is the need for
binding time improvements
. By reorganizing a source program, the residual programs obtained by specializing the source program may be improved: more computations can be done statically, that is, at specialization time.
One well-known effective reorganization is (manual or automatic) conversion into
continuation passing style
(cps). This conversion allows data
consumers
to be propagated through
frozen
expressions to the data
producers
. In this paper we show how such improvements can be obtained without affecting the source program:
by writing the program specializer itself in cps
; traditionally, specialization has been formulated in direct style.
The advantages of avoiding cps-converting source programs are: (1) no cps-conversion phase is needed; (2) the generated residual programs are not in cps; (3) since no source level continuations are added, there is no overhead of manipulating closure representations in the generating extensions (e.g. compilers) obtained by self-application; (4) manual “binding time debugging” is easier since binding time analysis is done on a non-converted program.
We have implemented a cps-based program specializer; it is integrated in the partial evaluator Similix 4.0.
Using a cps-specializer,
partially static data structures
can be handled safely in a straightforward way. The difficulty is to ensure automatically that residual expressions that become part of a partially static data structure are neither duplicated nor discarded. This is achieved by binding such residual expressions in automatically inserted frozen let-expressions; cps is needed to propagate operations on the partially static data structure through these frozen let-expressions. Based on this idea, we have implemented an extension of Similix 4.0 that handles partially static data structures.
Publisher
Association for Computing Machinery (ACM)
Cited by
5 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献