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.