"Before and after" in contracts?

bearophile bearophileHUGS at lycos.com
Mon Apr 11 09:42:18 PDT 2011


Magnus Lie Hetland:

> Yeah, that's what I've got right now. Just seems odd to need to use 
> attributes for this sort of thing. Also, it's rather brittle -- for 
> example, if the function (directly or indirectly) calls itself. Then 
> two (or more) pairs of in/out blocks will manipulate the same 
> attribute... Seems like a variable that would be local to one specific 
> in/out instantiation (or stack frame) would be preferable.
> 
> I guess I could just use a local variable (guarded by version()) and 
> then have an assert() near the end of the function. Probably a better 
> solution...

Your need is perfectly natural it's named "old" values or prestate in contract programming, and currently it's probably the biggest hole in the D contract programming. It was discussed three or four times, like:

http://www.digitalmars.com/d/archives/digitalmars/D/why_no_old_operator_in_function_postconditions_as_in_Eiffel_54654.html

http://www.digitalmars.com/d/archives/digitalmars/D/Communicating_between_in_and_out_contracts_98252.html

I don't know if Walter is willing someday to fill this hole of the D DbC.

In my opinion is good to bugger now and then the main D newsgroup about this, to help Walter&Andrei understand that there are some programmers that care for this feature of DbC.

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list