The document which Simon and Alastair have kindly put together asks for more details
about why I want foreign garbage collectors to be able to call back to Haskell. Well
I can't supply many details, because this is not immediately required by the
UniForM/MMiSS
project we are working on at Bremen. However the problem is a fairly simple and
general
one. If you have Haskell talking to some other language with a garbage collector, be
it Java or SML, then at a given point of the program you can in general expect to
have Haskell holding stable pointers to objects referenced from their world by the
other language,
and vice-versa. The most obvious way of garbage-collecting these is for each language
to
reference the foreign objects using its own version of ForeignPtr's, which then
instruct
the other's RTS that the corresponding stable pointer is no longer required. This
mechanism does
not handle circular pointers (Haskell references an ML object, which in turn
references the
original Haskell object again) but it is at least a start. Furthermore as a
programmer I think
my response to circular dependencies would be to try to avoid them, for example by
breaking
cycles by making some of the links weak, since a general solution would be fairly
complex.
I think in any case a general solution would very probably use finalizers to handle
finalizers,
while doing some complex pointer-chasing to detect and break cycles.
_______________________________________________
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi