3 ms·
When a crate is part of a public interface, that's harder, indeed. Crates solve it in a few ways: • crates that expect to be used for interoperability are ofte
by pornel 7y ago
When a crate is part of a public interface, that's harder, indeed. Crates solve it in a few ways:
• crates that expect to be used for interoperability are often split into smaller crates (like API and back-end, or low-level API and high-level API), so that they can evolve some parts without breaking others.
• sometimes breaking changes are technically breaking, but easy to upgrade (e.g. methods renamed, args reordered). In that case most users catch up quickly.
• in desperate cases, a new version can import its own old version and re-export old structs and interfaces that haven't changed, so they're compatible across major versions.
• proper sharing and composition should be done via traits, so that you can implement a trait for any number generator, not just one version of one implementation.