
On 23/10/13 17:08, Bryan O'Sullivan wrote:
On Wed, Oct 23, 2013 at 4:31 AM, Gergely Risko
mailto:gergely@risko.hu> wrote: I can understand that this may be slower in CPU, but can you please elaborate why would it be worse in memory, how the frees wouldn't happen in a "timely manner"? I thought finalisers are called when the referencee is GCd, so if we free the mpz in the callback, then where are we going wrong?
There is no guarantee that finalizers will be called at all, much less that they will be called in a timely manner. This is a general and well-known property of all garbage collectors, not something unique to GHC.
This is true, but I would add that C finalizers are rather more prompt and reliable than Haskell finalizers, since we added special support for them a couple of versions ago. C finalizers are run directly by the GC rather than in separate threads, and we run all the outstanding ones before the program terminates. Cheers, Simon