From: Marius Vollmer <mvo@zagadka.de>
Cc: guile-user@gnu.org, guile-devel@gnu.org
Subject: Re: The order of objects returned from a guardian
Date: Mon, 01 Aug 2005 00:25:43 +0300 [thread overview]
Message-ID: <87iryqacrs.fsf@zagadka.de> (raw)
In-Reply-To: <87oe8iai2h.fsf@zagadka.de> (Marius Vollmer's message of "Sun, 31 Jul 2005 22:31:18 +0300")
Marius Vollmer <mvo@zagadka.de> writes:
> (I am a bit worried right now that the 'obvious' approach of putting
> FOO and BAR into a weak key hashtable with FOO as the key and BAR as
> the value does conflict a bit with my original goal of breaking up
> cycles from strong values to weak keys. With the code that I have
> now, both FOO and BAR are not considered accessible just by virtue of
> being in the hashtable. Thus, once FOO is considered inaccessible,
> BAR might be inaccessible as well; both could be returned from
> guardians in any order. Hmm.)
I have now thought a bit more about this, and am no longer worried.
This is now the reference documentation of make-guardian:
-- Scheme Procedure: make-guardian
-- C Function: scm_make_guardian ()
Create a new guardian. A guardian protects a set of objects from
garbage collection, allowing a program to apply cleanup or other
actions.
`make-guardian' returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the argument
to the guardian's set of protected objects. Calling the guardian
procedure without an argument returns one of the protected objects
which are ready for garbage collection, or `#f' if no such object
is available. Objects which are returned in this way are removed
from the guardian.
You can put a single object into a guardian more than once and you
can put a single object into more than one guardian. The object
will then be returned multiple times by the guardian procedures.
A object is eligible to be returned from a guardian when it is no
longer referenced from outside any guardian.
There is no guarantee about the order in which objects are returned
from a guardian. If you want to impose an order on finalization
actions, for example, you can do that by keeping objects alive in
some global data structure until they are no longer needed for
finalizing other objects.
Being an element in a weak vector, a key in a hash table with weak
keys, or a value in a hash table with weak value does not prevent
an object from being returned by a guardian. But as long as an
object can be returned from a guardian will it not be removed from
such a weak vector or hash table. In other words, a weak link
does not prevent an object from being considered collectable, but
being inside a guardian prevents a weak link from being broken.
A key in a weak key hash table can be though of as having a strong
reference to its associated value as long as the key is accessible.
Consequently, when the key only accessible from within a guardian,
the reference from the key to the value is also considered to be
coming from within a guardian. Thus, if there is no other
reference to the value, it is eligible to be returned from a
guardian.
--
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3 331E FAF8 226A D5D4 E405
_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user
prev parent reply other threads:[~2005-07-31 21:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-26 23:33 The order of objects returned from a guardian Marius Vollmer
2005-07-27 0:42 ` 64bit guile: one bug found, one improvement suggested Roland Orre
2005-07-28 22:37 ` The order of objects returned from a guardian Neil Jerram
2005-07-31 19:31 ` Marius Vollmer
2005-07-31 21:25 ` Marius Vollmer [this message]
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87iryqacrs.fsf@zagadka.de \
--to=mvo@zagadka.de \
--cc=guile-devel@gnu.org \
--cc=guile-user@gnu.org \
/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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).