all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Helmut Eller <eller.helmut@gmail.com>
Cc: gerd.moellmann@gmail.com, emacs-devel@gnu.org
Subject: Re: Collecting markers with MPS (was: STatus of MPS branch)
Date: Wed, 24 Apr 2024 10:44:17 +0300	[thread overview]
Message-ID: <86sezb2oj2.fsf@gnu.org> (raw)
In-Reply-To: <87cyqfjk6n.fsf@gmail.com> (message from Helmut Eller on Wed, 24 Apr 2024 09:26:08 +0200)

> From: Helmut Eller <eller.helmut@gmail.com>
> Cc: emacs-devel <emacs-devel@gnu.org>
> Date: Wed, 24 Apr 2024 09:26:08 +0200
> 
> On Sat, Apr 20 2024, Gerd Möllmann wrote:
> 
> > - Figure out what is done in the old GC in garbage_collect that is not
> >   directly related to GC, and how to do that when GC is concurrent.
> >   Examples are buffer undo_list, window prev_buffers/next_buffers
> 
> In the igc branch, markers are currently not collected because they are
> referenced from the buffer's chain of markers.  The old GC has special
> code to break this link.  There is also special code to break links from
> the undo-list to markers.
> 
> With the MPS, we could introduce explicit weak reference objects,
> similar to WeakRef in Javascript[*].  Buffers would then, instead of the
> current chain of markers, have a list of weak references to markers.
> (Markers would no longer have the embedded "next" field.)  The same for
> the undo-list: instead of markers, it would contain weak references to
> markers.
> 
> This would allow markers to be collected, but the empty weak-ref objects
> would still be in the undo-list and the buffer's markers-list.  A timer
> could periodically go through those lists and remove the empty
> weak-refs.
> 
> Does this sound like a reasonable plan?  To me, it sounds like it will
> require relatively big changes to the buffer code.  Much bigger than the
> 200 or so lines of special code in the old GC.  Also, the undo-list is
> visible to Lisp code, so those weak reference objects in there must be
> new types of Lisp objects.
> 
> On the plus side, explicit weak reference objects could make some things
> easier to understand and might be more widely useful to Lisp
> programmers.
> 
> What do you think?  Is there an more elegant alternative?

My opinions here mean very little for now, as I don't yet have a good
view of the issues, but in general: why do we have to do everything
the old GC did in the new GC?  Can't we leave some of the stuff to be
done in the main thread?  For example, the old GC would compact buffer
text, Lisp strings, and font caches -- this cannot be done from a
different thread, AFAIU.  Why not keep doing this from the main
thread, like we do now?  They are not really directly relevant to GC,
just some housekeeping tasks that need to be done from time to time.
Yes, it would mean the main thread still needs to stop from time to
time, but for much shorter periods of time.  And it will allow us to
sidestep the significant changes like those mentioned above, some of
which would mean Lisp-level changes that will affect Lisp programs.

If leaving some of this stuff in the main thread is reasonable, we
could add the above two jobs to that part, which would allow us to
leave the existing related code almost intact.

Does this make sense?



  reply	other threads:[~2024-04-24  7:44 UTC|newest]

