官方文档: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语义化版本介绍的更多相关文章

  1. Semantic Versioning Specification & 语义化版本

    Semantic Versioning Specification & 语义化版本 Semantic Versioning Specification http://semver.org 16 ...

  2. npm学习(八)之如何使用语义化版本

    npm的语义化版本控制——Semantic versioning 在新发布的代码中传达更改的程度非常重要,因为有时更新会破坏包需要的代码(称为依赖项).语义化版本控制(semver)是一个旨在解决这个 ...

  3. 关于语义化版本(semantic versioning or SemVer)

    1  为什么要有SemVer? SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况. 在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便 ...

  4. semantic versioning语义化版本号

    语义化版本号 是由github创始人 Tom Preston-Werner 发起的一个关于软件版本号的命名规范,关于这个规范详细的说明可以在 官网 查看,也可访问其 GitHub项目页面 ,官网文档: ...

  5. 语义化版本控制规范(SemVer)

    摘自: http://semver.org/lang/zh-CN/ 简介 在软件管理的领域里存在着被称作"依赖地狱"的死亡之谷,系统规模越大,加入的套件越多,你就越有可能在未来的某 ...

  6. 版本号严格遵守semver语义化标准

    地址:http://semver.org/lang/zh-CN/?spm=a219a.7629140.0.0.GUJMXE 语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递 ...

  7. Semver(语义化版本号)扫盲

    最近Github 10周年在朋友圈里沸沸扬扬刷屏,小编在工作中却惊讶的发现不少同事对版本号中的beta和rc没有概念,使用 npm install package@next 时,也不清楚next代表的 ...

  8. 语义化版本控制规范(SemVer)

    参考链接 https://semver.org/lang/zh-CN/ 语义化版本 2.0.0 (透过版本号的改变来传达信息.) 摘要 版本格式: 主版本号.次版本号.修订号 版本号递增规则如下: 1 ...

  9. 语义化npm版本号

    参考资料: 语义化版本2.0.0 the semantic versioner for npm 在package的devDependencies和dependencies2个字段中有指定依赖包版本,这 ...

  10. HTML 语义化标签-新增标签介绍

    HTML 基础知识 版权声明:未经博主授权,内容严禁转载 ! HTML语义化标签概念 如果没有语义化标签,上面这些 div 都是没有实际意义的,只是我们提供给浏览器的指令. 和 语义化 代码对比: 什 ...

随机推荐

  1. Docker基本使用方法

    Docker 的基本使用方法 最近在尝试复现研究CVE,docker太方便了,学了下基本的使用方法,怕忘记,记于此处 1. 容器与镜像 镜像是一堆只读的文件. 容器 = 镜像 + 读写层 运行态的容器 ...

  2. 什么是FIPS 140-3?

    什么是FIPS 140-3? FIPS 140-3是一项由NIST(National Institute of Standards and Technology)发布的针对加密模块安全要求的标准,英文 ...

  3. 测试人员在 Scrum 中的角色是什么?

    测试人员在Scrum团队中到底担任什么样的角色?Scrum团队有测试角色吗?测试人员是Scrum团队的正式成员吗? 一.<Scrum指南>对测试的看法 很多人认为Scrum团队中的三个角色 ...

  4. 一种通用的arduino通信例程

    本教程将给出一种通用的,适用于arduino(uno和mega等)单片机的一个通信的教程,通过对例程的修改,可以做成任意的符合需求的代码,下面请看. // 函数定义 String detectStri ...

  5. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-18- 操作模态对话框弹窗 (详细教程)

    1.简介 我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识.宏哥在java+selenium系列文章中介绍过这部分内容. ...

  6. ctypes学习 + GearDVFS源码分析(/src/perf_lib)

      最近在尝试复现GearDVFS的代码,代码结构很复杂,由于需要获取硬件信息,作者使用ctypes实现与底层的交互,任务紧迫,开始学习吧! 1. ctypes介绍   资料的来源已经放在了后文的链接 ...

  7. typescript结构化类型应用两例

    介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...

  8. C# 正则匹配键盘行(或列)连续字符 ,3连连续字符匹配

    https://blog.csdn.net/qq_20173195/article/details/126989662 参考 using System; public class Program { ...

  9. C# 文件正由另一进程使用,该进程无法访问该文件

    OpenFileDialog控件,而使用该控件时若没有将条件设置好,很容易出现以下提示: 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示, ...

  10. Axios 简单使用

    axios({ method: "post", headers: { "Content-Type": "application/json" ...