"Can lead to naming conflicts, especially in larger codebases and when using multiple crates."
I think it is worth pointing out what that really means.
The semver spec says:
"Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backward compatible functionality is introduced to the public API." [1]
Unlike most other languages Rust has clear and written rules about what comprises a minor change.
"Adding new, public items is a minor change" [2]
If the new, public item gets glob imported and you already have an item with this name your code will not compile.
The consequence of all of this is that when using glob imports a minor update of a dependency can break your build, which is not what most people would expect.
I think it is worth pointing out what that really means.
The semver spec says:
"Minor version Y (x.Y.z | x > 0) MUST be incremented if new, backward compatible functionality is introduced to the public API." [1]
Unlike most other languages Rust has clear and written rules about what comprises a minor change.
"Adding new, public items is a minor change" [2]
If the new, public item gets glob imported and you already have an item with this name your code will not compile.
The consequence of all of this is that when using glob imports a minor update of a dependency can break your build, which is not what most people would expect.
[1] https://semver.org/
[2] https://doc.rust-lang.org/cargo/reference/semver.html#item-n...