bearophile wrote:
Daniel Keep:
So I put contracts on everything.  Fantastic.  I do a release compile,
and all that safety disappears.  So only the debug build has contracts
enabled.  But it's the release build, if it crashes, that I need help
diagnosing.

A simple solution is to not use -release for the final version of the code, but 
this keeps array bound controls too.
LDC may have already solved your problem, with extra compilation arguments that 
you can use to disable such controls independently from each other.
It's not a fault of design by contract, it's just that the D compiler switches 
are lumped together. It seems a simple to solve problem.

Bye,
bearophile

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.

Andrei

Reply via email to