Nested public imports - bug or feature?

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Aug 13 06:42:41 PDT 2015


On Thursday, 13 August 2015 at 13:12:44 UTC, Dicebot wrote:
> Right now this works:
>
> ``D
> struct Std
> {
>   public import std.stdio;
> }
>
> void main()
> {
>   Std.writeln("Nice!");
> }
> ```
>
> I want to use it as an import hygiene idiom but not entirely 
> sure if this behavior can be relied upon (or it is just a side 
> effect of imports being implemented as aliases currently).

Well, that's pretty much why splitting up a module and putting 
public imports in its package.d file doesn't break any of the 
cases where someone types out the full import path when referring 
to something from that module/package. But I doubt that anyone 
considered that that would have this effect when you have a 
scoped import. In fact, to be honest, it never occurred to me 
that it would be legal to have a scoped, public import. I think 
that you just hit a weird result of how allowing imports to be 
put everywhere ended up working.

I confess that I don't particularly like that this is legal (and 
I think that public imports tend to get a bit hinky because of 
the fact that they create aliases), and I'm not quite sure how 
you could use it form "import hygiene," but I also don't see how 
this could work any other way if scoped, public imports are 
allowed.

- Jonathan M Davis


More information about the Digitalmars-d mailing list