forcing "@nogc" on class destructors

Jerry Morrison via Digitalmars-d digitalmars-d at puremagic.com
Sat Jan 24 15:28:34 PST 2015


This is the first I've heard that allocating GC memory in a 
destructor will crash. That's an unexpected gotcha. I'd expect to 
be able to reliably do I/O or throw an exception.

Strategy 1. Fix the GC's limitation. (One fewer pitfall to 
baby-sit.)

Strategy 2. Have the compiler inform the programmer. (The 
compiler can't catch all bugs but it should do what it can. 
Arguably this is a GC bug, not mine.)

Strategy 3. Put bold warnings in the reference 
<http://dlang.org/class.html#destructors> and all tutorials. 
That's useful but insufficient. Programmers will carry 
assumptions from other programming languages. Even those who read 
the D reference won't all remember that detail when it matters.

Strategy 4. Accept such crashes. (No good. The D home page 
promises safety.)


On Saturday, 24 January 2015 at 15:04:47 UTC, Ola Fosheim Grøstad 
wrote:
> If the classes are written for RAII then the destructors have 
> to be called in reverse order of the constructors. IIRC D does 
> not guarantee this when you use the GC.
>
> So to do it right there is a lot of GC overhead.

Yes, but the usability question is what do programmers expect? 
How much do they assume before turning to the docs?

It's a big stretch to expect LIFO behavior from garbage 
collection. It's not a stretch to expect logging to work.


More information about the Digitalmars-d mailing list