"with" should be deprecated with extreme prejudice

dsimcha dsimcha at yahoo.com
Sun May 17 18:12:24 PDT 2009


== Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
> 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

Absolutely not.  It's far too useful as syntactic sugar when working heavily with
plain old data structs, and saves a lot of tedious repetition of the struct
instance name.  There are lots of similar bonehead things one could do.  For one,
think of the opposite:  accidentally declaring a local variable in a member
function that hides the struct- or class-level variable.  I see your point, but I
simply think the benefits drastically outweigh the downsides.  You can pry with()
out of my cold, dead hands.



More information about the Digitalmars-d mailing list