Performance and evaluation of LISP systems
Performance and evaluation of LISP systems
An experiment in partial evaluation: the generation of a compiler generator
Proc. of the first international conference on Rewriting techniques and applications
Continuation-passing, closure-passing style
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Automatic autoprojection of higher order recursive equations
Proceedings of the third European symposium on programming on ESOP '90
Arity raiser and use in program specialization
Proceedings of the third European symposium on programming on ESOP '90
Separating binding times in language specifications
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Replacing function parameters by global variables
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Static and dynamic semantics processing
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Mostly parallel garbage collection
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
Automatic autoprojection of recursive equations with global variable and abstract data types
Science of Computer Programming
Essentials of programming languages
Essentials of programming languages
Automatic online partial evaluation
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Projection factorisations in partial evaluation
Projection factorisations in partial evaluation
Compiling with continuations
Automatic autoprojection of higher order recursive equations
ESOP '90 Selected papers from the symposium on 3rd European symposium on programming
Generating a compiler for a lazy language by partial evaluation
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
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
Tutorial notes on partial evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Topics in online partial evaluation
Topics in online partial evaluation
Proceedings of the 3rd European Symposium on Programming
ESOP '90 Proceedings of the 3rd European Symposium on Programming
Definitional interpreters for higher-order programming languages
ACM '72 Proceedings of the ACM annual conference - Volume 2
Rabbit: A Compiler for Scheme
An introduction to partial evaluation
ACM Computing Surveys (CSUR)
Distributed partial evaluation
PASCO '97 Proceedings of the second international symposium on Parallel symbolic computation
Jones optimality, binding-time improvements, and the strength of program specializers
ASIA-PEPM '02 Proceedings of the ASIAN symposium on Partial evaluation and semantics-based program manipulation
SAIG '00 Proceedings of the International Workshop on Semantics, Applications, and Implementation of Program Generation
Inlining as staged computation
Journal of Functional Programming
Imperative program optimization by partial evaluation
Proceedings of the 2004 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Imperative-program transformation by instrumented-interpreter specialization
Higher-Order and Symbolic Computation
An investigation of Jones optimality and BTI-universal specializers
Higher-Order and Symbolic Computation
POPL '13 Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Hi-index | 0.00 |
Two key steps in the compilation of strict functional languages are the conversion of higher-order functions to data structures (closures) and the transformation to tail-recursive style. We show how to perform both steps at once by applying first-order offline partial evaluation to a suitable interpreter. The resulting code is easy to transliterate to low-level C or native code. We have implemented the compilation to C; it yields a performance comparable to that of other modern Scheme-to-C compilers. In addition, we have integrated various optimizations such as constant propagation, higher-order removal, and arity raising simply by modifying the underlying interpreter. Purely first-order methods suffice to achieve the transformations. Our approach is an instance of semantics-directed compiler generation.