On 26 October 2004 10:42, Malcolm Wallace wrote: > "Simon Marlow" <[EMAIL PROTECTED]> writes: > >> I didn't mean fully synchronous, just "more synchronous". For >> example, the finalization routine could be run directly after >> garbage collection. Hugs & nhc98 already do this, because they don't >> support Haskell finalizers. > > Actually, nhc98 supports both C and Haskell finalisers, with the same > signatures as in ghc: > > newForeignPtr :: FinalizerPtr a -> Ptr a -> IO (ForeignPtr a) > newConcForeignPtr :: IO () -> Ptr a -> IO (ForeignPtr a) > > C finalisers are run during garbage collection, Haskell finalisers > are run immediately afterwards. In fact, you cannot run a Haskell > finaliser during GC, because you don't have a valid heap to run it in.
But don't you run into problems in the implementation of newConcForeignPtr, when the Haskell finalizer needs the value of a thunk that was already under evaluation when the GC happened? ie. the need for concurrency that stopped this from becoming part of the official FFI. Cheers, Simon _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe