Shallow binding in Lisp 1.5

  title={Shallow binding in Lisp 1.5},
  author={Henry G. Baker},
  journal={Commun. ACM},
  • H. Baker
  • Published 1 July 1978
  • Computer Science
  • Commun. ACM
Shallow binding is a scheme which allows the value of a variable to be accessed in a bounded amount of computation. An elegant model for shallow binding in Lisp 1.5 is presented in which context-switching is an environment tree transformation called rerooting. Rerooting is completely general and reversible, and is optional in the sense that a Lisp 1.5 interpreter will operate correctly whether or not rerooting is invoked on every context change. Since rerooting leaves assoc [v, a] invariant… 

Figures from this paper

A Syntactic Theory of Dynamic Binding
  • L. Moreau
  • Computer Science
    High. Order Symb. Comput.
  • 1997
A syntactic theory is presented that enables the programmer to perform equational reasoning on programs using dynamic binding and it is proved to be sound and complete with respect to derivations allowed on programs in “dynamic-environment passing style”.
The buried binding and dead binding problems of Lisp 1.5: sources of incomparability in garbage collector measurements
This paper addresses itself to two sources of inefficiency in Lisp's variable binding mechanism--one of which is easy to detect---which prevent storage from being garbage collected long after its last reference.
The ecology of LISP or the case for the preservation of the environment
A new binding model for dynamically scoped functional languages (such as LISP) is presented. The scheme attempts to combine the fast variable access of shallow binding with the functional advantages
Low cost environment changing in a shallow binding system
This paper defines the class of “low cost calls” and introduces a technique of detecting and executing these calls in a modified shallow binding system known as “standardized shallow binding”, and finds that standardized shallow binding is also well suited for an efficient implementation of static scoping.
Constant time interpretation for shallow-bound variables in the presence of mixed special/local declarations
A method for separating local from special bindings when interpreting, such that the time to evaluate a reference to a variable is bounded by a modestly small constant; comparison is made to methods which require a time proportional to the number of variables present in the function being interpreted.
CONS should not CONS its arguments, or, a lazy alloc is a smart alloc
Lazy allocation is a model for allocating objects on the execution stack of a high-level language which does not create dangling references, and can reduce the amortized cost of allocation in such a heap by filtering out the short-lived objects that can be more efficiently managed in LIFO order.
A randomized implementation of multiple functional arrays
This work designs a scheme that fragments binding paths randomly, on-line, simple to implement, and its expected performance comparable to that of the optimal off-line solutions, without using compiler-time analyses or language restrictions.
Dynamic optimization of covered tail recursive functions in applicative languages
An optimization technique for interpreters of high level interpreter-based applicative languages, taking an implementation of LISP as an example, and it is shown that the combination of these three techniques keeps the extra expense for static scoping small.
Delimited dynamic binding
A type- and reduction-preserving translation from DB + DC to DC is introduced, which proves that delimited control macro-expresses dynamic binding and is used to implement DB+DC in Scheme, OCaml, and Haskell.
Maintaining Dynamic State : Deep , Shallow , and Parallel
Correctness criteria for such dynamic environments, along with contrasting implementations of deepand shallow-binding implementations, are provided and a technique for maintaining dynamic state called semi-shallow binding is presented.


LISP 1.5 Programmer's Manual
The LISP language is designed primarily for symbolic data processing used for symbolic calculations in differential and integral calculus, electrical circuit theory, mathematical logic, game playing,
A LISP machine
The implementation is based on a powerful microprogrammed processor designed specifically for LISP, which manipulates items which have a built-in data-type field and incorporates the personal computer philosophy.
A model and stack implementation of multiple environments
This paper presents an implementation technique using a single stack to hold procedure activation storage which allows retention of that storage for durations not necessarily tied to control flow, and applications to multitasking, coroutines, backtracking, label-valued variables, and functional arguments are discussed.
The function of FUNCTION in LISP or why the FUNARG problem should be called the environment problem
A problem common to many powerful programming languages arises when one has to determine what values to assign to free variables in functions and the argument is tried to couch the argument in ALGOL-like terms as much as possible.
The Art of Computer Programming
The arrangement of this invention provides a strong vibration free hold-down mechanism while avoiding a large pressure drop to the flow of coolant fluid.
The interlisp reference manual
A Run-Time Mechanism for Referencing Variables
  • M. Woodger
  • Computer Science
    IEEE Trans. Electron. Comput.
  • 1964