On Thursday, 5 February 2015 at 01:07:56 UTC, Andrei Alexandrescu
wrote:
On 2/4/15 4:47 PM, deadalnix wrote:
1/ the initial is overly long because the styling is wasteful.
void foo() in {
...
} body {
...
}
Is simply one line more than not using contracts.
Would introduce an exception to our brace-on-its-line rule.
I need to take issue with "that code is not using contracts".
Using assert _is_ using contracts.
My definition of an in contract is a condition that the caller is
responsible to verify. It appears that your definition is that
it's a condition on a function argument (doesn't matter who is
responsible). I believe that Walter's definition of Contract
programming is the definition I'm referring to. I remember
watching one of his talks on contract programming and the
performance/optimization benefits he talked about would only
apply if a contract made the callee responsible for the asserts.
The responsible party, caller/callee matters. As far as I know,
D is the first language to allow a function to make the caller
responsible for verifying an assert. Even before I saw this in
D, I always wondered why no languages provided a way specify
this. H.S. Teoh had a good response on why it matters to specify
caller/callee so I'll refer to his response instead of re-hashing
what he already said.