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.

Reply via email to