Learn More
The "size-change termination" principle for a first-order functional language with well-founded data is: a program terminates on all inputs if <i>every infinite call sequence</i> (following program control flow) would cause an infinite descent in some data values.Size-change analysis is based only on local approximations to parameter size changes derivable(More)
The present paper is an extended abstract of (Jones 1985), in which a running , non-trivial partial evaluator is described. As far as we know, this partia l evaluator is the first which has been used in practice to transform interpreters into corresponding stand-alone compilers, or to generate a compile r generator by transforming itself. A partial(More)
Many classical compiler optimizations can be elegantly expressed using rewrite rules of form: <i>I</i> &#8658; <i>I</i>&#8242; if <i>&phis;</i>, where <i>I</i>, <i>I</i>&#8242; are intermediate language instructions and <i>&phis;</i> is a property expressed in a temporal logic suitable for describing program data flow. Its reading: If the current program(More)
In [12] the authors introduced the concept of binding time optimization and presented a series of data flow analytic methods for determining some of the binding time characteristics of programs. In this paper we extend that work by providing methods for determining the class of shapes which an unbounded data object may assume during execution of a LISP-like(More)
Logic-programming languages are based on a principle of separation &#8220;logic&#8221; and &#8220;control.&#8221;. This means that they can be given simple model-theoretic semantics without regard to any particular execution mechanism (or proof procedure, viewing execution as theorem proving). Although the separation is desirable from a semantical point of(More)
We study four transformation methodologies which are automatic instances of Burstall and Darlington's fold/unfold framework: partial evaluation, deforestation, supercompilation, and generalized partial computation (GPC). One can classify these and other fold/unfold based transformers by how much information they maintain during transformation. We introduce(More)