On Friday, 2 September 2016 at 21:52:57 UTC, Walter Bright wrote:
I understand your concern, and that's why we put a priority on fixing asserts that are submitted to bugzilla. But without a bug report, we are completely dead in the water in fixing it. It is supposed to never happen, that is why we cannot fix them in advance.

We have a rule in our codebase, and it's been the same in every codebase I've worked in professionally. If you throw an assert, you have to give a reason and useful information in the assert.

Thus, an error in code that looks like:

assert(0);

Makes no sense to me when in this case it could have been:

fatal_error("Invalid type (from %d to %s)", tx->ty, tx->toChars());

The quality of error reporting has immediately increased. And it would require the creation of a fatal_error macro that does an assert. But now I'm not scratching my head wondering what went wrong in the compiler.

Browsing through that function, I can also see another assert that doesn't let you use vector types unless you're running a 64-bit build or are on OSX. It doesn't tell me that through an error message. I had to look at the source code to work it out. fatal_error("Vector types unavailable on the target platform"); and someone's day was made better. And then a couple of lines above that, another assert(0). fatal_error("Invalid vector type %s", tx->toChars()); and someone can deal with the unexpected.

If I have to open up the compiler's source to get an idea of what I'm doing wrong, that's a bad user experience. And why I want a discussion about this. Not to whinge, not to get a bug fix. But to highlight that assert(0) is a bad pattern and there should be a discussion about changing the usage of asserts inside DMD.

Reply via email to