|
The key problem with this article is, that Norvig cherry-picked features of Lisp that are present with the languages that he contrasts it with. So, what happens then is that it will give the impression that Lisp somehow lost its uniqueness, or whatever makes it stand out among the others. The premises were at best, loaded. If we’re going to talk about CL, here are some of the features that still make it unique: - live update of a running program, including (re)definitions of classes, condition handlers, etc.
- object system which has multimethods, multiclasses, multidispatch.
- it has a debugger and stepper which has complete access to the stack, with unwind protection
- it has a very strong, unhygienic macro system.
The average programmer does not need a lot of these things because: - the tasks do not demand those features
- the programmer doesn’t know them
- the programmer doesn’t want to or can’t invest time in them
|
The Smalltalk debugger is famously also implemented in the development image (and implementing a simple debugger is a common project in Smalltalk textbooks). Traversing the stack, accessing locals, stepping, etc. are of course all possible.
No CLOS in Smalltalk admittedly, but lots of shenanigans are possible by fiddling with the object model.
Likewise no macros, but Smalltalk syntax is so minimalistic that creating control structures that look like the built-ins is trivial. In fact, conditionals, loops and the like are entirely unmagical in Smalltalk (modulo performance optimizations to make things go fast); reimplementing conditionals (that look and work exactly like the standard set) for example is trivial.