Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
The complementation problem for Bu¨chi automata with applications to temporal logic
Theoretical Computer Science
Intensions and extensions in a reflective tower
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Reification without evaluation
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Partial evaluation in logic programming
Journal of Logic Programming
Automatic autoprojection of recursive equations with global variable and abstract data types
Science of Computer Programming
Automatic autoprojection of higher order recursive equations
ESOP '90 Selected papers from the symposium on 3rd European symposium on programming
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
Tutorial on specialisation of logic programs
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A tour of Schism: a partial evaluation system for higher-order applicative languages
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Tutorial notes on partial evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
XSB as an efficient deductive database engine
SIGMOD '94 Proceedings of the 1994 ACM SIGMOD international conference on Management of data
Abstract interpretation: a semantics-based tool for program analysis
Handbook of logic in computer science (vol. 4)
A simple reflective interpreter
Lisp and Symbolic Computation - Special issue on computational reflection
A software engineering experiment in software component generation
Proceedings of the 18th international conference on Software engineering
Is it a tree, a DAG, or a cyclic graph? A shape analysis for heap-directed pointers in C
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A general approach for run-time specialization and its application to C
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proving the correctness of reactive systems using sized types
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Building domain-specific embedded languages
ACM Computing Surveys (CSUR) - Special issue: position statements on strategic directions in computing research
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
C and tcc: a language and compiler for dynamic code generation
ACM Transactions on Programming Languages and Systems (TOPLAS)
The mystery of the tower revealed: a non-reflective description of the reflective tower
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Bandera: extracting finite-state models from Java source code
Proceedings of the 22nd international conference on Software engineering
Generation of LR parsers by partial evaluation
ACM Transactions on Programming Languages and Systems (TOPLAS)
DyC: an expressive annotation-directed dynamic compiler for C
Theoretical Computer Science - Partial evaluation and semantics-based program manipulation
MetaML and multi-stage programming with explicit annotations
Theoretical Computer Science - Partial evaluation and semantics-based program manipulation
Improving programs by the introduction of recursion
Communications of the ACM
The size-change principle for program termination
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Efficiency by Incrementalization: An Introduction
Higher-Order and Symbolic Computation
Glossary for Partial Evaluation and Related Topics
Higher-Order and Symbolic Computation
Specialization tools and techniques for systematic optimization of system software
ACM Transactions on Computer Systems (TOCS)
Macros as multi-stage computations: type-safe, generative, binding macros in MacroML
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Higher-Order and Symbolic Computation
Partial Evaluation of Computation Process, Revisited
Higher-Order and Symbolic Computation
Partial Evaluation of Computation Process—AnApproach to a Compiler-Compiler
Higher-Order and Symbolic Computation
Dependent Types for Program Termination Verification
Higher-Order and Symbolic Computation
Operational semantics of termination types
Nordic Journal of Computing
Selected Papers from the Internaltional Seminar on Partial Evaluation
Selected Papers from the Internaltional Seminar on Partial Evaluation
Synchronisation Analysis to Stop Tulping
ESOP '98 Proceedings of the 7th European Symposium on Programming: Programming Languages and Systems
Deforestation: Transforming Programs to Eliminate Trees
ESOP '88 Proceedings of the 2nd European Symposium on Programming
Proceedings of the 5th ACM Conference on Functional Programming Languages and Computer Architecture
Sound Specialization in the Presence of Computational Effects
TACS '97 Proceedings of the Third International Symposium on Theoretical Aspects of Computer Software
Hand-Writing Program Generator Generators
PLILP '94 Proceedings of the 6th International Symposium on Programming Language Implementation and Logic Programming
A Unified Framework for Binding-Time Analysis
TAPSOFT '97 Proceedings of the 7th International Joint Conference CAAP/FASE on Theory and Practice of Software Development
BTA Algorithms to Ensure Termination of Off-Line Partial Evaluation
Proceedings of the Second International Andrei Ershov Memorial Conference on Perspectives of System Informatics
Termination Analysis for Functional Programs using Term Orderings
SAS '95 Proceedings of the Second International Symposium on Static Analysis
Termination Analysis for Offline Partial Evaluation of a Higher Order Functional Language
SAS '96 Proceedings of the Third International Symposium on Static Analysis
Termination Analysis for Mercury
SAS '97 Proceedings of the 4th International Symposium on Static Analysis
Automatic Termination Analysis for Partial Functions Using Polynomial Orderings
SAS '97 Proceedings of the 4th International Symposium on Static Analysis
Finiteness Analysis in Polynomial Time
SAS '02 Proceedings of the 9th International Symposium on Static Analysis
Proving Innermost Normalisation Automatically
RTA '97 Proceedings of the 8th International Conference on Rewriting Techniques and Applications
A Roadmap to Metacomputation by Supercompilation
Selected Papers from the Internaltional Seminar on Partial Evaluation
What Not to Do When Writing an Interpreter for Specialisation
Selected Papers from the Internaltional Seminar on Partial Evaluation
Selected Papers from the Internaltional Seminar on Partial Evaluation
Practical Methods for Proving Program Termination
CAV '02 Proceedings of the 14th International Conference on Computer Aided Verification
TermiLog: A System for Checking Termination of Queries to Logic Programs
CAV '97 Proceedings of the 9th International Conference on Computer Aided Verification
The implementation of procedurally reflective languages
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Reification: Reflection without metaphysics
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
General size-change termination and lexicographic descent
The essence of computation
Partial evaluation using dependence graphs
Partial evaluation using dependence graphs
Multistage programming: its theory and applications
Multistage programming: its theory and applications
A supercompiler system based on the language REFAL
ACM SIGPLAN Notices
Logic program specialisation through partial deduction: Control issues
Theory and Practice of Logic Programming
Fast narrowing-driven partial evaluation for inductively sequential programs
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Quasi-terminating logic programs for ensuring the termination of partial evaluation
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Towards constructing reusable specialization components
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Macros for context-free grammars
Proceedings of the 10th international ACM SIGPLAN conference on Principles and practice of declarative programming
Type-Based Homeomorphic Embedding and Its Applications to Online Partial Evaluation
Logic-Based Program Synthesis and Transformation
Preserving Sharing in the Partial Evaluation of Lazy Functional Programs
Logic-Based Program Synthesis and Transformation
Improving offline narrowing-driven partial evaluation using size-change graphs
LOPSTR'06 Proceedings of the 16th international conference on Logic-based program synthesis and transformation
Size-change termination and transition invariants
SAS'10 Proceedings of the 17th international conference on Static analysis
Automated termination proofs for haskell by term rewriting
ACM Transactions on Programming Languages and Systems (TOPLAS)
Size-Change termination and bound analysis
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Hi-index | 0.00 |
Recent research suggests that the goal of fully automatic and reliable program generation for a broad range of applications is coming nearer to feasibility. However, several interesting and challenging problems remain to be solved before it becomes a reality. Solving them is also necessary, if we hope ever to elevate software engineering from its current state (a highly developed handiwork) into a successful branch of engineering, capable of solving a wide range of new problems by systematic, well-automated and well-founded methods.A key problem in all program generation is termination of the generation process. This article focuses on off-line partial evaluation and describes recent progress towards automatically solving the termination problem, first for individual programs, and then for specializers and “generating extensions,” the program generators that most offline partial evaluators produce.The technique is based on size-change graphs that approximate the changes in parameter sizes at function calls. We formulate a criterion, bounded anchoring, for detecting parameters known to be bounded during specialization: a bounded parameter can act as an anchor for other parameters. Specialization points necessary for termination are computed by adding a parameter that tracks call depth, and then selecting a specialization point in every call loop where it is unanchored. By generalizing all unbounded parameters, we compute a binding-time division which together with the set of specialization points guarantees termination.Contributions of this article include a proof, based on the operational semantics of partial evaluation with memoization, that the analysis guarantees termination; and an in-depth description of safety of the increasing size approximation operator required for termination analysis in partial evaluation.Initial experiments with a prototype shows that the analysis overall yields binding-time divisions that can achieve a high degree of specialization, while still guaranteeing termination.The article ends with a list of challenging problems whose solution would bring the community closer to the goal of broad-spectrum, fully automatic and reliable program generation.