On Tuesday, 23 September 2014 at 18:52:13 UTC, H. S. Teoh via Digitalmars-d wrote:
I can think of a few:

1) Change lookup rules so that symbols pulled in by local import are found last. Walter has stated that he disagrees with this approach
because it complicates symbol lookup rules.

2) Emit a compile error if any symbol pulled in by the local import shadows a symbol currently in scope, according to the same rules as declaring local variables that shadow identically-named variables in an
outer scope within the current function body.

3) What you proposed in the bugnotes: only allow `static import xyz;`
and `import xyz : a, b, c;` at local scope.

As far as breakage of existing code is concerned, (1) and (2) will only break code where there was already a problem (an outer scope's symbol is being shadowed, most likely unintentionally, by the import). (3) will likely cause backlash because it will break a LOT of code that currently compiles and likely to have no actual problems. Not to mention that while naming specific symbols to import works for trivial cases, it can quickly and easily devolve into inordinately long lists of symbols once the local scope grows into non-trivial code. People are unlikely to be
happy with this.

Which leads to this variation of (2):

2b) Allow unqualified `import xyz;` in local scope, but only if NONE of
the imported symbols shadows ANY symbol visible from that scope.


T

The only tenable option from that list seems to be 1. 2 and 2b either compile or not depending on the implementation details of the module (i.e., add a symbol i to a module and it may break code in an entirely different module that imports your module), and 3 will break a lot of valid code.

Reply via email to