Hipreme's #4 Tip of the day - Don't use package.d

Hipreme msnmancini at hotmail.com
Fri Nov 4 10:57:12 UTC 2022


Package.d is a real problem existing on our currently modules 
design. First is that it means to take the directory name to use 
as a module.

This is a problem for 3 reasons:

1. You won't be able to find your module by the file name. This 
is incredibly common, for instance, in Visual Studio Code, when 
you hit CTRL+P and type the file name, nope, you will need to 
write path/to/folder/package.d, beyond that, when you search 
package.d there will be so many files with the same name.

2. As being an exception to how the module system works, this has 
already caused me a few headaches (inexplicable bugs), that 
happens with symbols aliasing, when the time it happened, I had 
no idea on what it could be and I don't even remember how I 
solved, instead, I only knew it was related to package.d.

3. I'm currently having a bug on my API module that every 
duplicated file name, even when located at different 
directories(modules), are generating duplicate symbol. The major 
problem is that this is currently undebuggable, as the MSVC 
Linker does not show the full directory of the libraries/object 
files that caused this clash, not even the symbol!

The duplicate symbol currently only happens in MSVC Linker, which 
makes me think if the bug is in the D language or the linker 
itself, as on LLD this does not happen.
So, my current advice is always try making your file names 
unique, this will bring a much better debuggability in your 
project.



More information about the Digitalmars-d-learn mailing list