On Wednesday, 26 July 2017 at 14:10:19 UTC, Moritz Maxeiner wrote:
AFAICT that was mostly because it would have broken plenty of existing code.

The validity or purposefulness of such code is up to debate, a separate debate granted.
Let's assume there is working code that such a change will break.

Properly separating destruction and finalization from each other with the current syntax remaining as finalizers and the new one for destructors would allow this to be done without major code breakage.

Sure, in the event D would like to transition towards a state where the GC doesn't call finalizers, it seems useful.

From a marketing point of view having two destructors and keyword/syntax just for this would be hard to defend, and it would also need to explain the whole story.

Personally I'd be for:

    ~this() { /* deterministic one */ }
    void finalize() { /* the one called by GC */ }

But then no transition path.

I'll defend the view point that there is _nothing_ useful to do in a finalizer except to check if the destructor has already been called.

Reply via email to