为什么Rust的Cargo认为0.8.3与0.9.0版本的API不兼容?
Cargo 语义化版本限定规则解答
0.x版本的特殊兼容判定原因
- 你的判断完全正确,Cargo判定0.8.3和0.9.0可能存在API不兼容,确实是因为主版本号为0
- 标准语义化版本规范明确约定:主版本号为0的版本属于初始开发阶段,没有稳定性承诺,任何版本号调整都可能包含公开API的破坏性改动。你提到的「次版本号变更不能破坏公开API」的规则,仅适用于主版本号≥1的正式稳定版本。
- 直接写版本号时Cargo默认采用caret限定符(
^),针对0.x版本的特殊规则为:^0.8.3等价于版本范围≥0.8.3 且 <0.9.0,仅修订号变动的版本会被认为API兼容。
主版本≥1的版本默认限定规则
- 当主版本号≥1时,Cargo的默认
^限定符会遵循标准语义化版本的兼容规则:^1.8.3等价于版本范围≥1.8.3 且 <2.0.0 - 也就是说你在
Cargo.toml中直接写依赖为some-crate = "1.8.3"时,Cargo是允许安装1.9.0甚至更高的同主版本次版本/修订版本的,只有主版本号提升到2.0.0及以上的版本才会被拦截。 - 如果你希望限制仅升级当前次版本下的修订号,可以改用波浪号限定符,比如
some-crate = "~1.8.3"就等价于≥1.8.3 且 <1.9.0,和0.x版本的默认限定规则一致。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

