Blog - /Personal
I'm very happy with the grad-level Programming Languages that I'm taking this semester. The professor talked about Lisp 1.5 for about 10 minutes or so, mainly to emphasize how McCarthy's "big mistake" was using dynamic scoping instead of lexical scoping. He mentioned that Scheme fixed this deficiency but did not mention Common Lisp. So I brought up that Common Lisp also has lexical scoping. But apparently since Scheme came out before Common Lisp, he seemed to imply that Scheme is the most important descendant of Lisp 1.5 (I'm guessing that this is because he got his Ph.D at MIT). I couldn't disagree more — Common Lisp is the most worthy modern carrier of the Lisp name. Scheme had the audacity to change some of the basics of Lisp, like combining function and variable namespaces, and the horrible travesty of changing `t' and `nil' to `#t' and `#f' — it's its own animal now.
To some extent, Emacs Lisp is the new Hackers' Lisp, because Emacs is such a featureful, comfortable, and extensible environment. It also has a fairly vibrant community. If it only had the option of lexical scoping, guaranteed tail recursion optimization, and loaded cl.el by default (perhaps internalizing some of the routines for multiple value returns and the like), it would come very close to being the most perfect Lisp.
The professor targeted ML for nit-picking next, giving an example of how a variable holding a reference to a function can be re-assigned in such a way that ML does not properly flag a type error. So I was appeased :^) .