Program logic bugs vs input/environmental errors
w0rp via Digitalmars-d
digitalmars-d at puremagic.com
Wed Oct 22 08:05:57 PDT 2014
On Saturday, 18 October 2014 at 17:40:43 UTC, Walter Bright wrote:
> On 10/18/2014 8:21 AM, Jacob Carlborg wrote:
>> On 2014-10-18 07:09, Walter Bright wrote:
>>
>>> Which means they'll be program bugs, not environmental errors.
>>
>> Yes, but just because I made a mistake in using a function
>> (hitting an assert)
>> doesn't mean I want to have undefined behavior.
>
>
> As I've said before, tripping an assert by definition means the
> program has entered an unknown state. I don't believe it is
> possible for any language to make guarantees beyond that point.
>
> Now, if it is a "known" unknown state, and you want to recover,
> the solution is straightforward - use enforce(). enforce()
> offers the guarantees you're asking for.
>
> Using assert() when you mean enforce() is like pulling the fire
> alarm but not wanting the fire dept. to show up.
I agree with you on this. I've only ever used assert() for
expressing, "This should never happen." There's a difference
between "this might happen if the environment goes wrong," which
is like a tire being popped in car, and "this should never
happen," which is like a car turning into King Kong and flying
away. My most common assert in D is typically assert(x !is null)
for demanding that objects are initialised.
More information about the Digitalmars-d
mailing list