Symbol lookup rules and imports
Meta via Digitalmars-d
digitalmars-d at puremagic.com
Tue Dec 2 15:02:18 PST 2014
This whole thing is a huge hole in D that needs to be fixed (it
may even be necessary to consider it higher priority than the
current C++ and GC). As it works currently, I'd go as far as to
say that almost every addition to Phobos must be considered a
breaking change for these reasons. Given the recent discussion
about trying as much as possible to not break code, fixing the
issues with import is extremely important. When a library writer
can break user code by introducing a *private* symbol (scoped or
otherwise), something has gone wrong.
Furthermore:
> // mod.d
> module mod;
> struct S {
> // Use a fully-qualified import.
> // We place it in the body of S because S's methods
> // repeatedly needs it -- after all, DRY is good, right?
> import std.format : format;
>
> void method1(string fmt) {
> writeln(format(fmt, ... ));
> }
>
> void method2() {
> auto s = format("abc %s def", ...);
> ...
> }
> }
>
> // main.d
> module main;
> import mod; // we need the definition of S
>
> void format(S s) {
> ... /* do something with s */
> }
>
> void main() {
> S s;
> s.format(); // UFCS -- should call main.format(s), right?
> }
Am I correct that this bug is due to the fact that selective
imports from a module implicitly imports all symbols in that
module, rather than just the selected symbol? I don't know how
anyone could think that D's module system is simple at this point
when things behave so differently from how they intuitively
should behave (for my own personal definition of intuitive).
More information about the Digitalmars-d
mailing list