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.

Reply via email to