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 = "*"
允许任何版本,默认拉取最新版本(不建议用于生产环境)。
Rust语义化版本介绍的更多相关文章
- Semantic Versioning Specification & 语义化版本
Semantic Versioning Specification & 语义化版本 Semantic Versioning Specification http://semver.org 16 ...
- npm学习(八)之如何使用语义化版本
npm的语义化版本控制——Semantic versioning 在新发布的代码中传达更改的程度非常重要,因为有时更新会破坏包需要的代码(称为依赖项).语义化版本控制(semver)是一个旨在解决这个 ...
- 关于语义化版本(semantic versioning or SemVer)
1 为什么要有SemVer? SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况. 在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便 ...
- semantic versioning语义化版本号
语义化版本号 是由github创始人 Tom Preston-Werner 发起的一个关于软件版本号的命名规范,关于这个规范详细的说明可以在 官网 查看,也可访问其 GitHub项目页面 ,官网文档: ...
- 语义化版本控制规范(SemVer)
摘自: http://semver.org/lang/zh-CN/ 简介 在软件管理的领域里存在着被称作"依赖地狱"的死亡之谷,系统规模越大,加入的套件越多,你就越有可能在未来的某 ...
- 版本号严格遵守semver语义化标准
地址:http://semver.org/lang/zh-CN/?spm=a219a.7629140.0.0.GUJMXE 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递 ...
- Semver(语义化版本号)扫盲
最近Github 10周年在朋友圈里沸沸扬扬刷屏,小编在工作中却惊讶的发现不少同事对版本号中的beta和rc没有概念,使用 npm install package@next 时,也不清楚next代表的 ...
- 语义化版本控制规范(SemVer)
参考链接 https://semver.org/lang/zh-CN/ 语义化版本 2.0.0 (透过版本号的改变来传达信息.) 摘要 版本格式: 主版本号.次版本号.修订号 版本号递增规则如下: 1 ...
- 语义化npm版本号
参考资料: 语义化版本2.0.0 the semantic versioner for npm 在package的devDependencies和dependencies2个字段中有指定依赖包版本,这 ...
- HTML 语义化标签-新增标签介绍
HTML 基础知识 版权声明:未经博主授权,内容严禁转载 ! HTML语义化标签概念 如果没有语义化标签,上面这些 div 都是没有实际意义的,只是我们提供给浏览器的指令. 和 语义化 代码对比: 什 ...
随机推荐
- Docker基本使用方法
Docker 的基本使用方法 最近在尝试复现研究CVE,docker太方便了,学了下基本的使用方法,怕忘记,记于此处 1. 容器与镜像 镜像是一堆只读的文件. 容器 = 镜像 + 读写层 运行态的容器 ...
- 什么是FIPS 140-3?
什么是FIPS 140-3? FIPS 140-3是一项由NIST(National Institute of Standards and Technology)发布的针对加密模块安全要求的标准,英文 ...
- 测试人员在 Scrum 中的角色是什么?
测试人员在Scrum团队中到底担任什么样的角色?Scrum团队有测试角色吗?测试人员是Scrum团队的正式成员吗? 一.<Scrum指南>对测试的看法 很多人认为Scrum团队中的三个角色 ...
- 一种通用的arduino通信例程
本教程将给出一种通用的,适用于arduino(uno和mega等)单片机的一个通信的教程,通过对例程的修改,可以做成任意的符合需求的代码,下面请看. // 函数定义 String detectStri ...
- 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-18- 操作模态对话框弹窗 (详细教程)
1.简介 我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识.宏哥在java+selenium系列文章中介绍过这部分内容. ...
- ctypes学习 + GearDVFS源码分析(/src/perf_lib)
最近在尝试复现GearDVFS的代码,代码结构很复杂,由于需要获取硬件信息,作者使用ctypes实现与底层的交互,任务紧迫,开始学习吧! 1. ctypes介绍 资料的来源已经放在了后文的链接 ...
- typescript结构化类型应用两例
介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...
- C# 正则匹配键盘行(或列)连续字符 ,3连连续字符匹配
https://blog.csdn.net/qq_20173195/article/details/126989662 参考 using System; public class Program { ...
- C# 文件正由另一进程使用,该进程无法访问该文件
OpenFileDialog控件,而使用该控件时若没有将条件设置好,很容易出现以下提示: 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示, ...
- Axios 简单使用
axios({ method: "post", headers: { "Content-Type": "application/json" ...