Artificial Intelligence Programming
Artificial Intelligence Programming
An Interpreter for Extended Lambda Calculus
An Interpreter for Extended Lambda Calculus
Lambda: The Ultimate Imperative
Lambda: The Ultimate Imperative
LAMBDA: The Ultimate Declarative
LAMBDA: The Ultimate Declarative
Debunking the ``Expensive Procedure Call'''' Myth or, Procedure Call Implementations Considered Harmful or, LAMDBA: The Ultimate GOTO
Rabbit: A Compiler for Scheme
Transformations and reduction strategies for typed lambda expressions
ACM Transactions on Programming Languages and Systems (TOPLAS) - Lecture notes in computer science Vol. 174
Revised report on the algorithmic language scheme
ACM SIGPLAN Notices
Managing stack frames in Smalltalk
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Memory allocation and higher-order functions
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Representing control in the presence of first-class continuations
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
The A+ programming language, a different APL
APL '90 Conference proceedings on APL 90: for the future
CONS should not CONS its arguments, or, a lazy alloc is a smart alloc
ACM SIGPLAN Notices
HOPL-II The second ACM SIGPLAN conference on History of programming languages
Revised report on the algorithmic language scheme
ACM SIGPLAN Lisp Pointers
Implementation Strategies for First-Class Continuations
Higher-Order and Symbolic Computation
Formalizing Implementation Strategies for First-Class Continuations
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
A combinator-based compiler for a functional language
POPL '84 Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
History of programming languages---II
Proceedings of the third ACM SIGPLAN conference on History of programming languages
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
Closure generation based on viewing lambda as epsilon plus compile
Computer Languages
Hi-index | 0.00 |
Lexically-scoped LISP dialects offer great flexibility and expressive power. Unfortunately, they tend to be inefficiently implemented, because many interpreter structures such as variable binding environments must be allocated in the heap rather than on the stack. One solution to this problem is to allocate them on the stack, then move them to the heap if necessary. This means moving the environment of a function only if it passes an environment pointer to the last function it calls, returns an environment pointer as a value, sets a global variable to one, or CONSes one into a list structures. To make this work, the interpreter must be able to tell which current environments a function call is the last function call of, and must know exactly what parts of the stack can be moved. This approach saves dramatically on garbage collections, at the price of increasing function application time a bit. It is worth doing if free storage is not abundant, or if it is important to avoid garbage collections.