Thread overview: 149+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-20  9:34 STatus of MPS branch Gerd Möllmann
2024-04-20 14:56 ` Michael Albinus
2024-04-20 15:08   ` Gerd Möllmann
2024-04-20 15:32     ` Michael Albinus
2024-04-20 17:37       ` Gerd Möllmann
2024-04-21  7:39         ` Michael Albinus
2024-04-21  7:56           ` Gerd Möllmann
2024-04-21  8:00             ` Gerd Möllmann
2024-04-21  8:04               ` Michael Albinus
2024-04-21  8:08                 ` Gerd Möllmann
2024-04-21  8:18                   ` Michael Albinus
2024-04-21  8:28                     ` Gerd Möllmann
2024-04-21  8:17           ` Gerd Möllmann
2024-04-21  9:43             ` Michael Albinus
2024-04-21 10:07               ` Gerd Möllmann
2024-04-21 10:58                 ` Tramp tests in MPS branch (was: STatus of MPS branch) Michael Albinus
2024-04-21 12:44                   ` Tramp tests in MPS branch Gerd Möllmann
2024-04-21  9:29           ` STatus of " Eli Zaretskii
2024-04-21  4:38 ` Gerd Möllmann
2024-04-21  5:31   ` Eli Zaretskii
2024-04-21  5:39     ` Gerd Möllmann
2024-04-21  9:04       ` Eli Zaretskii
2024-04-21  9:17         ` Gerd Möllmann
2024-04-21  6:15 ` Gerd Möllmann
2024-04-21  9:09   ` Eglot tests on MPS branch (was: STatus of MPS branch) Eli Zaretskii
2024-04-21  9:53     ` João Távora
2024-04-21 10:13       ` Eglot tests on MPS branch Gerd Möllmann
2024-04-21 11:01         ` João Távora
2024-04-21 10:55       ` Eglot tests on MPS branch (was: STatus of MPS branch) Eli Zaretskii
2024-04-21  7:49 ` STatus of MPS branch Gerd Möllmann
2024-04-21  8:45   ` Gerd Möllmann
2024-04-21  9:08     ` Andrea Corallo
2024-04-21  9:33     ` Native compilation on " Eli Zaretskii
2024-04-21 10:17       ` Gerd Möllmann
2024-04-21 13:07         ` Andrea Corallo
2024-04-22  7:15           ` Gerd Möllmann
2024-04-22 22:02             ` Andrea Corallo
2024-04-23  3:11               ` Gerd Möllmann
2024-04-23 16:09               ` Gerd Möllmann
2024-04-23 19:43                 ` Andrea Corallo
2024-04-24 12:49                   ` Gerd Möllmann
2024-04-24 18:14                     ` Andrea Corallo
2024-04-24 18:28                       ` Gerd Möllmann
2024-04-24 20:54                         ` Andrea Corallo
2024-04-25  4:33                           ` Gerd Möllmann
2024-04-25  5:50                             ` Andrea Corallo
2024-04-25  7:18                               ` Gerd Möllmann
2024-04-25  8:06                                 ` Andrea Corallo
2024-04-25  8:15                                   ` Gerd Möllmann
2024-04-25  8:57                                     ` Gerd Möllmann
2024-04-25  9:42                                     ` Andrea Corallo
2024-04-25 11:33                                       ` Gerd Möllmann
2024-04-25  5:24                           ` Eli Zaretskii
2024-04-25  5:48                             ` Andrea Corallo
2024-04-25 15:20                               ` Eli Zaretskii
2024-04-26 10:15                                 ` Gerd Möllmann
2024-04-21  8:58   ` STatus of " Andrea Corallo
2024-04-21  9:19     ` Gerd Möllmann
2024-04-21  9:30   ` Native compilation on MPS branch (was: STatus of MPS branch) Eli Zaretskii
2024-04-21 14:39 ` STatus of MPS branch Helmut Eller
2024-04-21 15:37   ` Gerd Möllmann
2024-04-21 15:52     ` Eli Zaretskii
2024-04-21 20:24     ` Helmut Eller
2024-04-22  4:58       ` Gerd Möllmann
2024-04-22  5:28       ` Gerd Möllmann
2024-04-22  6:15         ` MPS signals and Emacs (was: STatus of MPS branch) Eli Zaretskii
2024-04-22  6:44           ` MPS signals and Emacs Paul Eggert
2024-04-22  7:19             ` Gerd Möllmann
2024-04-22  7:40               ` Paul Eggert
2024-04-22  7:49                 ` Gerd Möllmann
2024-04-22  8:09                   ` Eli Zaretskii
2024-04-22  8:27                     ` Gerd Möllmann
2024-04-22  8:55                       ` Eli Zaretskii
2024-04-22  9:02                         ` Mattias Engdegård
2024-04-22  9:02                         ` Gerd Möllmann
2024-04-22  9:18                           ` Eli Zaretskii
2024-04-22  9:29                             ` Gerd Möllmann
2024-04-22  9:41                               ` Eli Zaretskii
2024-04-22 10:22                                 ` Gerd Möllmann
2024-04-22 10:46                                   ` Eli Zaretskii
2024-04-22 11:00                                     ` Gerd Möllmann
2024-04-22 12:01                                       ` Eli Zaretskii
2024-04-22 12:16                                         ` Gerd Möllmann
2024-04-22 10:54                                   ` Eli Zaretskii
2024-04-22 11:05                                     ` Gerd Möllmann
2024-04-22 19:41                   ` Paul Eggert
2024-04-22 20:55                     ` Gerd Möllmann
2024-04-22 22:12                       ` Paul Eggert
2024-04-23  3:15                         ` Gerd Möllmann
     [not found]                       ` <87le54g1h2.fsf@dick>
2024-04-23  5:51                         ` Gerd Möllmann
2024-04-23  6:35                           ` Helmut Eller
2024-04-23  6:45                             ` Gerd Möllmann
2024-04-23  6:53                               ` Helmut Eller
2024-04-23 14:29                                 ` Gerd Möllmann
     [not found]                                   ` <87sezbsmsd.fsf@dick>
2024-04-24  5:03                                     ` Gerd Möllmann
2024-04-22  7:46               ` Eli Zaretskii
2024-04-22  7:55                 ` Gerd Möllmann
2024-04-22 14:10             ` Helmut Eller
2024-04-22 14:42               ` Eli Zaretskii
2024-04-22 22:06                 ` Paul Eggert
2024-04-23  7:04                   ` Eli Zaretskii
2024-04-22  5:36       ` STatus of MPS branch Gerd Möllmann
2024-04-22  5:50         ` Gerd Möllmann
2024-04-22 15:09           ` Helmut Eller
2024-04-22 17:02             ` Gerd Möllmann
2024-04-24  7:26 ` Collecting markers with MPS (was: STatus of MPS branch) Helmut Eller
2024-04-24  7:44   ` Eli Zaretskii [this message]
2024-04-24  8:56     ` Collecting markers with MPS Helmut Eller
2024-04-24  9:17       ` Gerd Möllmann
2024-04-24 10:22       ` Eli Zaretskii
2024-04-24 10:27         ` Gerd Möllmann
2024-04-24 10:58           ` Gerd Möllmann
2024-04-24 13:32             ` Eli Zaretskii
2024-04-24 13:51               ` Gerd Möllmann
2024-04-24 15:03         ` Helmut Eller
2024-04-24 15:54           ` Eli Zaretskii
2024-04-24 16:21             ` Helmut Eller
2024-04-24 16:26               ` Eli Zaretskii
2024-04-24 16:50                 ` Gerd Möllmann
2024-04-24 19:18                 ` Helmut Eller
2024-04-24 19:55                   ` Gerd Möllmann
2024-04-25  7:38                   ` Mattias Engdegård
2024-04-24  9:08     ` Gerd Möllmann
2024-04-24 19:03       ` Helmut Eller
2024-04-24 20:02         ` Gerd Möllmann
2024-04-24 20:13           ` Helmut Eller
2024-04-24 20:42             ` Gerd Möllmann
2024-04-25  9:44       ` Helmut Eller
2024-04-25 11:44         ` Gerd Möllmann
2024-04-25 16:04 ` basic questions on MPS Andrea Corallo
2024-04-25 17:51   ` Helmut Eller
2024-04-25 18:48     ` Eli Zaretskii
2024-04-25 18:53     ` Gerd Möllmann
2024-04-25 19:26     ` Vibhav Pant
2024-04-26  6:36       ` Helmut Eller
2024-04-26  7:25         ` Gerd Möllmann
2024-04-26 15:07         ` vibhavp
2024-04-26  6:42       ` Gerd Möllmann
2024-04-27  0:20     ` Richard Stallman
2024-04-27  8:41       ` Helmut Eller
2024-04-28 22:44         ` Richard Stallman
2024-04-29  4:27           ` Helmut Eller
2024-04-29 22:40             ` Richard Stallman
2024-04-25 18:41   ` Eli Zaretskii
2024-04-25 18:53     ` Andrea Corallo
2024-04-25 18:56       ` Gerd Möllmann
2024-04-25 19:29         ` Andrea Corallo
2024-04-25 19:03       ` Eli Zaretskii
2024-04-25 19:09         ` Andrea Corallo

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

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

  git send-email \
    --in-reply-to=86sezb2oj2.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=eller.helmut@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=gerd.moellmann@gmail.com \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.