all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Tomas Hlavaty <tom@logand.com>
Cc: emacs-devel@gnu.org
Subject: Re: using finalizers
Date: Fri, 31 Dec 2021 14:27:23 +0200	[thread overview]
Message-ID: <83ilv5gdsk.fsf@gnu.org> (raw)
In-Reply-To: <87v8z5nmsp.fsf@logand.com> (message from Tomas Hlavaty on Fri, 31 Dec 2021 10:31:02 +0100)

> From: Tomas Hlavaty <tom@logand.com>
> Cc: emacs-devel@gnu.org
> Date: Fri, 31 Dec 2021 10:31:02 +0100
> 
> On Fri 31 Dec 2021 at 09:50, Eli Zaretskii <eliz@gnu.org> wrote:
> > I think that the assumption that a call to garbage-collect will
> > necessarily call the finalizer is also problematic: there's usually no
> > simple way to make sure there are no references left to the object,
> 
> This breaks my expectations.  Could you explain that more?

The main aspect to have in mind is that your Lisp code has no direct
control on when a given Lisp object is no longer referenced by any
other live object.  And even if you take care to do that on the Lisp
level (something that is notoriously hard, if possible), GC also scans
the C stack for anything that looks like a reference to a Lisp object,
and marks any such objects as not (yet) collectible.  And your Lisp
program has no control on what's on the C stack.

> Does it mean that for example thunk-delay leaks even though it releases
> the reference to the body thunk?

If GC doesn't collect an object right away, it doesn't yet mean we
have a leak.  As long as the object is collected "eventually", we are
fine.

> Does it mean that setting reference to nil in order to dispose an object
> (as in my original example) is futile?

It doesn't necessarily guarantee GC will collect the object, yes.

> > and GC could have its own ideas when to actually garbage-collect an
> > object.
> 
> I don't think timing is an issue.  I think the expectation from gc is
> that it collects the object "eventually as needed".

That does happen, but you seem to expect more: you expect that the
object is collected as soon as you do something in Lisp to break the
binding between the object and the variable that was bound to it.



  reply	other threads:[~2021-12-31 12:27 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-30 22:43 using finalizers Tomas Hlavaty
2021-12-31  2:46 ` LdBeth
2021-12-31  3:29   ` Stefan Monnier
2021-12-31  3:36     ` Stefan Monnier
2021-12-31  4:30     ` LdBeth
2021-12-31  4:43       ` LdBeth
2021-12-31  6:28   ` Tomas Hlavaty
2021-12-31 10:59     ` LdBeth
2021-12-31 11:18       ` Tomas Hlavaty
2021-12-31 11:41         ` LdBeth
2021-12-31 12:01           ` Tomas Hlavaty
2022-01-01 17:00     ` Stefan Monnier
2022-01-01 20:25       ` Tomas Hlavaty
2022-01-01 20:47         ` Stefan Monnier
2022-01-01 22:55           ` Tomas Hlavaty
2022-01-01 23:18             ` Stefan Monnier
2022-01-01 23:47               ` Tomas Hlavaty
2022-01-01 23:26             ` Tomas Hlavaty
2021-12-31  7:50   ` Eli Zaretskii
2021-12-31  9:31     ` Tomas Hlavaty
2021-12-31 12:27       ` Eli Zaretskii [this message]
2022-01-01 17:58         ` Tomas Hlavaty
2022-01-01 18:20           ` Eli Zaretskii
2022-01-01 20:55             ` Stefan Monnier
2022-01-01 23:05               ` Tomas Hlavaty
2022-01-01 23:21                 ` Stefan Monnier
2021-12-31 14:23       ` Rudolf Schlatte
2021-12-31 16:21         ` Stefan Monnier
2022-01-01 17:37           ` Tomas Hlavaty
2022-01-01 22:36         ` Tomas Hlavaty
2022-01-02  6:54           ` Eli Zaretskii
2022-01-02  7:53             ` Tomas Hlavaty
2022-01-02  8:33               ` Eli Zaretskii
2022-01-02 13:10                 ` Tomas Hlavaty
2022-01-02 14:42                   ` Eli Zaretskii
2022-01-02 15:16                     ` Eli Zaretskii
2022-01-02 17:18                       ` Tomas Hlavaty
2022-01-02 18:11           ` Rudolf Schlatte
2022-01-03  0:37             ` Tomas Hlavaty
2022-01-04  3:08               ` Richard Stallman
2021-12-31 14:39 ` LdBeth
2022-01-01 17:59   ` Tomas Hlavaty

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=83ilv5gdsk.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=tom@logand.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.