Subject: Re: Lisp's unique feature: compiler available at run-time From: Erik Naggum <erik@naggum.net> Date: 27 Jul 2002 20:14:02 +0000 Newsgroups: comp.lang.lisp,comp.object Message-ID: <3236789642671151@naggum.net> * 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 clean. 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.