Subject: Re: Why is Scheme not a Lisp?
From: Erik Naggum <erik@naggum.net>
Date: Fri, 15 Mar 2002 06:12:05 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3225161536947499@naggum.net>

* Kent M Pitman
> Hygenic macros solve a problem that CL does not have.
> (They solve a problem introduced by Lisp1-ness. Heh.)
> I see no need for these whatsoever.

* Thomas Bushnell, BSG
| Hrm, maybe this is true, but I'm not sure about it.  There is a root
| problem that I think CL still has, but maybe not.  Requires more thought
| before I'd be confident either way.  (And another close read of Chris
| Hansen's paper.)  But maybe you could say why you think the problem
| exists in Scheme but not CL?

  Briefly put, the single namespace means that any variables used by the
  macro would cause any user-defined functions with the same name to become
  unusable in the body of the macro.  This requires a solution, and the
  solution is both real symbols, packages, and two namespaces, but in
  Scheme, they held on to the single namespace and had to invent hygienic
  macros, instead.  In Common Lisp, there is no danger of trampling on the
  functional value of a symbol just because you bind it lexically as a
  variable, so the body of the macro is undisturbed by any overlap in
  usage.  Also, since we have the ability to generate a symbol that cannot
  be reached by any name by the reader -- it is not interned in any package
  -- using either make-symbol or gensym, we have a choice of exporting a
  variable (or even function) from the macro to the body or to hide it with
  an invisible symbol.  Using such generated symbols poses no worse
  problems for any competent programmer than writing hygienic macros.
  There are even macros around that "rebind" variables hygienically.

  Thus hygienic macros is a necessary solution to a problem that arose from
  several bad design decisions in Scheme that plague the language in more
  ways than just requiring hygienic macros -- at least as seen from Common
  Lisp.  The single namespace, the lack of first-class symbols, exacerbated
  by the lack of packages, and the need for make-shift solutions to what
  should not have been problems, are all among the things that will
  continue to create problems.  Scheme therefore has to return to the
  drawing board and redesign itself instead of dragging this bggage along
  into the future.  At least it should try again with first-class symbols
  and packages.

///
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.