On Friday, 1 July 2016 at 16:30:41 UTC, Andrei Alexandrescu wrote:
https://issues.dlang.org/show_bug.cgi?id=16224 -- Andrei

That

    do {
    } while(0)

construct is ridiculous. It's cargo cult at its worst. It is NOT more readable than an honest to god goto. It's an obfuscated way to write naughty gotos without the guilt of sinning (I deliberately use religous vocabulary because it is a religious disease). It's the goto of the hypocrits. Sorry if I sound harsh, but I share a project (in C) with a colleague who loves that construct and after almost 15 years of having to debug that sh... I can affirm that that construct is a scourge and deserves all the scorn that can be heaped on it.
It looks like a loop, but isn't one.
It doesn't look like a goto, but is one.
It's horribly difficult to amend, especially if there is actually a real loop somewhere around or inside it. It pushes the user to write unnecessary big functions (anecdote, I modified once a 200 lines do while(0) behemoth that could be reduced to 4 functions of 10 lines each and a small loop. After conversion and simplification I discovered that the original didn't even cover all functional cases and leaked some memory). I don't think it makes even an inkling of sense to use it in D as there are real language constructs that can cleanly replace it (scope, try/catch/finally, destructors, etc.).



Reply via email to