unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: Paul Eggert <eggert@cs.ucla.edu>, Dmitry Gutov <dgutov@yandex.ru>
Cc: "Michael Heerdegen" <michael_heerdegen@web.de>,
	"Mattias Engdegård" <mattiase@acm.org>,
	ke.vigouroux@laposte.net, 40671@debbugs.gnu.org,
	"Richard Stallman" <rms@gnu.org>
Subject: bug#40671: [DOC] modify literal objects
Date: Tue, 28 Apr 2020 21:36:31 -0700 (PDT)	[thread overview]
Message-ID: <bc22edf5-9893-45da-8f54-64babafd0b23@default> (raw)
In-Reply-To: <d6431eb4-3a10-f777-9c40-14743520d55c@cs.ucla.edu>

> > You're _not_ using the language that's used
> > for Common Lisp.
> 
> In what sense does the language differ? Here's
> a quote from CLtL2 (page 115):
> 
> "it is an error to destructively modify any object that appears as a
> constant in executable code, whether within a 'quote' special form or as
> a self-evaluating form."
> 
> This use of the word "constant" is consistent
> with what's in the emacs-27 doc.

I quoted that same text as part of a proposal to
FIX the very gotcha that Elisp still suffers from.

I already addressed this, specifically.

See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40671#24

I specifically spoke of CLTL1, because its state,
and the state of CL at that time corresponds more
closely with that of Elisp and its doc, since CLTL1
predates the proposal to handle the gotcha
systematically.

> > Elisp corresponds to the behavior of CLTL1 in
> > this regard, not to any later update
> 
> Those older CLtL semantics were not well-defined,

Precisely the problem Emacs Lisp has!  And not
just not well defined.  Different behavior
sometimes between interpreted and compiled code.

That IS the gotcha - the fact that Elisp does NOT
raise an error systematically in all such cases.
It does NOT always prevent you from modifying a
constant, quoted list etc.

Elisp is like CL was BEFORE the proposal I quoted,
which was adopted as the CLTL2 text you quoted.

They fixed the problem for CL by redefining CL
to not have it.  For an implementation of CL to
follow the updated definition, it must provide
consistent behavior, preventing modification of
constants, quoted lists, etc.

Sound familiar yet?

> and to the extent that they were defined were not
> followed by Common Lisp implementations. It's not
> clear that the emacs-27 Elisp implementation
> corresponds to those older semantics, and it's
> also not clear that documenting CLtL1 semantics
> would be a good idea for Elisp.

The point is that the problem they fixed is the
problem Elisp still has.  Whether it is exactly
the same in all particulars is unimportant -
it's about the behavior being undefined and not
necessarily the same if interpreted or compiled.

I mentioned the CL proposal, to take effect
for CLTL2, quoting:

 "clarify that it is an error to destructively
  ^^^^^^^      ^^^^^^^^^^^^^^
  modify objects which are self-evaluating
  forms or which appear inside of a QUOTE
  special form."

Why "clarify"?  Because it was NOT stated as
part of the previous definition of CL that
that is an error.  And that meant that CL
implementations were NOT required to
systematically raise an error to enforce that.
They did NOT always prevent you from modifying
such thingies.

The proposal also said:

 "Disallowing modification of constants
  ^^^^^^^^^^^
  consistently in all situations, rather than
  ^^^^^^^^^^^^
  just in compiled code, is proposed because
                         ^^^^^^^^^^^
  in some compiled-only situations it may be
  difficult to distinguish between "compiled"
  and "interpreted" code."

That was the problem to be fixed, by raising an
error, i.e., by disallowing, in practice.  And
that's exactly the problem that Elisp still has:
it does NOT disallow (systematic error).  And no
amount of saying that it does (claiming you
"cannot" do it) changes that fact.

I quoted CLTL about the behavior before the
proposal, i.e., before systematically raising
an error:

 "implicit sharing of compiled data structures
  may result in unpredictable behavior if
  ^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^^^^
  destructive operations are performed. However,
  CLtL does not explicitly allow or disallow
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  destructive operations on constants."

