bearophile wrote:
> Jens Mueller:
> 
> > I have a rectangle and one of its methods moves the upper left
> > of the rectangle. I have two invariants when moving a rectangle: The
> > width and the height do not change. I could do something like the
> > following:
> > 
> > void move(...) {
> >     int currentWidth = width;
> >     int currentHeight = height;
> >     // moving the rectangle here
> >     assert(currentWidth == width);
> >     assert(currentHeight == height);
> > }
> 
> Probably you need one basic feature of DesignByContract that is missing still 
> in D2, the "old" that allows at the end of a method to know the originals. It 
> was discussed two or more times:
> 
> 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
> 
> Once the feature is implemented you may solve your problem like this (minus 
> syntax changes, but other solutions are possible):

Oh. I should have done better research.
I don't like the "old" approach.

> void move(...)
>     in {
>         // ...
>     } out {
>         assert(width == old.width);
>         assert(height == old.height);
>     } body {
>         // moving the rectangle here
>     }
> 
> 
> The problem of implementing the old was solved in C#4, it is named 
> PrestateValues(OldValue), see page 8 here:
> http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf
> So probably this problem may be solved in D2 too.
> 
> To solve this problem currently you may need to use ghost fields in your 
> struct/class that memorize the older values... ghost fields wrapped in 
> version(unittest) {...} or some version(debug). This is a bad solution.

Don't get your point here. You neither like the ghost fields (old) nor
the debug {} approach as Andrei suggested? I mean after all the problem
is not that important that one should bother too much. Maybe I'm too
pragmatic. I'll try using it and see how it feels.

Jens

Reply via email to