Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
Foundations of logic programming; (2nd extended ed.)
Foundations of logic programming; (2nd extended ed.)
A practical framework for the abstract interpretation of logic programs
Journal of Logic Programming
Partial evaluation in logic programming
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
A transformation system for CLP with dynamic scheduling and CCP
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Handbook of formal languages, vol. 1: word, language, grammar
Handbook of formal languages, vol. 1: word, language, grammar
Controlling generalization and polyvariance in partial deduction of normal logic programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
An Assertion Language for Constraint Logic Programs
Analysis and Visualization Tools for Constraint Programming, Constrain Debugging (DiSCiPl project)
Partial Evaluation of the "Real Thing"
LOPSTR '94/META '94 Proceedings of the 4th International Workshops on Logic Programming Synthesis and Transformation - Meta-Programming in Logic
Sequence-based abstract interpretation of Prolog
Theory and Practice of Logic Programming
Logic program specialisation through partial deduction: Control issues
Theory and Practice of Logic Programming
Program development using abstract interpretation (and the ciao system preprocessor)
SAS'03 Proceedings of the 10th international conference on Static analysis
Poly-controlled partial evaluation
Proceedings of the 8th ACM SIGPLAN international conference on Principles and practice of declarative programming
Poly-controlled partial evaluation in practice
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A Study on the Practicality of Poly-Controlled Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Improving the Decompilation of Java Bytecode to Prolog by Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Oracle-Based Partial Evaluation
Electronic Notes in Theoretical Computer Science (ENTCS)
Type-Based Homeomorphic Embedding and Its Applications to Online Partial Evaluation
Logic-Based Program Synthesis and Transformation
Test Data Generation of Bytecode by CLP Partial Evaluation
Logic-Based Program Synthesis and Transformation
Type-based homeomorphic embedding for online termination
Information Processing Letters
Decompilation of Java bytecode to Prolog by partial evaluation
Information and Software Technology
Removing superfluous versions in polyvariant specialization of prolog programs
LOPSTR'05 Proceedings of the 15th international conference on Logic Based Program Synthesis and Transformation
Non-leftmost unfolding in partial evaluation of logic programs with impure predicates
LOPSTR'05 Proceedings of the 15th international conference on Logic Based Program Synthesis and Transformation
Hi-index | 0.00 |
The integration of powerful partial evaluation methods into practical compilers for logic programs is still far from reality. This is related both to 1) efficiency issues and to 2) the complications of dealing with practical programs. Regarding efficiency, the most successful unfolding rules used nowadays are based on structural orders applied over (covering) ancestors, i.e., a subsequence of the atoms selected during a derivation. Unfortunately, maintaining the structure of the ancestor relation during unfolding introduces significant overhead. We propose an efficient, practical local unfolding rule based on the notion of covering ancestors which can be used in combination with any structural order and allows a stack-based implementation without losing any opportunities for specialization. Regarding the second issue, we propose assertion-based techniques which allow our approach to deal with real programs that include (Prolog) built-ins and external predicates in a very extensible manner. Finally, we report on our implementation of these techniques in a practical partial evaluator, embedded in a state of the art compiler which uses global analysis extensively (the Ciao compiler and, specifically, its preprocessor CiaoPP). The performance analysis of the resulting system shows that our techniques, in addition to dealing with practical programs, are also significantly more efficient in time and somewhat more efficient in memory than traditional tree-based implementations.