Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
"C" Finalizers
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Andrew Martin <amartin@i...>
Subject: "C" Finalizers
Are there any restrictions on the things that a finalizer (the first
element of a block tagged with Final_tag) can do safely?  For instance,
can it allocate memory from the Ocaml heap?  Can it use callback to
apply a closure to a value?  Is there any interest in exploring the
posibility of introducing a general-purpose finalization mechanism into
the Ocaml language itself ?

Why do I ask?

The reason is probably more academic than practical.   I have become
curious about whether it is practical to write a BDD package in Ocaml.
Agreed, one would loose some efficiency over a "C" implementation.  But
more critical to BDD performance than the constants involved in
accessing BDDs are the heuristics used for variable ordering etc.  It
may be that a clear ocaml-style presentation is more amenable to
experimentation with reordering techniques and heuristics than a
necessarily complex "C" implementation.  If so, this might ultimately
lead to a better performing package which could always be re-implemented
(at least partially) in "C" if you wanted to shave some time of the

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. The most natural way do deal with the problem is to
define a finalizer that recursively decrements ref counts.

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.

Andy Martin

Andrew K. Martin, Ph.D.
Motorola Inc., Somerset Design Center
Networking and Computer Systems Group

phone: (512) 424-8325        6200 Bridgepoint Parkway, Building 4,
fax  : (512) 424-8846        Mail Drop OE70
email:    Austin, TX 78730