GC: memory collected but destructors not called

Shachar Shemesh via Digitalmars-d digitalmars-d at puremagic.com
Tue Nov 11 21:05:02 PST 2014


On 11/11/14 22:41, Steven Schveighoffer wrote:
>
> At this point, I am not super-concerned about this. I cannot think of
> any bullet-proof way to ensure that struct dtors for structs that were
> meant only for stack variables can be called correctly from the GC.
Isn't "structs meant only for stack variables" a semantic thing? The D 
compiler cannot possibly know. Shouldn't that be the programmer's choice?

> This
> pull doesn't change that, and it does have some nice new features that
> we do need for other reasons.
>
> In other words, putting a struct in the GC heap that was written to be
> scope-destroyed is an error before and after this pull. Before the pull,
> the dtor doesn't run, which is wrong, and after the pull the dtor may
> cause race issues, which is wrong. So either way, it's wrong :)
I disagree.

The first is wrong. The second is a corner case the programmer needs to 
be aware of, and account for. The difference is that, in the first case, 
the programmer is left with no tools to fix the problem, while in the 
second case this is simply a bug in the program (which, like I said in 
another email, also happens with the current implementation when the 
struct is inside a class).

In other words, the second case exposes a second (more direct and more 
likely to be handled) path to an already existing problem, while the 
first puts the programmer up against a new problem with no work around.

Shachar


More information about the Digitalmars-d mailing list