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