Finalizing GC
Jonathan M Davis
jmdavisProg at gmx.com
Sun Mar 31 18:29:21 PDT 2013
On Sunday, March 31, 2013 22:15:14 monarch_dodra wrote:
> Currently, the GC only finalizes classes. structs/arrays,
> allocated via the GC, are not finalized.
>
> I don't have much experience with GC, so ...
>
> Question: Is this the intended behavior, or is it currently only
> a limitation? WIll we ever have a GC that is capable of
> finalizing structs/arrays?
>
> Question2: If the idea is that the GC *should* finalize, then how
> are we supposed to specify the finalizer to the GC when we
> allocate via GC.malloc ? There is apparently a
> GC.BLKAttr.FINALIZE, but how do you specify *how* to finalize...?
>
> My "big" worry is that when we finally have a GC that can handle
> built-in array finalization, all our code that manually manages
> memory (for example: "std.array.array") will become buggy...
>
> Thoughts? Insight?
It's my understanding that structs don't get finalized, because the type
information isn't there at runtime to do it. I don't know if that can be
gotten around or not, but my guess is that it's a permanent restriction unless
we start putting invisible member variables in structs which have that
information. I don't know though. Classes, on the other hand, hold information
on their actual types at runtime, so the information is there to finalize them.
But regardless, there is _no_ guarantee that _anything_ on the GC heap will
ever be finalized, so any program which relies on anything on the GC heap being
finalized is buggy by definition, and I don't expect that to ever change.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list