On Friday, 28 February 2014 at 12:54:32 UTC, Dicebot wrote:
On Friday, 28 February 2014 at 12:36:48 UTC, Simon Bürger wrote:
If you are right that would mean that the current dmd/runtime
does not follow the spec. Curious. The current implementation
is not aware of strcut-destructors on the heap, i.e. the
GC.BlkAttr.FINALIZE flag is not set for structs (or arrays of
structs).
Ah, structs are a bit tricky. Spec has override for struct
destructors that says explicitly "Destructors are called when
an object goes out of scope" so one can argue heap ignorance
matches it. But the very next line contradicts it : "Their
purpose is to free up resources owned by the struct object".
I believe it is a DMD bug though. There is no reason why
destructors can't be run here. Most likely it is just defect of
current GC implementation that everyone got used to.
This bug report discussion confirms it :
https://d.puremagic.com/issues/show_bug.cgi?id=2834
Looks like decision was to fix it once precise GC gets added.
What can still take a long time. It annoys me very much that with
arrays I can not rely on that the struct DTors are called.