Program logic bugs vs input/environmental errors

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Fri Oct 17 22:09:22 PDT 2014


On 10/17/2014 9:13 AM, Jacob Carlborg wrote:
> On 2014-10-16 21:31, Walter Bright wrote:
>
>> Contract errors in Phobos/Druntime should be limited to having passed it
>> invalid arguments, which should be documented
>
> That doesn't mean it won't happen.

Which means they'll be program bugs, not environmental errors.

It is of great value to distinguish between program bugs and input/environmental 
errors, and to treat them entirely differently. It makes code easier to 
understand, more robust, and better/faster code can be generated.

Using asserts to detect input/environmental errors is a bad practice - something 
like enforce() should be used instead.

I understand that some have to work with poorly written libraries that 
incorrectly use assert. If that's the only issue with those libraries, you're 
probably lucky :-) Short term, I suggest editing the code of those libraries, 
and pressuring the authors of them. Longer term, we need to establish a culture 
of using assert/enforce correctly.

This is not as pie-in-the-sky as it sounds. Over the years, a lot of formerly 
popular bad practices in C and C++ have been relentlessly driven out of 
existence by getting the influential members of the communities to endorse and 
advocate proper best practices.

----------------------

I do my best to practice what I preach. In the DMD source code, an assert 
tripping always, by definition, means it's a compiler bug. It is never used to 
signal errors in code being compiled or environmental errors. If a badly formed 
.d file causes dmd to assert, it is always a BUG in dmd.


More information about the Digitalmars-d mailing list