Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
Partial evaluation in logic programming
Journal of Logic Programming
Multiple specialization using minimal-function graph semantics
Journal of Logic Programming
Tutorial on specialisation of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Implementation of multiple specialization in logic programs
PEPM '95 Proceedings of the 1995 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Controlling generalization and polyvariance in partial deduction of normal logic programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Constrained partial deduction and the preservation of characteristic trees
New Generation Computing
Program analysis, debugging, and optimization using the ciao system preprocessor
Proceedings of the 1999 international conference on Logic programming
Introduction To Automata Theory, Languages, And Computation
Introduction To Automata Theory, Languages, And Computation
Ecological Partial Deduction: Preserving Characteristic Trees Without Constraints
LOPSTR '95 Proceedings of the 5th International Workshop on Logic Programming Synthesis and Transformation
Global Control for Partial Deduction through Characteristic Atoms and Global Trees
Selected Papers from the Internaltional Seminar on Partial Evaluation
Logic program specialisation through partial deduction: Control issues
Theory and Practice of Logic Programming
Efficient local unfolding with ancestor stacks for full prolog
LOPSTR'04 Proceedings of the 14th international conference on Logic Based Program Synthesis and Transformation
Controlling Polyvariance for Specialization-based Verification
Fundamenta Informaticae - Special Issue on the Italian Conference on Computational Logic: CILC 2011
Hi-index | 0.00 |
Polyvariant specialization allows generating multiple versions of a procedure, which can then be separately optimized for different uses. Since allowing a high degree of polyvariance often results in more optimized code, polyvariant specializers, such as most partial evaluators, can generate a large number of versions. This can produce unnecessarily large residual programs. Also, large programs can be slower due to cache miss effects. A possible solution to this problem is to introduce a minimization step which identifies sets of equivalent versions, and replace all occurrences of such versions by a single one. In this work we present a unifying view of the problem of superfluous polyvariance. It includes both partial deduction and abstract multiple specialization. As regards partial deduction, we extend existing approaches in several ways. First, previous work has dealt with pure logic programs and a very limited class of builtins. Herein we propose an extension to traditional characteristic trees which can be used in the presence of calls to external predicates. This includes all builtins, libraries, other user modules, etc. Second, we propose the possibility of collapsing versions which are not strictly equivalent. This allows trading time for space and can be useful in the context of embedded and pervasive systems. This is done by residualizing certain computations for external predicates which would otherwise be performed at specialization time. Third, we provide an experimental evaluation of the potential gains achievable using minimization which leads to interesting conclusions.