Subject: Re: Lisp's unique feature: compiler available at run-time
From: Erik Naggum <>
Date: 27 Jul 2002 20:14:02 +0000
Newsgroups: comp.lang.lisp,comp.object
Message-ID: <>

* 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.