On Wednesday, 19 August 2015 at 23:29:26 UTC, Timon Gehr wrote:
On 08/20/2015 01:20 AM, deadalnix wrote:
On Wednesday, 19 August 2015 at 23:18:04 UTC, Timon Gehr wrote:
On 08/20/2015 01:06 AM, Dicebot wrote:
On Wednesday, 19 August 2015 at 22:33:23 UTC, Timon Gehr
wrote:
It's a bug in local imports. This is the ticket:
https://issues.dlang.org/show_bug.cgi?id=10378
Seems to fit into existing shadowing semantics.
There's no precedent for symbols shadowed by imports.
If this is a bug we may need a new spec.
I believe local imports were first implemented without paying
any
attention to shadowing. I think the broken semantics
implemented in
DMD without a sufficient up-front design were then
back-ported into
the documentation at some point. This still happens too
often. This is
the JavaScript style of language design.
import should NEVER shadow local symbols.
And yet for some reason this obviously broken behaviour is now
documented as intended in the official language documentation.
http://dlang.org/module.html, look for "Scoped Imports".
"The imports are looked up to satisfy any unresolved symbols at
that scope. Imported symbols may hide symbols from outer
scopes."
On that same page:
"Modules offer several guarantees:
[...]
● If a module C imports modules A and B, any modifications
to B will not silently change code in C that is dependent on A."
WTF are we backporting implementation madness in the spec rather
than fixing it ?