"with" should be deprecated with extreme prejudice

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Mon May 18 03:44:01 PDT 2009


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



More information about the Digitalmars-d mailing list