Andrei Alexandrescu wrote:
I think "with" is a very dangerous feature due to the way it hides symbols. It essentially makes the feeblest attempt at modular reasoning utterly impossible:

int x, y;
with (whatever)
{
    y += x;
    ++x;
}

What can be said about such code? Nothing. If whatever has or will ever have fields x or y or both, the names will bind to them; otherwise, they'll bind to the locals. Non-local code dependency at its finest.

Maintenance of any type that is being used with "with" becomes a very dangerous proposition because it can silently change meaning of code.

I therefore submit that "with" is an extremely dangerous feature and should be removed from the language. What say you?


I agree, "with" makes code difficult to read. If one really wants to avoid typing, just use alias:

   alias my.very.long.string.of.symbols x;
   a = x.foo;
   x.foo = b;

This works with lvalues as well.

-Lars

Reply via email to