Communicating between in and out contracts
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Oct 17 20:11:09 PDT 2009
Rainer Deyke wrote:
> Andrei Alexandrescu wrote:
>> If x is a complex expression and part of a complex control flow, it
>> becomes highly difficult what it means "at the beginning of the
>> function". It also becomes difficult to find a way to distinguish good
>> cases from bad cases without being overly conservative.
>
> It looks like a more or less straightforward AST transformation to me.
>
> in {
> } body {
> F();
> } out {
> G(old(x));
> }
>
> =>
>
> {
> auto old_x = x;
> try {
> F();
> } finally {
> G(old_x);
> }
> }
>
> Repeat for each instance of 'old', in order of appearance. OK, it's not
> entirely trivial, but it's not prohibitively difficult either.
It is if x is an _arbitrarily complex_ expression, and if that
expression is part of a _complex control flow_. The language definition
would have to decide exactly where complex is too complex in the
expression or the control flow. That complicates the language. Also, by
necessity the feature will be limited and will not give people enough
freedom. It's lose-lose.
Andrei
More information about the Digitalmars-d
mailing list