<div dir="ltr">Hello again,<br><div><br>Reading DIP 37 ( <a href="http://wiki.dlang.org/DIP37">http://wiki.dlang.org/DIP37</a> ) shed some light on the issue, I think.<br><br>The motivation for package.d was to allow the split of a large module into a package. From this perspective, the difference between package.d and all.d regarding the fully-qualified names seems to make sense. But then, the same DIP 37 says that "[using package.d] is identical to what some projects have been doing with <i>all.d</i>, where they have a <i>foo/bar/all.d</i> which publicly imports all of the <i>bar</i> package, except that this provides additional syntactic sugar for it."<br>

<br></div><div>Is there any documentation describing the expected to behavior in regard to the fully-qualified names of the publicly imported symbols in package.d? ( <a href="http://dlang.org/module.html">http://dlang.org/module.html</a> doesn't mention package imports; <a href="http://dlang.org/changelog.html#import_package">http://dlang.org/changelog.html#import_package</a> doesn't mention fully-qualified names).<br>

<br></div><div>Thank again,<br><br>LMB<br></div><div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Dec 16, 2013 at 10:51 PM, Leandro Motta Barros <span dir="ltr"><<a href="mailto:lmb@stackedboxes.org" target="_blank">lmb@stackedboxes.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div>Hello,<br><br></div>I have some code using the old "all.d" idiom, which I am changing to use the new "package.d" feature.<br>

<br></div>Originally, I had something like this:<br>
<br></div>// mylib/util.d:<br>module mylib.util;<br>class Foo { }<br><br></div>// mylib/all.d:<br>module mylib.all;<br>public import mylib.util;<br><br></div>// main.d:<br>import mylib.all;<br>void main()<br>{<br>   auto f = new mylib.util.Foo;<br>


}<br><br></div>And this used to work. Now, I added a new file:<br></div><br></div>// package.d<br><div>module mylib;<br>public import mylib.util;<br><br></div><div>And changed the 'import' in the main one:<br><br>


</div><div>// main.d<br></div><div>import mylib;<br><br>void main()<br>{<br>   auto f = new mylib.util.Foo;<br>}<br><br></div><div>Now, the compiler complains: <br><br>main.d(5): Error: undefined identifier 'util'<br>


main.d(5): Error: mylib.util.Foo is used as a type<br><br></div><div>Isn't this 'package.d' feature supposed to work just as the old 'all.d' and '_,d' we used before?<br></div><div><br></div><div>


(I see that I can use 'mylib.Foo' instead of 'mylib.util.Foo', but <a href="http://dlang.org/module.html" target="_blank">http://dlang.org/module.html</a> is clear saying that "[a]ll symbols from a publicly imported module are also aliased in the
    importing module. This means that if module D imports module C, and
    module C <i>publicly</i> imports module B which has the symbol <i>bar</i>,
    in module D you can access the symbol via <span><span>bar</span></span>, <span><span>B.bar</span></span>, and <span><span>C.bar</span></span>.")<br><br></div>
<div>I am using DMD 2.064 here.<br></div><div><br></div><div>Thanks,<br><br></div><div>LMB<br><br></div></div>
</blockquote></div><br></div>