Andrei Alexandrescu:

> Allowing global symbol masking
> is necessary  for writing  good modular code  that's assembled  out of
> separately compiled  parts; you  don't want the  addition of  a global
> variable to suddenly  render various innocent bystanders uncompilable.

When you import modules you need to ask for what you want, and not receive a 
lot of names you don't want. So if you add one variable and you don't import 
it, it shall not give the problems you say.

I'd like a tidier management of global variable names. So I am not sure I agree 
with what is written there.

Currently DMD accepts code like:

int x = 1;
// ... lot of code here
void foo() {
    x++; // bug, local x undefined
    // ... more code here
    int x;
    x++;
}
void main() {}


Generally in a system a big source of unwanted complexity comes from unwanted 
interactions between its subsystems. So I'd like D functions to be a bit more 
strict in where they look for names. Global variables are sometimes useful and 
I don't want to remove them from the language, as I think the Delight language 
has done. But I'd like them to be asked for in a more explicit way inside 
functions (in Python there is the 'global' attribute for this, but its 
semantics is not tidy. In D there is the leading "." to denote an outer name, 
but its usage is optional unless an equal local name exists).

Bye,
bearophile

Reply via email to