GNU bug report logs - #78813
feature/igc: [PATCH] Make the array face_attr_sym readonly

Previous Next

Package: emacs;

Reported by: Helmut Eller <eller.helmut <at> gmail.com>

Date: Tue, 17 Jun 2025 08:50:02 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 78813 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Tue, 17 Jun 2025 08:50:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Helmut Eller <eller.helmut <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 17 Jun 2025 08:50:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Helmut Eller <eller.helmut <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: feature/igc: [PATCH] Make the array face_attr_sym readonly
Date: Tue, 17 Jun 2025 10:49:10 +0200
[Message part 1 (text/plain, inline)]
Tags: patch

This is a proposal to make the variable face_attr_sym const.  Mostly so
that it's more obvious that it doesn't need to be traced by the GC.

[0001-Make-the-array-face_attr_sym-readonly.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Tue, 17 Jun 2025 15:30:03 GMT) Full text and rfc822 format available.

Message #8 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Helmut Eller <eller.helmut <at> gmail.com>
Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Tue, 17 Jun 2025 15:28:57 +0000
"Helmut Eller" <eller.helmut <at> gmail.com> writes:

> Tags: patch
>
> This is a proposal to make the variable face_attr_sym const.  Mostly so
> that it's more obvious that it doesn't need to be traced by the GC.

Makes sense to me, but should be on master.  Is this okay for master?

There are alternatives, such as using switch statements rather than a
const array, which is what the rest of the code in xfaces.c does.

In any case, we should also add a comment explaining the unusual GC
situation, unless we can resolve it entirely by using a staticpro'd
vector or something.

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Tue, 17 Jun 2025 15:37:01 GMT) Full text and rfc822 format available.

Message #11 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 78813 <at> debbugs.gnu.org, eller.helmut <at> gmail.com
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Tue, 17 Jun 2025 18:36:14 +0300
> Date: Tue, 17 Jun 2025 15:28:57 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
> 
> "Helmut Eller" <eller.helmut <at> gmail.com> writes:
> 
> > Tags: patch
> >
> > This is a proposal to make the variable face_attr_sym const.  Mostly so
> > that it's more obvious that it doesn't need to be traced by the GC.
> 
> Makes sense to me, but should be on master.  Is this okay for master?

What are the advantages of making this change on master?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Fri, 20 Jun 2025 10:19:05 GMT) Full text and rfc822 format available.

Message #14 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 78813 <at> debbugs.gnu.org, eller.helmut <at> gmail.com
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Fri, 20 Jun 2025 10:17:46 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Tue, 17 Jun 2025 15:28:57 +0000
>> From: Pip Cet <pipcet <at> protonmail.com>
>> Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
>>
>> "Helmut Eller" <eller.helmut <at> gmail.com> writes:
>>
>> > Tags: patch
>> >
>> > This is a proposal to make the variable face_attr_sym const.  Mostly so
>> > that it's more obvious that it doesn't need to be traced by the GC.
>>
>> Makes sense to me, but should be on master.  Is this okay for master?
>
> What are the advantages of making this change on master?

As on feature/igc, the change only makes it harder to break things by
changing the rest of the code; there's no functional change on either
branch, and while Helmut's patch is likely to reduce code size a little,
that's not the reason we should install it.

I don't know whether we actually finally agreed that unprotected static
Lisp_Objects should be phased out, but IIRC that's what Gerd suggested
very strongly.  This change is part of that effort.

I'd prefer LISPSYM_INITIALLY to go away at some point soon, so we can at
least benchmark whether putting lispsym into MPS-managed memory makes
things better or worse.  However, the current code uses
LISPSYM_INITIALLY implicitly, so using it explicitly would make such
changes easier, not harder.

Helmut, I notice both your code and the existing code omit the
LFACE_FAMILY_INDEX case.  Do you happen to know if there's a reason for
that?  If there is, we should add a comment to make sure no one attempts
to reuse this vector in a context where the QCfamily symbol is needed.

An alternative would be to make face_attr_sym a function containing a
switch statement.  Either approach would reduce the different kinds of
unusual static Lisp_Object-containing structures by one: we either use
symbols in code, which is fine, or we do the same thing as the font
drivers (const Lisp_Objects initialized with LISPSYM_INITIALLY).

We could also simply add a comment explaining the unusual situation
(and, possibly, the LFACE_FAMILY_INDEX case).

Pip





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Fri, 20 Jun 2025 10:40:02 GMT) Full text and rfc822 format available.

Message #17 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 78813 <at> debbugs.gnu.org, eller.helmut <at> gmail.com
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Fri, 20 Jun 2025 13:38:57 +0300
> Date: Fri, 20 Jun 2025 10:17:46 +0000
> From: Pip Cet <pipcet <at> protonmail.com>
> Cc: eller.helmut <at> gmail.com, 78813 <at> debbugs.gnu.org
> 
> "Eli Zaretskii" <eliz <at> gnu.org> writes:
> 
> >> Date: Tue, 17 Jun 2025 15:28:57 +0000
> >> From: Pip Cet <pipcet <at> protonmail.com>
> >> Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
> >>
> >> "Helmut Eller" <eller.helmut <at> gmail.com> writes:
> >>
> >> > Tags: patch
> >> >
> >> > This is a proposal to make the variable face_attr_sym const.  Mostly so
> >> > that it's more obvious that it doesn't need to be traced by the GC.
> >>
> >> Makes sense to me, but should be on master.  Is this okay for master?
> >
> > What are the advantages of making this change on master?
> 
> As on feature/igc, the change only makes it harder to break things by
> changing the rest of the code; there's no functional change on either
> branch, and while Helmut's patch is likely to reduce code size a little,
> that's not the reason we should install it.
> 
> I don't know whether we actually finally agreed that unprotected static
> Lisp_Objects should be phased out, but IIRC that's what Gerd suggested
> very strongly.  This change is part of that effort.

