We present a self-applicable partial evaluator for a large subset of full Prolog. The partial evaluator, called Logimix, is the result of applying our experience from partial evaluation of functional languages to Prolog. Great care is taken to preserve the operational semantics of the partially evaluated programs, including the effects of non-logical predicates and side effects. At the same time, we also want the partial evaluator to handle large programs in reasonable time. This has led us to use simple strategies whenever possible, in particular we let most of the choices made during partial evaluation depend on the results of a prior binding time analysis. We have successfully applied Logimix to interpreters, yielding compiled programs where virtually all interpretation overhead is removed. Self-application of Logimix yields stand-alone compilers and a compiler generator. To obtain a clear distinction between the different meta-levels when doing self-application, input programs to ...
Torben Æ. Mogensen, Anders Bondorf