Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Symbol pollution non-issue.

Received: by 10.204.156.210 with SMTP id y18mr499781bkw.7.1329597596861;
        Sat, 18 Feb 2012 12:39:56 -0800 (PST)
Path: t13ni43073bkb.0!nntp.google.com!news2.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!news2.euro.net!news.mixmin.net!news.albasani.net!.POSTED!rNOSPAMon
From: RG <rNOSPA...@flownet.com>
Newsgroups: comp.lang.lisp
Subject: Re: Symbol pollution non-issue.
Date: Sat, 18 Feb 2012 12:38:34 -0800
Organization: Amalgamated Widgets Unlimited
Lines: 111
Message-ID: <rNOSPAMon-EEE41D.12383418022012@news.albasani.net>
References: <208471263350311915.117387tfb-tfeb.org@reader443.eternal-september.org> <barmar-8BC135.11440607022012@news.eternal-september.org> <675780956350327169.062709tfb-tfeb.org@reader443.eternal-september.org> <rNOSPAMon-8889E3.11213107022012@news.albasani.net> <jguqnk$gkc$2@z-news.wcss.wroc.pl> <20120217012534.632@kylheku.com> <rNOSPAMon-911025.11210217022012@news.albasani.net> <9q9vlfFjjjU1@mid.individual.net> <rNOSPAMon-5A3ECE.09093218022012@news.albasani.net> <9qa52aFr9eU1@mid.individual.net> <rNOSPAMon-F96E5F.10075218022012@news.albasani.net> <9qac48Fic9U1@mid.individual.net>
Mime-Version: 1.0
X-Trace: news.albasani.net YPa2cYKldowJqQ8NET5lMzVFgTHLMtUw4OgGQ+WctY3CSyRXrh+0nGhk6WdWY77lwqwu2S2d6XrIJf4LD2mWTdoc9L2Eq15EOa1bTJrsVCsjvhlCM49Of6AoEGHVA7ng
NNTP-Posting-Date: Sat, 18 Feb 2012 20:38:36 +0000 (UTC)
Injection-Info: news.albasani.net; logging-data="9tXHP6Df5a8R5e1UpcQbygq8VLfIucVRsoHIThu6g13kYpSYxnJfiFIgRIXZIl4tV/q7ZeprsG0BMbbcsPGiyBCncyOMdx2F6kfl/sKJ2hU1WC8jrmdEpNEJDU9otQoh"; mail-complaints-to="ab...@albasani.net"
User-Agent: MT-NewsWatcher/3.5.1 (Intel Mac OS X)
Cancel-Lock: sha1:ecGsrqBEf+r1v0cQlb+0Net8glc=
X-Received-Bytes: 7161
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

In article <9qac48Fic...@mid.individual.net>,
 Pascal Costanza <p...@p-cos.net> wrote:

> On 18/02/2012 19:07, RG wrote:
> > In article<9qa52aFr9...@mid.individual.net>,
> >   Pascal Costanza<p...@p-cos.net>  wrote:
> >
> >> On 18/02/2012 18:09, RG wrote:
> >>> In article<9q9vlfFjj...@mid.individual.net>,
> >>>    Pascal Costanza<p...@p-cos.net>   wrote:
> >>>
> >>>> If you argue for dropping the package system, and replacing it with
> >>>> something else, you need to provide an answer here...
> >>>
> >>> I have NEVER argued for DROPPING the package system.
> >>
> >> So what are you arguing for?
> >
> > http://rondam.blogspot.com/2010/02/new-and-improved-lexicons-now-50-lexier.h
> > tml
> 
> I see. I wasn't aware (anymore) that you're suggesting a mapping between 
> your lexicons to packages. Considering what you seem to think is the 
> major problem with packages, this may still be overkill.
> 
> A problem in the way how you word your concerns is that you describe the 
> package system as fundamentally flawed, but the package system is 
> actually not the source of the problem you have. It's rather a detail of 
> how the read algorithm in Common Lisp works.

I guess it depends on your definition of "fundamentally flawed."  The 
whole point of having symbols in the first place is that they are 
automatically constructed when reading Lisp source code.  You can 
construct a legal Lisp program without using the reader (except to 
bootstrap the process) by doing something like this:

(let ((cl-package (find-package "COMMON-LISP"))
      (my-package (or (find-package "foo" (make-package "foo")))))
  (list (intern "DEFUN" cl-package) (intern "my-fun" my-package)
        (list (intern "arg1" my-package) (intern "arg2" my-package) ...

So yes, it is technically true that my concern is (to a large extent) 
about "a detail of how the read algorithm in Common Lisp works."  But it 
is IMHO a rather important detail.

> What you suggest under the link above is essentially a different read 
> algorithm, where symbols that cannot be found are not automatically 
> interned, but rather patched up in such a way that they find their 
> actual definition later on during evaluation.

No.  Lexicons use the standard Lisp reader algorithm.

Lexicons are not "better packages."  They are fundamentally different 
from packages.  They map symbols (or to be strictly technically correct, 
identifiers, which in CL happen to be symbols) onto bindings.  Packages 
map strings onto symbols.  Lexicons are first-class global lexical 
environments.  Packages are hash tables from strings onto symbols.  
Lexicons do what they do at macroexpand/compile time.  Packages (mostly) 
do what they do at read time.  They are as different as two 
computational concepts can be.  If you do not see that then you do not 
understand what lexicons are.

> (This reminds me of the 
> delayed finalization of CLOS classes, which ensures that superclasses 
> don't have to be fully defined when a defclass form is evaluated.)

Yes, delayed binding of lexical references is very similar to many other 
forms of delayed binding in Lisp, and has many of the same advantages.

> I guess this way of patching up / delaying symbol interning can probably 
> be provided without the need to build a whole package system replacement 
> around it. This could even be a compatible extension of Common Lisp 
> (which doesn't really specify which read algorithm to use in a 
> read-eval-print-loop anyway, as far as I can tell).

Lexicons ARE a compatible extension to Common Lisp, since they are 
implemented in (mostly) portable Common Lisp.  (That this is possible is 
a sterling credit to the overall design of the language.)

> It's confusing that you criticize the package system for something that 
> it is ultimately not responsible for. What you should be criticizing is 
> Section 2.3.4 of the HyperSpec.

The idea of the package system being "responsible" for anything strikes 
me as a little bizarre.

What I am criticizing is one aspect of Common Lisp's design.  It is an 
aspect that involves elements of the reader, the package system, and 
indeed the whole concept of symbols and symbolic programming (though I 
don't often highlight that.  I have learned over the years that one must 
pick one's battles.)

The real fundamental problem, as succinctly as I can state it, is this: 
state in general is bad software engineering practice, to be avoided 
whenever possible (it's not always possible).  GLOBAL state is even 
worse and it is to be even more assiduously avoided.  And global state 
that is mutated by the language parser is a Really Bad Idea.  It leads 
to real problems of the sort that sends newbies to C.L.L. with the same 
questions year in and year out, and makes the Idiots Guide to CL 
Packages such a perennial best seller on the page rank circuit.  It also 
leads to experienced Lisp programmers arguing over whether they should 
be writing :FOO or #:FOO or "FOO" in their defpackage forms.

Whether that is a criticism of packages or the reader or something else 
is in the eye of the beholder, and in any case quite beside the point.  
The point is: there's a problem.  Reasonable people can disagree over 
how serious this problem is or what (if anything) should be done about 
it.  But that there is a problem is undeniable.  (Note that "there is no 
problem" and "there is no problem FOR ME" are not equivalent statements.)

rg