Newsgroups: comp.lang.lisp
Path: cantaloupe.srv.cs.cmu.edu!rochester!udel!news.mathworks.com!newsfeed.internetmci.com!howland.reston.ans.net!EU.net!peer-news.britain.eu.net!newsfeed.ed.ac.uk!edcogsci!jeff
From: jeff@cogsci.ed.ac.uk (Jeff Dalton)
Subject: Re: Immutable function bindings (was Re: ISO/IEC CD 13816 -- ISLisp)
Message-ID: <DKoA6E.M69.0.macbeth@cogsci.ed.ac.uk>
Keywords: islisp, common lisp, interpreter
Organization: Centre for Cognitive Science, Edinburgh, UK
References: <4b35de$ilh@goanna.cs.rmit.EDU.AU> <MAD.95Dec21180804@tanzanite.math.keio.ac.jp> <4bfatn$9du@nz12.rz.uni-karlsruhe.de>
Date: Thu, 4 Jan 1996 19:59:02 GMT
Lines: 38

In article <4bfatn$9du@nz12.rz.uni-karlsruhe.de> haible@ilog.fr (Bruno Haible) writes:
>
>The major mistake is the design of CL was to consider debugging commands
>and features (such as redefinability of functions) as being part of the
>language, hence meaningful in files to be compiled, and this is what
>ISLisp tries to address.

That is at least very misleading.  You, and the others who
take this line, need to bear in mind that things are not that
simple and clear-cut.

It's true that Common Lisp has some debugging features in the
"language".  TRACE is a good example.  It's questionable whether
this was a mistake rather than just one of several reasonably
good ways of doing things.  It's a bit extreme, to say the least,
to say it's "the major mistake in the design of Common Lisp".

In any case, function redefinition is in another category.

No one says assignment to global variables is a debugging command, or
meaningless in files to be compiled.  Redefining a function is not all
that different.  In a "one namespace" Lisp (such as Scheme), it's the
same.  Moreover, in some programs redefining functions at run-time
makes sense.  I've written a number of programs that redefine
functions in ways that are not debugging or development.  And I
compile the code as well.

ISLisp was supposed to do something that EuLisp was also supposed
to do, namely to leave function redefinition out of the language
and leave it up to implementations.  The idea was to avoid saying
that conforming implementations had to suppose redefinition, and
hence to allow (as conforming) implementations that performed
certain kinds of static analysis.

(I say "supposed", because it's possible people have messed it up
and ended up going further than they should have.)

-- jd
