On Tuesday, 22 March 2022 at 14:44:59 UTC, Marcone wrote:
Why is dmd unable to import modules installed by dub using the import command like it does with the Phobos library? He can't send these modules to Linker? Needing to be passed to dmd via command line. I think it could be all automatic.

`import` itself has nothing to do with the linker, and it is not the reason Phobos is automatically linked. That happens because the compiler *always* passes Phobos to the linker, whether you import anything from it or not (though not in BetterC).

When you import a module from a library, the compiler is only using the import to understand which symbols are available to the module it's currently compiling. It does not attempt to compile the imported modules and doesn't have enough information to pass anything to the linker. It has no idea if an imported module is already compiled, or will be compiled later, and whether it will be passed to the linker as an object file or part of a static library, or if it won't go to the linker at all because it's in a dynamic library.

The only time `import` has any impact on the linker is when you pass `-i` to the compiler, in which case it will attempt to compile the modules it imports (excluding Phobos) and, in turn, pass the compiled object to the linker. But that's going to compile everything every time.

Because the compiler supports separate compilation and linking, it can't make any assumptions about what you actually want to compile and link. That's what build tools like dub and reggae are for.

Reply via email to