Subject: Re: quest for pass-by-reference semantics in CL
From: Erik Naggum <erik@naggum.net>
Date: Sun, 05 May 2002 16:51:13 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3229606270797964@naggum.net>

* Erann Gat
| I'll tell you exactly how they get screwed up: they read the wrong books.

  So we push the problem one step back and have not answered the question
  but have to ask ourselves how the authors got screwed up, instead.

| They read K&R and Stroustrup or C++ for Dummies, and as a result they
| have no idea what a binding is.  And it's not their fault.  It's very
| hard to find a good definition of the word "binding" (as a noun) in
| published works.  If you don't believe me, time yourself to see how long
| it takes you to find one (not including the Hyperspec, of course).

  H.P.Barendregt: The Lambda Calculus, Its Syntax and Semantics.  1 second.
  (It is within reach from where I sit.)  He discusses variables in an
  appendix and refers to Frege and Pierce for defining the nature of free
  and bound variables.  The term "binding" is mathematical in nature and
  comes from the concept of free and bound variables.  H.P.Barendregt has
  also been published in Handbook of Logic in Computer Science, vol 2,
  Background: Computational Structures and in Handbook of Theoretical
  Computer Science, vol B, Formal Methods and Semantics, where he also
  writes about lambda calculus.  Lambda calculus was my first guess.

  Then I went back to my undergrad CS texts, just to see if there were any
  useful references.  I found H.R.Lewis, C.H.Papadimitriou: Elements of the
  Theory of Computation and C.Ghezzi, M.Jazayeri: Programming Language
  Concepts both to explain it briefly but accurately.  A.V.Aho, J.D.Ullman:
  Foundations of Computer Science also covers free and bound variables
  under predicate logic.  Of course, SICP covers binding, but slightly
  better in the first edition than the second.

  My third choice of literature to search for this would be in compiler
  literature.  The seminal work of A.V.Aho, R.Sethi, J.D.Ullman: Compilers;
  Principles, Techniques, and Tools, covered binding accurately and well.
  D.Grune, H.E.Bal, C.J.H.Jacobs, K.G.Langendoen: Modern Compiler Design
  covers it in Logic Programming, where they refer to bound and unbound
  variables.  Most other compiler books cover the problem of binding
  without calling it binding.

  My fourth guess was that the O'Reilly books on Perl and Python ought to
  say something about this, but Perl only uses it in relation to the tie
  operator and Python does not mention it at all.  So I checked Programming
  Ruby, which I recalled have a binding operator, and true enough, we find
  that it explains the variable bindings of a block very well and supports
  access to these bindings.

  By this time, I had spent 20 minutes pulling some 30 books out of my
  1100-volume strong personal library and had found 12 hot hits.  So not
  only did I know roughly where to look, it was where I thought I would
  find it.  If any the other books also have a description of binding, I do
  not know, but I am not at all unhappy with the hit rate.

  Of course, I excluded all Lisp books.  Anatomy of Lisp, Lisp in Small
  Pieces, Common Lisp the Language, etc, all cover bindings excellently.  I
  also excluded all Java, Ada, and C++ books because I cannot recall that
  any of them have ever mentioned bindings by that name.

  I believe that if you grasp free and bound variables in mathematics (i.e.
  calculus), predicate logic, and lambda calulus and figure out things like
  scope, then lexical environments, and you read just a little bit about
  compilers, the idea of a binding will emerge without serious mental
  effort.  The fact that Common Lisp exposes what in other languages are
  gone by the time the compiler has finished with it and so not available
  in the runtime environment tends to obscure and hide these issues from
  their users.  The lack of binding capture in closures (because they
  simply do not exist) tends to make it unnecessary to know about them.
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.

  70 percent of American adults do not understand the scientific process.