LISP is a good example. In the early sixties we have suffered from a piece of computer science folklore, viz. that the crucial test whether on had designed “a good language” was, whether one could write its own interpreter in itself. I have never understood the reason for that criterion –it was suggested that such a language definition would solve the problem of the definition of (particularly) the semantics of the language–, the origin of the criterion was the example of LISP, which was “defined” by a ten-line interpreter written in LISP, and that, somehow, set the standard. (I found this hard to accept because when I started to study LISP from the LISP 1.5 Manual, I could not understand it:after an incomplete definition of the language, its authors try to supplement these deficiencies by an equally incomplete sketch of a specific implementation, and that was a confusion if there ever was one!) This unfortunate LISP-interpreter formulated in LISP has somehow given mechanistic (or “operational”) language definitions an undeserved aura of respectability, and its unwholesome influence can be traced right through the Vienna Definition Language and ALGOL 68 –what I knew– and even –what I learned this week to my surprise and disappointment– to the work of Dana S.Scott. It is enlightening to know –what I also learned later that week– that LISP’s most awful property, viz. “shallow binding” –now religiously defended by its addicts!– is described by McCarthy as “a mistake” in that ten-line interpreter (which, of course, it is)!
EWD, #448