Continuation-Based Program Transformation Strategies
Journal of the ACM (JACM)
A model and stack implementation of multiple environments
Communications of the ACM
Communications of the ACM
Communications of the ACM
An Interpreter for Extended Lambda Calculus
An Interpreter for Extended Lambda Calculus
The Art of the Interpreter or, The Modularity Complex (Parts Zero, One, and Two)
The Art of the Interpreter or, The Modularity Complex (Parts Zero, One, and Two)
Revised report on the algorithmic language scheme
ACM SIGPLAN Notices
Minimizing register usage penalty at procedure calls
PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
A simple interprocedural register allocation algorithm and its effectiveness for LISP
ACM Transactions on Programming Languages and Systems (TOPLAS)
&lgr;-V-CS: an extended &lgr;-calculus for scheme
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
CRegs: a new kind of memory for referencing arrays and pointers
Proceedings of the 1988 ACM/IEEE conference on Supercomputing
HOPL-II The second ACM SIGPLAN conference on History of programming languages
Space-efficient closure representations
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
Efficient and safe-for-space closure conversion
ACM Transactions on Programming Languages and Systems (TOPLAS)
ACM Transactions on Programming Languages and Systems (TOPLAS)
Technical Correspondence: Steensgaard-Madsen's reply
ACM Transactions on Programming Languages and Systems (TOPLAS)
Deriving Target Code as a Representation of Continuation Semantics
ACM Transactions on Programming Languages and Systems (TOPLAS)
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
History of programming languages---II
ACM SIGPLAN Lisp Pointers
Hi-index | 0.00 |
We define a “rack”, a data abstraction hybrid of a register and a stack. It is used for encapsulating the behavior of the kind of register whose contents may have an extent which requires that it be saved during the execution of an unknown piece of code. A rack can be implemented cleverly to achieve performance benefits over the usual implementation of a stack discipline. The basic idea is that we interpose a state machine controller between the rack abstraction and its stack/registers. This controller can act as an on-the-fly run-time peephole optimizer, eliding unnecessary stack operations. We demonstrate the sorts of savings one might expect by using cleverly implemented racks in the context of a particular caller-saves implementation of an interpreter for the SCHEME dialect of LISP. For sample problems we can expect that only one out of every four pushes that would be done by a conventional machine will be done by the clever version.