在Rust Cargo中,插入符号版本约束意味着什么?
我正在实现Rust Cargo版本要求。一般来说,我很难理解指定的插入符号要求。我发现了,但这个问题是关于npm版本要求的,我不确定它是否与Rust Cargo版本要求相同 最后,我读到: 插入符号要求允许对指定版本进行SemVer兼容的更新。如果新版本号未修改主、辅补丁分组中最左边的非零数字,则允许进行更新。在这种情况下,如果我们运行在Rust Cargo中,插入符号版本约束意味着什么?,rust,rust-cargo,Rust,Rust Cargo,我正在实现Rust Cargo版本要求。一般来说,我很难理解指定的插入符号要求。我发现了,但这个问题是关于npm版本要求的,我不确定它是否与Rust Cargo版本要求相同 最后,我读到: 插入符号要求允许对指定版本进行SemVer兼容的更新。如果新版本号未修改主、辅补丁分组中最左边的非零数字,则允许进行更新。在这种情况下,如果我们运行cargo update-p time,如果是最新的0.1.z版本,cargo应该将我们更新到0.1.13,但不会将我们更新到0.2.0。如果我们将版本字符串指定
cargo update-p time
,如果是最新的0.1.z
版本,cargo应该将我们更新到0.1.13
,但不会将我们更新到0.2.0
。如果我们将版本字符串指定为^1.0
,则cargo应更新为1.1
,如果它是最新的1.y
版本,而不是2.0
。版本0.0.x
被视为与任何其他版本不兼容
以下是插入符号要求的更多示例以及允许的版本:
因此,除了我对第六个示例(^0.0.3
)的理解之外,我的结论是插入符号版本要求与通配符版本要求完全相同,除非指定了补丁,其中通配符版本要求与={version}
(等于或更高版本)比较版本要求一致
这种理解正确吗?为什么示例6是这样?与npm不同,默认版本要求范围实际上是插入符号要求!这一点已在问题中链接的部分之前的中说明 字符串
“0.1.12”
是semver版本要求。由于此字符串中没有任何运算符,因此它的解释方式与我们指定的“”^0.1.12“
”相同,这称为插入符号要求
因此,以下两个依赖项规范是等效的
time = "0.1.12"
顺便说一下,这是本文件其余部分中提到的要求。time
的更新可能会带来高于0.1.12的版本,但决不会带来0.2.0或更高的版本
另见:
0.0.x
不被视为与任何其他版本兼容。”
^1.2.3 := >=1.2.3, <2.0.0 // same as >=1.2.3 AND 1.*
^1.2 := >=1.2.0, <2.0.0 // same as >=1.2 AND 1.*, which condenses into 1.2.*
^1 := >=1.0.0, <2.0.0 // same as 1.*
^0.2.3 := >=0.2.3, <0.3.0 // same as >=0.2.3 AND 0.2.*
^0.2 := >=0.2.0, <0.3.0 // same as 0.2.*, which condenses into 0.2.*
^0.0.3 := >=0.0.3, <0.0.4 // huh
^0.0 := >=0.0.0, <0.1.0 // same as >=0.0.0 AND 0.0.*
^0 := >=0.0.0, <1.0.0 // same as >=0.0.0 AND 0.*, which condenses into 0.*
time = "0.1.12"
time = "^0.1.12"