Subject: RE: bug#5971: 23.1.95; `delete' modifies default value instead of buffer-local value

From: "Drew Adams" <[email-masked]>
Date: Mon, 19 Apr 2010 08:09:38 -0700

> -----Original Message-----
> From: Stefan Monnier [mailto:[email-masked]] 
> Sent: Sunday, April 18, 2010 11:25 PM
> To: Drew Adams
> Subject: Re: bug#5971: 23.1.95; `delete' modifies default 
> value instead of buffer-local value
> 
> >> > This doesn't seem right to me.
> >>
> >> Why not?  That's the whole reason for the existence of two 
> >> functions: `delete' and `remove'.
> >
> > I'm aware that `delete' modifies the list structure and 
> > `remove' uses a copy.  What I don't understand is the
> > interaction with a default value instead of a buffer-local
> > value.  Why would `delete' cause the behavior described?
> 
> Why not?

Why? (You're not helping, just being evasive.) Why should modification of a
buffer-local value also modify the default value?

If this is not a product bug, it is at least a doc bug.

I can find nothing in the doc that mentions such behavior or would help one to
expect it or understand it. There is no explanation of any dependency between a
default value and buffer-local values, in the sense manifested. The only
explanation about buffer-local vars states that if a buffer-local value is not
yet set then the default value is used instead.

That does not explain why modification of a buffer-local value would affect also
the default value. The way the doc presents it, the two are conceptually
separate, including in terms of modification. There is nothing that I can see
that would lead one to expect that modification of a particular buffer-local
value would affect also the default value. This needs to be documented. It is
apparently an important way in which a buffer-local value is, well, not
buffer-local.

In the doc there are caveats about things like `let'-binding, but nothing is
said about this (arguably more serious or at least just as surprising)
bizarreness (er, design property).

Buffer-local variables are specific to Emacs Lisp (and other Lisps that have a
notion of editor buffers). Other, general Lisps do not have any notion of
buffer-local variables, so users of such Lisps who come to Emacs Lisp will not
have an understanding of this either. The Emacs Lisp doc needs to cover this
specific difference completely.

> PS: Closing this.  

Please reopen it - at least as a doc bug.

> You can continue the discussion on gnu.emacs.help
> (or even comp.lang.lisp, tho I never read that one and 
> they're probably not that familiar with buffer-local variables).

Precisely. Which is why this particular knot about buffer-local variables needs
to be documented in the Elisp manual. It is not, AFAICT.