【发布时间】:2017-05-02 06:53:45
【问题描述】:
Rust crate 使用Semantic Versioning。因此,每个具有重大更改的版本都应该导致主要版本的升级。 重大更改通常被认为可能会破坏下游 crate(代码取决于相关库)。
然而,在 Rust 中,很多东西都有破坏下游板条箱的潜力。例如,更改(仅包括添加)公共符号集可能是一项重大更改,因为下游 crate 可以使用 glob-imports (use foo::*;) 将我们库的符号拉入它们的命名空间.因此,添加符号也可以破坏依赖的 crate;见this example。
同样,更改(添加或更改版本)我们的 依赖项集可能会破坏下游构建。您还可以想象,下游 crate 依赖于我们的一种公共类型的特定大小。如果有的话,这很少有用;我只想表明:只要下游板条箱足够努力,一切都可能是一个突破性的变化。
这方面有什么指导方针吗? 究竟什么是重大更改,什么不是(因为它被认为是“用户的错”)?
【问题讨论】:
-
“更改我们的依赖项集”是指添加/删除依赖项,更改依赖项的版本,还是其中任何一种? (我个人认为对于前奏模块使用全局导入是不好的except,因此只有前奏模块应该担心添加符号)。
-
仅当您的公共 API 不兼容复古时。
-
如果代码无法编译(如您的示例中),我认为您不会考虑修改版本; semver 在这里似乎不适用。
-
@MatthieuM。 “任何这些” -> 是的。
-
@LukasKalbertodt:我很惊讶更改依赖项的版本可能会破坏下游板条箱。我认为 Rust 的名称修改和静态编译的目的是能够在最终的二进制文件中拥有同一个下游 crate 的多个实例。我错过了什么吗?
标签: rust rust-cargo semantic-versioning