Bug 5411 – import wtf1

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Linux
Creation time
2011-01-04T17:20:00Z
Last change time
2012-02-16T19:09:37Z
Assigned to
nobody
Creator
ellery-newcomer

Comments

Comment #0 by ellery-newcomer — 2011-01-04T17:20:43Z
quick! where does the following code fail? import std.stdio, std.algorithm: writeln, indexOf; void main(){ writefln("abc"); //1 writeln(map!("a+1")([1,2,3])); //2 std.stdio.writefln("abc"); //3 writeln(std.algorithm.map!("a+1")([1,2,3])); //5 writeln(indexOf("abc","b")); //6 } answer: not 1, but it should 2, as it should not 3, erm ????? not 5, which may well be due to bug 314, or vice versa with 1 not 6, which maybe it shouldn't summary: selective imports can select from multiple modules, but some of the multiple modules get in to this module's symbol table anyways
Comment #1 by bugzilla — 2011-01-05T00:15:42Z
The selective imports only apply to std.algorithm, not std.stdio. std.algorithm publicly imports std.stdio, and so the selective import of writeln from std.algorithm works. The behavior is as expected.
Comment #2 by andrei — 2011-01-05T00:18:55Z
std.algorithm imports std.stdio privately.
Comment #3 by ellery-newcomer — 2011-01-05T08:50:22Z
(In reply to comment #1) > The selective imports only apply to std.algorithm, not std.stdio. > > std.algorithm publicly imports std.stdio, and so the selective import of > writeln from std.algorithm works. > > The behavior is as expected. then why is std.algorithm.map in the local module symbol table?
Comment #4 by peter.alexander.au — 2011-01-05T14:09:40Z
Another test: import std.stdio; void main() { writeln(std.algorithm.map!("a+1")([1,2,3])); // compiles } That succeeds (note lack of std.algorithm import) import std.stdio; void main() { writeln(map!("a+1")([1,2,3])); // error: map not defined } That doesn't. Where is map coming from? std.stdio doesn't use a public import for std.algorithm.
Comment #5 by doob — 2011-01-06T02:40:47Z
I think the last test compiles due to http://d.puremagic.com/issues/show_bug.cgi?id=314
Comment #6 by ellery-newcomer — 2011-01-06T17:43:42Z
(In reply to comment #5) > I think the last test compiles due to > http://d.puremagic.com/issues/show_bug.cgi?id=314 yeah, looking back on this, I think all of them are instances of 314 and the rest is confusion about selective imports since the spec does not indicate how to interpret import mod1, mod2, ... modN: identifier; if it were up to me, I'd just disallow multiple module names in this case
Comment #7 by code — 2012-02-16T19:09:37Z
*** This issue has been marked as a duplicate of issue 313 ***