I dont have cvs write access but you should mention something about expressing gc dependencies between ForeignPtr's. the only two ways to do this in the current haskell systems are * weak pointers * touchForeignPtr from the finalizer of another ForeignPtr
Actually I have a feeling that in GHC it doesn't work to use touchForeignPtr from the finalizer of one ForeignPtr in order to keep another alive. According to our semantics for weak pointers, I think the two finalizers can still be run together, because pointers from a finalizer are not followed when calculating reachability. Hmm. I'm not sure what to do about this.
if the second one is not allowed by restricting us to C only finalizers, then the first needs to be added into the FFI, (or some other mechanism invented). I consider this functionality vital for any non-trivial use of ForeignPtr, and it becomes more important as we move more stuff to C land, as C structures become more common.
Yes, this is a good point. I'll add it to the document.
for more info on the use of this, see the FFI touchForeignPtr documentation and the paper describing Weak pointers in ghc. the fact that multiple people saw the need for this and came up with solutions probably says something about its usefulness.
Cheers, Simon
participants (1)
-
Simon Marlow