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


Reply via email to