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