4 ms·
How does Cargo manage the case when dependencies X and Y both require a different version of dependency Z?
by Siecje 10y ago
How does Cargo manage the case when dependencies X and Y both require a different version of dependency Z?
- steveklabnik 10y agoIt attempts to unify them if it can, but if they cannot be unified, it will include both versions.
- cm3 10y agoInclude both how? Make renamed copies to have two and modify the code to use the new names?
- steveklabnik 10y agoIt doesn't have to do any renaming or modifying of names. Rust has a module system, so each dependency will use the version they need. The only time it doesn't Just Work is if one of those crates re-exports a type from the sub-crate in a public manner, and then you try to call something from the other crate with a value of that type. You'll get a compile-time error about mismatched types.
- cm3 10y agoBut it sounds like that's what's going on. Using foo-1.1 in bar.rs and foo-2.2 in rabbit.rs.
- steveklabnik 10y agoSure. That will Just Work in every case _except_ if bar and rabbit both re-export a type from foo, and you try to use them together. If they don't re-export anything, then it all works just fine. No renaming or transformations needed.
- kibwen 10y agoRust mangles symbols with version information, so it's no trouble to have two versions of the same library in the same binary if necessary.