Bug 17756 – Ambiguous import form introduces names into the global namespace

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Windows
Creation time
2017-08-16T11:31:38Z
Last change time
2024-12-13T18:54:04Z
Assigned to
No Owner
Creator
dlang
Moved to GitHub: dmd#17813 →

Comments

Comment #0 by dlang — 2017-08-16T11:31:38Z
I was testing an import as written at [1], which is not a documented form[2], and discovered that such imports introduce names into the global namespace: ``` void main() { //import io = std.stdio; // Error. import io = std.stdio : writeln; // Executes. writeln("test"); } ``` It appears that `import io = std.stdio : writeln;` is being interpreted as `import io = std.stdio : writeln=writeln;`. If this is the case, should an implicit `name=name` be allowed? ``` void main() { import io = std.stdio : writeln; // This builds and runs. writeln("test"); // Executes. //write("test"); // Error. io.writeln("test"); // Executes. io.write("test"); // Executes. } ``` [1]: http://forum.dlang.org/post/[email protected] [2]: Sections 4.6 - 4.8: https://dlang.org/spec/module.html#renamed_imports
Comment #1 by dlang — 2017-08-16T11:35:19Z
"Ambiguous" may be the wrong term; the compiler knows exactly what it's doing. It may be ambiguous to the programmer reading and writing it. In that same forum thread, we read that one person (two including myself) expected this to work differently[1] (e.g., did not expect symbols to be introduced into the global namespace). [1]: http://forum.dlang.org/post/[email protected]
Comment #2 by robert.schadek — 2024-12-13T18:54:04Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17813 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB