Rust語義化版本介紹
官方文檔:https://semver.org/
在 Rust 中,Cargo.toml 中使用的版本號遵循 語義化版本(Semantic Versioning, SemVer),格式如下:
MAJOR.MINOR.PATCH
例如:1.2.3
tokio = { version = "1.0", features = ["full"] }
基本規則解釋
| 部分 | 含義 |
|---|---|
| MAJOR | 主版本號:當你做了不兼容的 API 修改時,遞增 |
| MINOR | 次版本號:當你做了向下兼容的功能性新增,遞增 |
| PATCH | 補丁號:當你做了向下兼容的問題修正,一般是bug修改,遞增。 |
Cargo 支持的版本范圍語法
Rust 的 Cargo.toml 使用語義化版本規則的前綴語法來指定依賴的版本范圍:
1. ^ —— 默認行為(Caret requirement)
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 的默認行為,用于保持向后兼容的同時接收非破壞性升級。
實例說明:
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)
serde = "~1.2.3"
含義:鎖定 minor 版本,只允許 patch 升級
等價于:
>=1.2.3, <1.3.0
3. = ——精確版本
serde = "=1.2.3"
只允許使用 恰好 1.2.3 這個版本。即使最新版本是1.2.5,cargo update 命令也不會更新到最新版本。
4. 范圍表達
serde = ">=1.0.0, <1.5.0"
直接通過數學符號表達版本范圍。
5. 星號 *
serde = "*"
允許任何版本,默認拉取最新版本(不建議用于生產環境)。
浙公網安備 33010602011771號