* Paul D. Lathrop
| Sorry to sound ignorant, but what does non-hygienic mean in this context?
"Non-hygienic" is primarily a socioideological device used to produce a
distinction between the clean guys and the dirty guys. In simpler terms, it
is an us-vs-them, good-vs-evil thing. Practially, it means that of the many
places you can have cleanliness, one group of people think that their place
is so important that another group of people are "non-hygienic" since they do
not value that particular place equally highly or with the same passion.
Curiously, this all started with a technical issue far removed from macros.
In some languages, having one namespace for everything is considered clean,
much like having every object in your entire kitchen in full view on the
counters or the floor all the time, including keeping your food in the open,
and then they go to a lot of trouble to ensure that this is "hygienic", with
ritual and dedication. Then people who use this kitchen naturally become
slighly neurotic about hygiene. Some think this is nuts and look around for
a different solution and use namespaces for different kinds of things --
functions, variables, classes and types, go tags, catch tags, etc, and invent
packages to stuff things into so both the language and the programmer can
keep the hygiene in one confined compartments at a time instead of the whole
kitchen as a whole. Hygiene is now much less of an issue, as it is built in
to how you do things without having to double-check. You would purposefully
have to make a dirty mess to break hygiene in this multiple namespace model,
which would be almost as much work as keeping the one-kitchen-with-everything
The really odd thing about making things too simple, like a kitchen without
any cupboards or storage space at all, is that other things that should be
clean and simple become sore spots -- bring something dirty into this too
simple kitchen, and voilą (as they say in kitchens) you are non-hygienic and
cleaning up becomes your obsession. Ironically, cleanliness now means work
and effort, something you have to do to leave a "natural form". It is not
just there, effortlessly achieved by routine, you have to keep it in mind
with constant vigilance. This presence of mind and the conscious awareness
of an issue changes your entire outlook on it. There is even a term for
this: mysophobia, the abnormal fear of uncleanliness. If you consider this
state normal, it becomes a personal affront to you when somebody else does
not "respect" your desire for cleanliness, and you spend some of your energy
denouncing those who are "unclean". Hence, you invoke "non-hygienic" to
refer to those other people who are not like yourself. Instead of causing
other people to be more concerned with hygiene, they may find the label quite
disconcerting, as it is easily perceived as a personal attack, but we have to
understand that those who want to live in too simple and elegant kitchen (at
least until they fill it with lots of food and useful things) actually try to
defend themselves from what they perceive as a threat because foreign
elements may actually "pollute" their once pristine namespace.
So Scheme has taken cleanliness and simplicity too far and have ended up
being mysophobia and consequenly excoriate Common Lisp for not being clean in
exactly the same places they have scrubbed Scheme clean. But this is an
irrational fear, as it does not apply to Common Lisp. Anyone who uses "non-
hygienic" is, unfortunately or not, seen as judging Common Lisp in Scheme
terms, which is one of the many ways to go _really_ wrong in any judgment.
Common Lisp is like a house that looks neat and clean yet holds enormous
amounts of stuff in cupboards and closets, a language in which you are not
afraid to call a variable "list" just because there is a function and a type
called "list". To those who want everything in one, clean namespace, this is
anathema! They cannot understand that the hygiene problem has been solved at
a very different language level. After all, you have to work with your food
on the same counter in the same kitchen, so the similarity overwhelms the
slightly neurotic mind and the fear of all things non-hygienic takes control.
Specifically, it is not "non-hygienic" in Common Lisp to let a macro both use
bindings from and introduce new ones in the caller's environments any more
than it is to bring something new into your kitchen if you have everything
else stored away properly and you can wrap food in protective covers. If you
want more hygiene in Common Lisp, you have the tools you need to wrap it up
so it becomes harmless and unharmed. Since the very concept of wrapping
things up is so much harder to accomplish in Scheme, this part of Common Lisp
tends to be ignored by Scheme adherents who just get an emotional response
from seeing the possibility of some dirty foreign object in their kitchen.
Sadly, Scheme adherents have historically had a very strong need to show how
clean they are and they have tried to rub Common Lisp users' collective nose
in whatever they thought they were cleaner than. Consequentyl, mere use of
the term "non-hygienic" only prolongs the negative connotations of Scheme's
neurotic cleanliness and the constant claims that Common Lisp does not live
up to their requirements. Frankly, it gets on a lot of Common Lispers nerve.
As long as you have only one namespace, it _will_ get polluted, and even if
you name your variables carefully in any binding (such as "lst" instead of
"list"), you will sooner or later screw up, so when variables and functions
share namespaces or when you define a huge number of local functions that
override the global function definition, such as Schemers are also wont to
do, you need protection from the pollution that the language _invites_. So
while Common Lisp may be "non-hygienic" as seen from Scheme, all of Scheme is
non-hygienic as seen from Common Lisp. Clearly, there is very limited value
in such labels both ways. Common Lispers just prefer to shove the neurotic
Schemers out of the kitchen altogether.
[ Note: This is not posted to comp.lang.scheme. Nevertheless, I predict that
we will see several explosions from Scheme users who somehow think that it is
perfectly OK to label Common Lisp "non-hygienic", but not OK to label Scheme
"non-hygienic", because their strong _beliefs_ and _fears_ get in the way.
Also, personal attacks and other forms of hate mail from Scheme freaks should
be mailed to me privately. If you have to exact revenge for blaspheming your
beliefs in cleanliness, please be so kind as so avoid a public spectacle. ]
Erik Naggum, Oslo, Norway ***** One manslaughter is another man's laughter.
Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.