And about that I said:

  Unpredictable behavior.  It doesn't say it's
                              ^^^^^^^
  always impossible to modify such things.  It
  ^^^^^^^^^^^^^^^^^
  says, in effect, don't try.
                   ^^^^^^^^^

  That's what we should say for Emacs Lisp, since
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  we do NOT "disallow modification of constants
  consistently in all situations."

  For Emacs Lisp this is a gotcha, so we need a
  SHOULD.  If it were enforced as a MUST then we
  wouldn't need such a caveat.

That's precisely the point.  We do NOT disallow.
We do NOT always raise an error.  We do NOT
always PREVENT changing quoted list structure etc.

AND SO we should NOT tell users that they CANNOT
do so - sometimes they CAN.  We should instead
tell them that they SHOULD NOT try to do so, and
if they do then the resulting behavior is undefined.
___

I said last message that I gave up.  And now I'm
literally repeating what I wrote 10 days ago.
You haven't heard, or you're not listening.  (And
my impression is that others have said the same as
I, or similar.)  Sorry, I'm done.





  reply	other threads:[~2020-04-29  4:36 UTC|newest]

Thread overview: 170+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-16 19:28 bug#40671: [DOC] modify literal objects Kevin Vigouroux via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-04-17 16:09 ` Mattias Engdegård
2020-04-17 16:37   ` Mattias Engdegård
2020-04-17 17:27     ` Eli Zaretskii
2020-04-18 20:10 ` Paul Eggert
2020-04-18 21:54   ` Drew Adams
2020-04-19  2:39     ` Noam Postavsky
2020-04-19 20:39     ` Paul Eggert
2020-04-19 21:01       ` Drew Adams
2020-04-19 21:16         ` Paul Eggert
2020-04-19 22:24           ` Drew Adams
2020-04-19 22:51             ` Paul Eggert
2020-04-20  5:32               ` Drew Adams
2020-04-22 17:36                 ` Paul Eggert
2020-05-01  3:03     ` Dmitry Gutov
2020-05-01  5:16       ` Drew Adams
2020-05-01 21:46       ` Paul Eggert
2020-05-01 23:37         ` Dmitry Gutov
2020-04-19  2:26   ` Richard Stallman
2020-04-19 13:56   ` Eli Zaretskii
2020-04-19 16:59     ` Mattias Engdegård
2020-04-19 19:21       ` Eli Zaretskii
2020-04-19 21:02       ` Paul Eggert
2020-04-19 21:11         ` Drew Adams
2020-04-19 21:57         ` Michael Heerdegen
2020-04-19 22:41           ` Paul Eggert
2020-04-19 23:45             ` Michael Heerdegen
2020-04-20  0:24               ` Paul Eggert
2020-04-20  0:53                 ` Michael Heerdegen
2020-04-20  3:23                   ` Paul Eggert
2020-04-20  3:36                     ` Michael Heerdegen
2020-04-22  6:30                       ` Paul Eggert
2020-04-20  5:54                     ` Drew Adams
2020-04-22 17:21                       ` Paul Eggert
2020-04-23  0:49                         ` Michael Heerdegen
2020-04-24  2:36                           ` Richard Stallman
2020-04-24 15:08                             ` Drew Adams
2020-04-25  1:58                               ` Paul Eggert
2020-04-24 16:39                             ` Mattias Engdegård
2020-04-24 16:46                               ` Dmitry Gutov
2020-04-25  2:21                                 ` Paul Eggert
2020-04-25  2:40                                   ` Dmitry Gutov
2020-04-25  3:20                                     ` Paul Eggert
2020-04-25 19:30                                       ` Dmitry Gutov
2020-04-26  3:49                                         ` Paul Eggert
2020-04-26 14:03                                           ` Dmitry Gutov
2020-04-26 14:19                                             ` Eli Zaretskii
2020-04-26 14:34                                               ` Dmitry Gutov
2020-04-26 15:46                                                 ` Eli Zaretskii
2020-04-26 16:02                                                   ` Dmitry Gutov
2020-04-26 16:58                                                     ` Eli Zaretskii
2020-04-26 17:39                                                       ` Dmitry Gutov
2020-04-26 18:14                                                         ` Eli Zaretskii
2020-04-26 18:32                                                           ` Dmitry Gutov
2020-04-26 18:41                                                             ` Eli Zaretskii
2020-04-26 18:53                                                               ` Dmitry Gutov
2020-04-26 18:57                                             ` Paul Eggert
2020-04-26 19:22                                               ` Philipp Stephani
2020-04-26 20:14                                                 ` Paul Eggert
2020-04-26 21:23                                               ` Dmitry Gutov
2020-04-26 23:13                                                 ` Paul Eggert
2020-04-27  0:53                                                   ` Dmitry Gutov
2020-04-27  1:49                                                     ` Paul Eggert
2020-04-28  3:05                                                       ` Dmitry Gutov
2020-04-28  8:17                                                         ` Paul Eggert
2020-04-28 13:54                                                           ` Dmitry Gutov
2020-04-28 17:59                                                             ` Paul Eggert
2020-04-28 18:46                                                               ` Dmitry Gutov
2020-04-28 19:20                                                                 ` Paul Eggert
2020-04-28 19:33                                                                   ` Dmitry Gutov
2020-04-28 20:09                                                                     ` Paul Eggert
2020-04-28 21:10                                                                       ` Dmitry Gutov
2020-04-28 23:10                                                                         ` Paul Eggert
2020-04-28 23:36                                                                           ` Dmitry Gutov
2020-04-28 23:53                                                                             ` Paul Eggert
2020-04-28 23:57                                                                               ` Dmitry Gutov
2020-04-28 23:53                                                                           ` Dmitry Gutov
2020-04-29  0:04                                                                             ` Paul Eggert
2020-04-29  0:14                                                                               ` Dmitry Gutov
2020-04-29  0:55                                                                           ` Drew Adams
2020-04-29  1:03                                                                             ` Dmitry Gutov
2020-04-29  1:15                                                                               ` Drew Adams
2020-04-29  1:27                                                                                 ` Michael Heerdegen
2020-04-29  1:38                                                                             ` Paul Eggert
2020-04-29  4:36                                                                               ` Drew Adams [this message]
2020-04-29 16:18                                                                                 ` Paul Eggert
2020-05-01  2:47                                                                                   ` Richard Stallman
2020-05-01  6:23                                                                                     ` Eli Zaretskii
2020-05-01  3:13                                                                               ` Dmitry Gutov
2020-05-01  5:15                                                                                 ` Drew Adams
2020-05-01 21:40                                                                                 ` Paul Eggert
2020-05-01 22:05                                                                                   ` Drew Adams
2020-05-01 22:28                                                                                     ` Paul Eggert
2020-05-02  1:07                                                                                   ` Dmitry Gutov
2020-05-02  6:28                                                                                     ` Paul Eggert
2020-05-02 15:42                                                                                       ` Dmitry Gutov
2020-05-02 19:35                                                                                         ` Paul Eggert
2020-05-03  1:30                                                                                           ` Dmitry Gutov
2020-05-03  7:40                                                                                             ` Paul Eggert
2020-05-03 16:44                                                                                               ` Dmitry Gutov
2020-05-03 20:48                                                                                                 ` Paul Eggert
2020-05-03 22:17                                                                                                   ` Dmitry Gutov
2020-05-03 22:18                                                                                                   ` Dmitry Gutov
2020-05-03 22:39                                                                                                     ` Paul Eggert
2020-05-03 22:53                                                                                                       ` Dmitry Gutov
2020-05-03 23:10                                                                                                         ` Paul Eggert
2020-05-04 10:16                                                                                                           ` Dmitry Gutov
2020-05-04 17:52                                                                                                             ` Paul Eggert
2020-05-05  1:39                                                                                                               ` Dmitry Gutov
2020-05-05  6:09                                                                                                                 ` Paul Eggert
2020-05-05 12:38                                                                                                                   ` Dmitry Gutov
2020-05-09  6:10                                                                                                                     ` Paul Eggert
2020-05-10  3:13                                                                                                                       ` Dmitry Gutov
2020-05-10 13:34                                                                                                                         ` Dmitry Gutov
2020-05-10 17:29                                                                                                                         ` Paul Eggert
2020-05-11  0:00                                                                                                                           ` Michael Heerdegen
2020-05-11  0:26                                                                                                                             ` Dmitry Gutov
2020-05-11  1:47                                                                                                                             ` Drew Adams
2020-05-11  1:54                                                                                                                               ` Dmitry Gutov
2020-05-11  2:33                                                                                                                                 ` Drew Adams
2020-05-11  2:56                                                                                                                               ` Michael Heerdegen
2020-05-11  4:21                                                                                                                                 ` Drew Adams
2020-05-11  4:51                                                                                                                                   ` Michael Heerdegen
2020-05-11  6:28                                                                                                                                     ` Paul Eggert
2020-05-11 13:57                                                                                                                                       ` Noam Postavsky
2020-05-11 22:36                                                                                                                                         ` Michael Heerdegen
2020-05-11 22:30                                                                                                                                       ` Michael Heerdegen
2020-05-12  3:20                                                                                                                                       ` Richard Stallman
2020-05-12  4:24                                                                                                                                         ` Michael Heerdegen
2020-05-13  3:57                                                                                                                                           ` Richard Stallman
2020-05-13  5:05                                                                                                                                             ` Michael Heerdegen
2020-05-14  5:14                                                                                                                                               ` Richard Stallman
     [not found]                                                                                                                                       ` <05BEF593-F16A-4DEE-98BC-653221F1F9EE@acm.org>
2020-05-17  0:11                                                                                                                                         ` Paul Eggert
2020-05-17  9:43                                                                                                                                           ` Mattias Engdegård
2020-05-17 16:38                                                                                                                                             ` Paul Eggert
2020-05-11  1:53                                                                                                                             ` Paul Eggert
2020-05-11  3:18                                                                                                                               ` Michael Heerdegen
2020-05-11  0:44                                                                                                                           ` Dmitry Gutov
2020-05-11  1:57                                                                                                                             ` Paul Eggert
2020-05-12  1:59                                                                                                                               ` Dmitry Gutov
2020-05-17  1:28                                                                                                                                 ` Paul Eggert
2020-05-17  5:02                                                                                                                                   ` Michael Heerdegen
2020-05-17 16:34                                                                                                                                     ` Paul Eggert
2020-05-17 12:39                                                                                                                                   ` Dmitry Gutov
2020-05-17 16:21                                                                                                                                     ` Paul Eggert
2020-05-05 17:40                                                                                                                   ` Drew Adams
2020-05-05 18:49                                                                                                                     ` Dmitry Gutov
2020-05-05 19:26                                                                                                                       ` Drew Adams
2020-05-05 20:48                                                                                                               ` Kevin Vigouroux via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-05-09  5:57                                                                                                                 ` Paul Eggert
2020-04-28 21:18                                                                       ` Dmitry Gutov
2020-04-28 17:25                                                           ` Drew Adams
2020-04-28 17:47                                                             ` Paul Eggert
2020-04-29  0:32                                                               ` Michael Heerdegen
2020-04-29  1:40                                                                 ` Paul Eggert
2020-04-29  4:40                                                                   ` Michael Heerdegen
2020-04-29  8:01                                                                     ` Eli Zaretskii
2020-04-29 16:36                                                                 ` Paul Eggert
2020-04-24 17:18                               ` Drew Adams
2020-04-25  3:38                               ` Richard Stallman
2020-04-25 18:26                                 ` Paul Eggert
2020-04-25  2:22                           ` Paul Eggert
2020-04-25  6:00                             ` Andreas Schwab
2020-04-25 18:23                               ` Paul Eggert
2020-04-28 23:52                             ` Michael Heerdegen
2020-04-21  1:25               ` Michael Heerdegen
2020-04-21  2:20                 ` Paul Eggert
2020-04-20  6:02             ` Drew Adams
2020-04-19 20:45     ` Paul Eggert
2020-04-20 14:10       ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bc22edf5-9893-45da-8f54-64babafd0b23@default \
    --to=drew.adams@oracle.com \
    --cc=40671@debbugs.gnu.org \
    --cc=dgutov@yandex.ru \
    --cc=eggert@cs.ucla.edu \
    --cc=ke.vigouroux@laposte.net \
    --cc=mattiase@acm.org \
    --cc=michael_heerdegen@web.de \
    --cc=rms@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).