为什么 Rust 的 Cargo 不考虑版本 0.8.3 与版本 0.9.0 兼容 API?

Why does Rust's Cargo not consider version 0.8.3 to have a compatible API with version 0.9.0?

我正在阅读 Rust book. Specifically this section 关于 Cargo 使用的语义版本控制。

真正没有意义的是:

The number 0.8.3 is actually shorthand for ^0.8.3, which means any version that is at least 0.8.3 but below 0.9.0. Cargo considers these versions to have public APIs compatible with version 0.8.3, and this specification ensures you'll get the latest patch release that will still compile with the code in this chapter. Any version 0.9.0 or greater is not guaranteed to have the same API as what the following examples use.

根据 semantic versioning 的规则,次要版本的更改(从 0.8.30.9.0)不能包含破坏 public API。为什么 Cargo 认为这两个版本的 public API 可能不兼容?是因为大版本刚好是0吗?如果我们正在处理主要版本 > 0(例如 1.8.3)的情况,那么在 Cargo.toml 中指定 1.8.3 会允许 Cargo 安装版本 1.9.0 吗?

如 The Cargo Book 的 Specifying Dependencies 章节中所述(强调已添加):

The string "0.1.12" is a semver version requirement. Since this string does not have any operators in it, it is interpreted the same way as if we had specified "^0.1.12", which is called a caret requirement.

Caret requirements

Caret requirements allow SemVer compatible updates to a specified version. An update is allowed if the new version number does not modify the left-most non-zero digit in the major, minor, patch grouping.

[...]

This compatibility convention is different from SemVer in the way it treats versions before 1.0.0. While SemVer says there is no compatibility before 1.0.0, Cargo considers 0.x.y to be compatible with 0.x.z, where y ≥ z and x > 0.