Subject: bug#77656: [PATCH] Don't escape "." in `prin1' unless followed by "?" or nothing

From: Spencer Baugh <[email-masked]>
Date: Tue, 15 Apr 2025 11:48:00 -0400

Stefan Monnier <[email-masked]> writes:

>>>> This is a followup to 637dde4aba921435f78d0de769ad74c4f3230aa6, which
>>>> removed some unnecessary escaping of "." and "?" when printing symbols
>>>> in prin1.
>>>>
>>>> This change removes more unnecessary escaping of "."; "." only
>>>> needs to be escaped when it's the entire symbol or if it's
>>>> followed by a "?".
>>>>
>>>> (Actually, if we always escaped "?" (which was the case before
>>>> 637dde4aba92) then "." only ever needs to be escaped when
>>>> string_to_number returns non-nil.  So 637dde4aba92 could have
>>>> just dropped the escaping of "." with no other changes, if it
>>>> didn't also remove escaping of "?")
>>>
>>> Any objections or comments, anyone?
>
> No real objection, but I'm a bit worried that it seems this is designed
> based on the idea that `prin1` should be `read`able by the same Emacs
> that printed it, whereas I think it should aim to generate output
> that's `read`able also by past and future Emacsen and that it shouldn't
> unduly restrict future changes to our lexical rules.
>
> I *think* the proposed change is OK in this respect, but at the same
> time I wonder if the gain is really worth the risk.

Yes, to be clear I think (though I haven't tested on truly ancient
Emacsen) that this is readable by all past versions of Emacs so it's
good in that department.

As for future Emacsen, I contend that we won't want to change how this
lexes in the future - it would break let-alist, for one thing.

Incidentally, making it easier to work with let-alist was one of my main
motivations for this change, since it ubiquitously uses symbols which
start with ".".