George writes:
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.
So what you want is for the Java GC to call hs_freeStablePtr on all the Haskell objects that just died? That requires that the Haskell runtime system export a C function hs_freeStablePtr which fiddles around with the relevant GC data structure for stable pointers. No problem at all. Hugs has exported this function for some years now (though under a slightly different name). Similarily, you want Haskell's GC to call a function in the Java Native Interface (JNI) to release any Java objects that Haskell may have. I imagine that is straightforward. -- Alastair