Thanks, but I asked about this change on its own, not as part of some
effort (which AFAIU is on the igc branch, not on master).  IOW,
suppose we release Emacs 31 without the MPS support (something I hope
will not need to happen, but just for the sake of this sub-thread):
what would that change give us, considering the fact that this code
was there since Emacs 21?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Fri, 20 Jun 2025 18:28:05 GMT) Full text and rfc822 format available.

Message #20 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Helmut Eller <eller.helmut <at> gmail.com>
To: Pip Cet <pipcet <at> protonmail.com>
Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Fri, 20 Jun 2025 20:27:15 +0200
On Fri, Jun 20 2025, Pip Cet wrote:

> Helmut, I notice both your code and the existing code omit the
> LFACE_FAMILY_INDEX case.  Do you happen to know if there's a reason for
> that?  If there is, we should add a comment to make sure no one attempts
> to reuse this vector in a context where the QCfamily symbol is needed.

No.  I just copied the existing code and edited it a bit.

Helmut




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Fri, 20 Jun 2025 18:30:02 GMT) Full text and rfc822 format available.

Message #23 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Helmut Eller <eller.helmut <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 78813 <at> debbugs.gnu.org, Pip Cet <pipcet <at> protonmail.com>
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Fri, 20 Jun 2025 20:29:40 +0200
On Fri, Jun 20 2025, Eli Zaretskii wrote:

> Thanks, but I asked about this change on its own, not as part of some
> effort (which AFAIU is on the igc branch, not on master).  IOW,
> suppose we release Emacs 31 without the MPS support (something I hope
> will not need to happen, but just for the sake of this sub-thread):
> what would that change give us, considering the fact that this code
> was there since Emacs 21?

It would add some minor protection against accidental modifications of
the face_attr_sym array.

Helmut




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#78813; Package emacs. (Fri, 20 Jun 2025 18:32:06 GMT) Full text and rfc822 format available.

Message #26 received at 78813 <at> debbugs.gnu.org (full text, mbox):

From: Pip Cet <pipcet <at> protonmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 78813 <at> debbugs.gnu.org, eller.helmut <at> gmail.com
Subject: Re: bug#78813: feature/igc: [PATCH] Make the array face_attr_sym
 readonly
Date: Fri, 20 Jun 2025 18:31:32 +0000
"Eli Zaretskii" <eliz <at> gnu.org> writes:

>> Date: Fri, 20 Jun 2025 10:17:46 +0000
>> From: Pip Cet <pipcet <at> protonmail.com>
>> Cc: eller.helmut <at> gmail.com, 78813 <at> debbugs.gnu.org
>>
>> "Eli Zaretskii" <eliz <at> gnu.org> writes:
>>
>> >> Date: Tue, 17 Jun 2025 15:28:57 +0000
>> >> From: Pip Cet <pipcet <at> protonmail.com>
>> >> Cc: 78813 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
>> >>
>> >> "Helmut Eller" <eller.helmut <at> gmail.com> writes:
>> >>
>> >> > Tags: patch
>> >> >
>> >> > This is a proposal to make the variable face_attr_sym const.  Mostly so
>> >> > that it's more obvious that it doesn't need to be traced by the GC.
>> >>
>> >> Makes sense to me, but should be on master.  Is this okay for master?
>> >
>> > What are the advantages of making this change on master?
>>
>> As on feature/igc, the change only makes it harder to break things by
>> changing the rest of the code; there's no functional change on either
>> branch, and while Helmut's patch is likely to reduce code size a little,
>> that's not the reason we should install it.
>>
>> I don't know whether we actually finally agreed that unprotected static
>> Lisp_Objects should be phased out, but IIRC that's what Gerd suggested
>> very strongly.  This change is part of that effort.
>
> Thanks, but I asked about this change on its own, not as part of some

That's the first paragraph: mainly, it changes code to be less risky in
its no-need-to-GC assumptions, so the very minor changes which would
cause those assumptions to be violated won't result in very tricky bugs.

> effort (which AFAIU is on the igc branch, not on master).  IOW,

Sorry I'm asking for clarification, but my impression was the igc branch
was to change very little in the !HAVE_MPS case, because general GC
cleanups such as this one make more sense on the main branch: fewer
merge conflicts, we'll see the benefits before merging the branch (or
even if for some reason we never do), a better git history, better test
coverage for pre-push testing.

(This isn't about improving code specific to the old GC; I understand you
don't want it touched and I'm working on the assumption that it'll
become unused or go away entirely at some point.)

If we decide not to reduce the number of static objects at this time and
focus on getting things to work, I can live with that and continue
working on the branch, but I can't speak for Helmut, of course.

Diverting all work that's even slightly related to GC to the feature/igc
branch and keeping master in its current state seems like a very risky
proposal to me.

So what shall we do?

> suppose we release Emacs 31 without the MPS support (something I hope
> will not need to happen, but just for the sake of this sub-thread):
> what would that change give us, considering the fact that this code
> was there since Emacs 21?

Perhaps Helmut can add something to what I wrote above.

Pip





This bug report was last modified today.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.