官方文档:https://semver.org/
在 Rust 中,Cargo.toml
中使用的版本号遵循 语义化版本(Semantic Versioning, SemVer),格式如下:
toml
MAJOR.MINOR.PATCH
例如:1.2.3
tokio = { version = "1.0", features = ["full"] }
基本规则解释
部分 | 含义 |
---|---|
MAJOR | 主版本号:当你做了不兼容的 API 修改时,递增 |
MINOR | 次版本号:当你做了向下兼容的功能性新增,递增 |
PATCH | 补丁号:当你做了向下兼容的问题修正,一般是bug修改,递增。 |
Cargo 支持的版本范围语法
Rust 的 Cargo.toml
使用语义化版本规则的前缀语法来指定依赖的版本范围:
1. ^
------ 默认行为(Caret requirement)
rust
serde = "1.0.219" # 等价于 ^1.0.219
含义:允许更新到不改变"最左侧非零数字"的任意新版本
写法 | 实际含义 | 范围说明 |
---|---|---|
^1.2.3 |
>=1.2.3, <2.0.0 |
不会破坏 API 的更新 |
^0.3.1 |
>=0.3.1, <0.4.0 |
0.x 被视为不稳定 |
^0.0.5 |
>=0.0.5, <0.0.6 |
0.0.x 变化都可能破坏兼容性 |
👉 ^
是 Cargo 的默认行为,用于保持向后兼容的同时接收非破坏性升级。
实例说明:
toml
serde = "1.0" # 等价于 ^1.0.0 → 允许 1.x.x(不包括 2.0)
serde = "0.3" # 等价于 ^0.3.0 → 允许 0.3.x(不包括 0.4)
serde = "0.0.5" # 等价于 ^0.0.5 → 只允许 0.0.5
特别注意:0.x 是不稳定的
0.x.y
版本被视为"未稳定",因此:
^0.1.2
只允许0.1.z
,不允许升级到0.2.0
^0.0.5
只允许0.0.5
,等价于锁定
2. ~
------ Patch 限定(Tilde requirement)
rust
serde = "~1.2.3"
含义:锁定 minor 版本,只允许 patch 升级
等价于:
rust
>=1.2.3, <1.3.0
3. = ------精确版本
rust
serde = "=1.2.3"
只允许使用 恰好 1.2.3
这个版本。即使最新版本是1.2.5,cargo update
命令也不会更新到最新版本。
4. 范围表达
rust
serde = ">=1.0.0, <1.5.0"
直接通过数学符号表达版本范围。
5. 星号 *
rust
serde = "*"
允许任何版本,默认拉取最新版本(不建议用于生产环境)。