Control flow analysis in scheme
PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
Binding time analysis for high order untyped functional languages
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Separating binding times in language specifications
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Techniques for partial evaluation of imperative languages
PEPM '91 Proceedings of the 1991 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Automatic autoprojection of recursive equations with global variable and abstract data types
Science of Computer Programming
Automatic online partial evaluation
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
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
Topics in online partial evaluation
Topics in online partial evaluation
Set-based analysis of ML programs
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
PEPM '95 Proceedings of the 1995 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Duplication and partial evaluation: for a better understanding of reflective languages
Lisp and Symbolic Computation - Special issue on computational reflection
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
New Insights into Partial Evaluation: the SCHISM Experiment
ESOP '88 Proceedings of the 2nd European Symposium on Programming
Binding-time analysis for both static and dynamic expressions
New Generation Computing - Partial evaluation and program transformation
Binding-Time Analysis for Both Static and Dynamic Expressions
SAS '99 Proceedings of the 6th International Symposium on Static Analysis
A calculus for reasoning about software composition
Theoretical Computer Science - Formal methods for components and objects
Integrating partial evaluators into interpreters
SAIG'01 Proceedings of the 2nd international conference on Semantics, applications, and implementation of program generation
Hi-index | 0.00 |
We present a framework of an online partial evaluator for a call-by-value λ-calculus with destructive updates of data structures. It properly and correctly specializes expressions that contain side-effects, while preserving pointer equality, which is an important property for programs using updates. Our partial evaluator uses a side-effect analysis to extract immutable data structures and then performs an online specialization using preactions. Once mutable and immutable data structures are separated, partial evaluation is done in such a way that accesses to immutable ones are performed at specialization time, while accesses to mutable ones are residualized. For the correct residualization of side-effecting operations, preactions are used to solve various issues, including code elimination, code duplication, and execution order preservation. The preaction mechanism also enables us to reduce expressions that were residualized when the conventional let-expression approach of Similix was used. The resulting partial evaluator is simple enough to prove its correctness. Based on the framework, we have constructed a partial evaluator for Scheme, which is powerful enough to specialize fairly complicated programs with side-effects, such as an interpreter.