On 9/22/14, 12:09 AM, Walter Bright wrote:
On 9/21/2014 11:36 PM, Jacob Carlborg wrote:
You better write down the scope rules as well. It gets complicated
with base
classes, template mixins and all features available in D.

Sure, I had thought they were.

BTW, template mixins work exactly like imports. See "Mixin Scope" here:
https://dlang.org/template-mixin

D lookup rules are logical and relatively simple.

In the case of local imports however, there's definitely an element of surprise, and also an issue akin to hijacking. Consider:

void main(string[] args) {
   import some_module;
   ... use args ...
}

Let's assume module "some_module" does not define a name "args". All works fine.

Time goes by, some_module gets updated to also define the name "args". Now this application is recompiled and may actually compile successfully, but the semantics has changed - it doesn't use the "args" in the parameter list, but instead the symbol exported by some_module.

That's clearly something difficult to ignore. It's one of those cases in which logical and relatively simple doesn't fit the bill the same way that a pair of pants built out of simple shapes like cylinders and hemispheres won't be a good fit.

We must look into this.


Andrei

Reply via email to