Oh yeah, I was merely complaining about the syntax. Coming from other languages, I interpreted that import statement to mean essentially this:
import { double, exponent /*...*/ } as operations from "Math";
…and as such, it took me a few seconds to understand what’s being aliased by as operations
.
As for importing all symbols of a module, I do think it’s more harm than good in non-compiled languages. But when it comes to compiled languages, I’d say it depends on the language.
In Rust, for example, I can easily throw down an inline module with one-way isolation, so that it can transparently access everything in its parent module via use super::*;
, while the parent module can’t access what’s in the module (unless it’s been marked pub
). That can reduce mental complexity of the code (and is actually used a lot, because unit tests are typically put into such an inline module).
It’s also useful in Rust, because you can re-export symbols in different modules, so you can break up a file without breaking the imports by throwing a pub use my_sub_module::*;
into the original module.
But yeah, on the flipside, I really wouldn’t miss it, if it didn’t exist in Java. It was rather even annoying, because the popular IDEs have a rule to replace explicit imports with an asterisk as soon as it reached 5 symbols imported from the same module.
It’s not as bad as one might think, because you can’t declare top-level functions or variables in Java (everything has to be in a class), but it still sometimes led to those asterisk imports bringing in the wrong class names, so I’d have to manually add the import I wanted underneath them…
I have no experience with this, but I figured a Rust library might have tried to solve it (static linking is very much the norm here) and I found that
ash
can statically link the “Vulkan loader”. I don’t know, what that actually means, for example whether it would still loadlibxcb
at runtime. Might be worth looking into what they do…See the “Optional linking” section here for their description: https://crates.io/crates/ash#optional-linking