I Still Don't Like EVAL-ALWAYS #
hacking, May 4th 2007
I received some comments on my sermon against EVAL-ALWAYS. The main argument was that macros like EVAL-ALWAYS and DEFCLASS* are abstractions, despite my claim to the contrary.
I guess they can look like abstractions if you squint a bit, but even if they are abstractions they are pretty sucky ones. The Wikipedia definition of "Abstraction (computer science)" starts out so:
In computer science, abstraction is a mechanism and practice to reduce and factor out details so that one can focus on a few concepts at a time.
What are the details EVAL-ALWAYS hides? I guess you can consider the fact that there are three different EVAL-WHEN situations a detail, but if you are not aware of them you don't understand what EVAL-ALWAYS does. Nothing has been abstracted away, really. It is just an abbreviation.
But no matter how much I dislike EVAL-ALWAYS, it does have one redeeming feature — in contrast to DEFCLASS*. There is only one sane way to write EVAL-ALWAYS. There are several different apparently reasonable ways to write DEFCLASS*.
If you really really have to use either, please make it EVAL-ALWAYS. If you're lucky you'll just get hairy palms, but with DEFCLASS* you're going to be squinting so hard that loss of eyesight is a definite risk. ;-)