A question about DbC

Denis Koroskin 2korden at gmail.com
Sat Oct 9 04:49:08 PDT 2010


On Sat, 09 Oct 2010 15:32:26 +0400, Jonathan M Davis <jmdavisProg at gmx.com>  
wrote:

> On Saturday 09 October 2010 04:23:25 Denis Koroskin wrote:
>> On Sat, 09 Oct 2010 15:06:40 +0400, Jonathan M Davis  
>> <jmdavisProg at gmx.com>
>>
>> wrote:
>> > On Saturday 09 October 2010 03:47:52 Denis Koroskin wrote:
>> >> Why not just throw an exception and get a nice stack trace?
>> >
>> > You get a stack trace anyway with an assertion failure. And sure, they
>> > _could_
>> > make it so that the only way to output anything from a contract is to
>> > use an
>> > exception, but not only would that be more of a pain than using
>> > writeln(), but
>> > it would mean that the only time you could output anything would be on
>> > failure.
>> > As it is, you can print something every time that a contract is run.  
>> You
>> > couldn't do that with an exception.
>> >
>> > - Jonathan M Davis
>>
>> I could do the same within a function body.
>>
>> Anyway, I don't see the discussion going anywhere, it's just a matter of
>> preference and I don't really mind yours.
>
> Well, regardless of what we think and what the pros and cons of the  
> situation
> actually are, as I understand it, the whole reason that contracts aren't  
> pure is
> so that you can use writeln() in them for debugging.
>
> - Jonathan M Davis

I don't thinks so, it's rather the feature isn't fully implemented yet.
For example, up until recently you couldn't throw Exceptions from  
contracts, and was only be able to use asserts. That got changed because  
it was an easy to violate rule (by calling some other function that  
throws, e.g. enforce). Why do you think Walter disallowed throwing from  
contracts (other than asserts) in first place?


More information about the Digitalmars-d-learn mailing list