Subject: Re: bug#40671: [DOC] modify literal objects

From: Paul Eggert <[email-masked]>
Date: Mon, 4 May 2020 23:09:19 -0700

On 5/4/20 6:39 PM, Dmitry Gutov wrote:

> if we just make it a literal:
> 
> (let ((x '(0 . 0))) (setcar x 1))
> 
> ...it also becomes okay to modify it

No, because the literal might be placed in read-only storage of some sort.

> In the meantime, what do you think about the attached patch?

Most of it is OK, but it goes too far in removing useful practical advice about
not doing "dangerous mutations" (to use the terminology you prefer). The defspec
for quote, the defuns for aset, setcar and setcdr, and the square-bracket
notation for vectors, should all point to the Dangerous Mutations section.

Also, the section on Dangerous Mutations should not imply that self-evaluating
forms are the only way to get objects that are dangerous to mutate, as there are
other ways to get such objects.

The section Dangerous Mutations is really about Mutations, not merely about
Dangerous Mutations. For example, it talks about modifying constant variables.
So I suggest changing its name to just "Mutations". This will help us in future
versions of Emacs, in which at least some of these mutations should become
non-dangerous.