Module Name Resolution

ketmar via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Oct 25 22:46:30 PDT 2016


On Wednesday, 26 October 2016 at 04:51:23 UTC, Jason C. Wells 
wrote:
> I am reading through Ketmar's iv.d/nanovg/package.d:
>
>   module iv.nanovg;
>   public import iv.nanovg.nanovg;
>
> This looks like three levels of hierarchy, but is it?

it maps to "iv/nanovg/nanovg.d" according to dmd map rules. i 
used to have all the code in package.d, but later moved it out to 
nanovg.d.

i.e. last name is always a file, everything before it is a 
directory.

> I'm a little confused because the corresponding directory in 
> ketmar's source code is named "iv.d" rather than "iv" which is 
> what I would have thought to find based on the import.

this is a repository name. it is supposed to be named just "iv", 
and git names main directory by repository name if you are doing 
a simple clone. my bad, i should have made that clear.

> I see mention of a subpackage in my previous thread. Is this 
> how a subpackage is implemented?

actually, packages and subpackages are just a convenient terms 
for something that is not strictly defined in D. this is more a 
convention: if we'll place all the files in directory, say, 
"mypkg/a.d", "mypkg/b.d", and add package.d there as 
"mypkg/package.d", then we'll be able to just write "import 
mypkg;". dmd will automatically look for "mypkg/package.d" in 
this case.

so, when you're writing "import iv.nanovg;", dmd looks for 
"iv/nanovg/package.d", and process it. package.d does more 
imports, so dmd loads 'em too. the only magic here is special 
"package.d" file.


More information about the Digitalmars-d-learn mailing list