On exceptions, errors, and contract violations

bearophile via Digitalmars-d digitalmars-d at puremagic.com
Fri Oct 3 10:47:22 PDT 2014


Sean Kelly:

> Another issue is what the error tells us about the locality of 
> the failure.  A precondition indicates that the failure simply 
> occurred sometime before the precondition was called, while a 
> postcondition indicates that the failure occurred within the 
> processing of the function.

In presence of high-order functions the assignment of contract 
failure blame is less simple.


> Invariant failures might indicate either, which leads me to 
> think that they are too coarse-grained to be of much use.  In 
> general, I would rather know whether the data integrity problem 
> was preexisting or whether it occurred as the result of my 
> function.  Simply knowing that it exists at all is better than 
> nothing, but since we already have the facility for a more 
> detailed diagnosis, why use invariants?

Invariants are more DRY. There are plenty of state parts that can 
be changed by a function, if you want to test the invariant each 
time you risk duplicating that testing code in every 
post-condition. The invariant helps you avoid that. It's a safety 
net that helps against problems that you can forget.

Bye,
bearophile


More information about the Digitalmars-d mailing list