Memory allocation and higher-order functions
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Garbage collection can be faster than stack allocation
Information Processing Letters
TIM: A simple, lazy abstract machine to execute supercombinators
Proc. of a conference on Functional programming languages and computer architecture
Implementation strategies for continuations
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Simple generational garbage collection and fast allocation
Software—Practice & Experience
Efficient stack allocation for tail-recursive languages
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Lisp and Symbolic Computation
CONS should not CONS its arguments, or, a lazy alloc is a smart alloc
ACM SIGPLAN Notices
No assembly required: compiling standard ML to C
ACM Letters on Programming Languages and Systems (LOPLAS)
List processing in real time on a serial computer
Communications of the ACM
A nonrecursive list compacting algorithm
Communications of the ACM
IEEE Std 1178-1990, IEEE Standard for the Scheme Programming Language
IEEE Std 1178-1990, IEEE Standard for the Scheme Programming Language
Block structure (Extended Abstract): Retention or deletion?
STOC '71 Proceedings of the third annual ACM symposium on Theory of computing
Proceedings of ACM conference on Proving assertions about programs
The Implementation of Functional Programming Languages (Prentice-Hall International Series in Computer Science)
Proper tail recursion and space efficiency
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Compiling scheme to JVM bytecode:: a performance study
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Stack virtualization for source level debugging
Software—Practice & Experience
Efficient floating-point number handling for dynamically typed scripting languages
DLS '08 Proceedings of the 2008 symposium on Dynamic languages
CHR for Imperative Host Languages
Constraint Handling Rules
CEAL: a C-based language for self-adjusting computation
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Selective tail call elimination
SAS'03 Proceedings of the 10th international conference on Static analysis
Managing continuations for proper tail recursion
Proceedings of the 2010 international conference on Lisp
Avalanche: a fine-grained flow graph model for irregular applications on distributed-memory systems
Proceedings of the 1st ACM SIGPLAN workshop on Functional high-performance computing
Hi-index | 0.00 |
Previous Schemes for implementing full tail-recursion when compiling into C have required some form of "trampoline" to pop the stack. We propose solving the tail-recursion problem in the same manner as Standard ML of New Jersey, by allocating all frames in the (garbage-collected) heap. The Scheme program is translated into continuation-passing style, so the target C functions never return. The C stack pointer then becomes the allocation pointer for a Cheney-style copying garbage collection scheme. Our Scheme can use C function calls, C arguments, C variable-arity functions, and separate compilation without requiring complex block-compilation of entire programs. Our C version of the "Boyer" benchmark is available at ftp://ftp.netcom.com/pub/hb/hbaker/cboyer13.c.