Finalizing GC
Maxim Fomin
maxim at maxim-fomin.ru
Sun Mar 31 23:32:32 PDT 2013
On Sunday, 31 March 2013 at 20:15:15 UTC, 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?
This is intended bahaviour. Struct objects suposed to be
lightweight and map (except some cases) to C structs ABI. It
would be complicated to make heap structs to be GC collectible
taking into account that object can be moved without hacking
current struct ABI layout.
> 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...?
I didn't hear about the consensus that heap structs should be
collected by GC.
> 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?
This is even more unlikely - to break tonns of code for the sake
of making heap structs collected.
If you are interested in solution for this problem, then you can
probably try luck in ctors/dtors/overload operators, using some
reference counting algorithms or hijack context pointer of nested
structs for the purpose of keeping runtime info. I doubt that it
can be reliably implemented and worth using.
More information about the Digitalmars-d-learn
mailing list