[net.lang] {deep|shallow}{early|late}

mac@uvacs.UUCP (12/01/83)

It's my impression that in the context of LISP there are two aspects to
binding: time and place.

Early and late binding are also called static and dynamic (or lexical and
?).  Lisp is traditionally late bound.  Scheme & related dialects are early
bound.

Deep and shallow binding are independent of binding times.  Deep bound
systems search a single binding stack for any variable (the search may go
deep).  Shallow binding systems have a separate stack for each variable and
need only look at the top (shallow).

According to this interpretation, deep/shallow binding is not visible in
the absence of concurrency.  Early/late binding makes a noticeable
difference.  Funargs want early binding.

It's true that there's confusion on this point.  The dragon book
("Principles of Compiler Design", Aho & Ullman), for one.  I was about to
complain about their incorrect use of the term deep to mean static binding,
when I discovered that the 1979 edition corrects this. "The Anatomy of
Lisp" is probably the final word.

Alex Colvin

 ARPA: mac.uvacs@csnet-relay CS: mac@virginia USE: ...uvacs!mac