std.locale
Max Samukha
samukha at voliacable.com.removethis
Tue Mar 3 11:35:15 PST 2009
On Tue, 03 Mar 2009 11:00:36 -0800, Walter Bright
<newshound1 at digitalmars.com> wrote:
>Andrei Alexandrescu wrote:
>> I agree. I'm having the same problem: I put a contract in there, I know
>> it's as good as assert. So I can't do e.g. input validation because in
>> most functions input must always be validated. I also know that
>> contracts are doing the wrong thing with inheritance and can't apply to
>> interfaces, which is exactly the (only?) place they'd be interesting. So
>> I send the contracts home and use assert, enforce, and unittest.
>
>Contracts are not for input validation! They are checking if the logic
>of your program is correct or not. Think of it this way - your program
>should behave exactly the same with or without the contracts turned on.
>
>Contracts should NOT be used for scrubbing user input, checking for
>errors from other components, or validating any input from external to
>the dll.
>
>If you feel the need to leave them on in a release build, then:
>1) your testing is inadequate
>2) you are using them incorrectly
>
>For example, Windows API functions check all their input. This is not
>contract programming - it's validating user input over which Microsoft
>has no control.
This is exactly how I look at them. However I've never tried to use
pre/post conditions. I guess it's because of the syntax.
By the way, about that image on the contracts page. Is the bullet
flying away from the D-man because it's disgusted by his extreme
ugliness? :)
More information about the Digitalmars-d
mailing list