Understanding the Use of Nested Import and Selective Import in D

Renato renato at athaydes.com
Wed Jan 17 14:03:18 UTC 2024


On Wednesday, 17 January 2024 at 13:38:10 UTC, Orfeo wrote:
> On Tuesday, 16 January 2024 at 19:05:43 UTC, Jonathan M Davis 
> wrote:
>>
>> When local imports were introduced, they were pushed as best 
>> practice (in part, because Andrei is a big fan of them), and I 
>> think that for the most part, they still are, but there's 
>> definitely going to be some disagreement on it.
>>
>> [...]
>
> thanks a bunch for your in-depth analysis.
> Your insights have been  helpful in clarifying my understanding 
> of how to approach `import` in my code.

I've come to prefer function/struct-level imports where 
possible... with the exception being those imports which get used 
by a lot of functions within the same module... because they just 
become tiringly repetitive, there's a point where it simply 
becomes cleaner to have a single import at the top of the file 
instead of the same imports again and again within function scope 
(though there's never going to be a "threshold" everyone agrees 
on, I think everyone has one).

My main reasoning is that D tools, surprisingly, cannot do 
"Optimize Imports" (turns out that with all the metaprogramming 
going on , it's impossible to tell for sure which imports are 
being used - or so I read in another thread about this topic)... 
so you're likely to get lots of unused imports over time as you 
change your code, which I just find distatestful - and it become 
harder and harder to keep the imports "correct". Keeping imports 
more local makes that a little bit easier to avoid, besides the 
other reasons like making it easier to refactor.

Regarding selective imports: those are helpful to people reading 
your code, because they may not be as familiar with all the names 
exported by the modules you're using. The argument against that 
from the "D selective imports have effects you may not want" seem 
highly unconvincing to me because it's basically talking about 
ugly edge cases related to how UFCS works which maybe should even 
be fixed and not exist at all?! Avoiding selective imports 
because of that is the proverbial throwing the baby out with the 
bath water.


More information about the Digitalmars-d-learn mailing list