caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Martin Jambon <martin.jambon@ens-lyon.org>
To: "Daniel Bünzli" <daniel.buenzli@erratique.ch>
Cc: OCaml Mailing List <caml-list@inria.fr>
Subject: Re: [Caml-list] understanding weak
Date: Fri, 31 Oct 2008 15:57:32 +0100	[thread overview]
Message-ID: <490B1CDC.8080808@ens-lyon.org> (raw)
In-Reply-To: <9E14E68C-5480-46B8-9426-11EE40B6B139@erratique.ch>

Daniel Bünzli wrote:
> 
> Le 31 oct. 08 à 03:14, Martin Jambon a écrit :
> 
>> Warren Harris wrote:
>>> I'd like to understand better how ocaml's weak pointers operate. First,
>>> although it doesn't seem to be specified in the documentation, I assume
>>> that weak pointers will *not* be reclaimed (e.g. from a weak hash table)
>>> if the program retains some other reference to the object. I.e. the weak
>>> pointer must be the last remaining pointer to the object for reclamation
>>> to occur.
>>
>> Yes, otherwise the program would crash.
> 
> No since Weak.get returns an option type. As written the documentation
> sounds like the binding could disappear from the array even though the
> program still has references to the value. This could be done, wouldn't
> be usefull, but wouldn't crash the program.

let x = (1, 2);;
let wa = Weak.create 10;;
Weak.set wa 0 (Some x);;
...
print_int (fst x);;

(fst x) would certainly cause funny effects if x were GC'ed at an
arbitrary time after it has been added to the weak array.

An object can be reclaimed by the GC only if there is no reference to
it. This remains true. Adding an object to a weak array just doesn't
count as a reference.



Martin

-- 
http://mjambon.com/


  reply	other threads:[~2008-10-31 15:05 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-30 18:19 Warren Harris
2008-10-31  2:14 ` [Caml-list] " Martin Jambon
2008-10-31  8:37   ` Daniel Bünzli
2008-10-31 14:57     ` Martin Jambon [this message]
2008-10-31 15:27       ` Daniel Bünzli
2008-10-31 16:52         ` Martin Jambon
2008-10-31 19:12       ` Aleksey Nogin
2008-10-31 20:10         ` Martin Jambon
2008-10-31 20:44         ` Martin Jambon

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=490B1CDC.8080808@ens-lyon.org \
    --to=martin.jambon@ens-lyon.org \
    --cc=caml-list@inria.fr \
    --cc=daniel.buenzli@erratique.ch \
    /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 NNTP newsgroup(s).