Robert Fraser wrote:
Jason House wrote:
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?


Andrei

How about we keep in D's tradition and outlaw shadowing instead? I use "with" rarely, but appreciate it when I do.

This. Just issue an error/warning if something in the with shadows something outside. That way, if the struct/class/template/whatever changes, affected code will be notified.

No warning, error!

This is a great idea Jason.

Andrei

Reply via email to