Re: The Ocaml Link Database

From: doligez@pa.dec.com
Date: Sun Feb 14 1999 - 02:39:03 MET


From: doligez@pa.dec.com
Message-Id: <199902140139.AA22476@six.pa.dec.com>
To: Andrew Martin <amartin@ibmoto.com>
Subject: Re: "C" Finalizers
In-Reply-To: Message of Wed, 10 Feb 1999 09:27:39 -0600
    from Andrew Martin <amartin@ibmoto.com>
Date: Sat, 13 Feb 1999 17:39:03 -0800

>From: Andrew Martin <amartin@ibmoto.com>

>Are there any restrictions on the things that a finalizer (the first
>element of a block tagged with Final_tag) can do safely?

Definitely yes.

> For instance,
>can it allocate memory from the Ocaml heap?

No.

> Can it use callback to apply a closure to a value?

No because that could allocate memory.

> Is there any interest in exploring the
>posibility of introducing a general-purpose finalization mechanism into
>the Ocaml language itself ?

This is hard to do for two reasons. First, you have to specify what
it means exactly, and what happens when the finalization function
reconnects (parts of) the data structure that is about to be freed.
Then you have to implement it without bugs.

>Unfortunately, to track the improvement gained by re-ordering, you
>really need to be able to know whether a node is referenced by the
>outside world. While one could concoct various schemes involving arrays
>of weak pointers to accomplish this, they all feel complicated and
>contrived -- they very thing I was trying to avoid by writing in Ocaml
>in the first place.

Yet, this is what weak pointers are designed for. Maybe it would be
easier with a library of well-chosen functions implemented on top of
the weak pointer primitives ?

> The most natural way do deal with the problem is to
>define a finalizer that recursively decrements ref counts.

That would be very inefficient, but if you really want to do it, you
should be able to write such a finalizer in C without too much work.

>Obviously, providing a general finalization mechanism in the Ocaml
>language itself would be fraught with difficulty e.g. what's to prevent
>the finalizer from creating new references to the object (and hence
>indirectly to its descendants) that we just decided to free ? Still,
>I thought I'd raise the issue and see if anyone is thinking about it.

We do think about it from time to time, but the demand-to-difficulty
ratio is really bad.

-- Damien



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:19 MET