我有 Java 背景,最近开始使用Rust。
除了解释Crates 和 Packages的章节之外,官方 Rust 文档非常不言自明。
官方文档在解释两者时用如此多的 OR 和 AND 将其复杂化。
这篇 reddit帖子对此进行了更好的解释,但并不彻底。
Rust 中的 Crate 和 Package 之间的确切区别是什么?我们在哪里/什么时候使用它们?
非常感谢!
sk_*_*ant 10
从Rust编译器的角度来看,“crate”是编译单元的名称。包由一个或多个文件中的模块层次结构组成。这与大多数“传统”编译语言(如 Java、C 或 C++)形成鲜明对比,其中编译单元是单个文件。
\n从用户的角度来看,这个定义并没有真正的帮助。事实上,在大多数情况下,您需要区分两种类型的板条箱:
\n包的概念并非起源于 Rust 编译器,而是起源于 Rust 包管理器 Cargo。至少对于简单的项目来说,包也是您将签入版本控制的内容。
\n一个包由一个或多个 crate 组成,但库 crate 不得超过一个。
\ncargo newcargo new --libcargo new,cargo new --lib然后修改包目录结构以添加其他 crate正如您现在所看到的,这个问题并没有真正意义 \xe2\x80\x93 您应该并且必须始终使用两者。如果没有至少一个 crate,包就不可能存在,并且 crate(至少如果您使用 Cargo)始终是包的一部分。
\n因此,更好的问题是:
\n一个包裹中包含多个板条箱的原因有多种。例如:
\n请注意,如果您有一个非常大的项目,在这些情况下您可能想使用Cargo 的工作区功能。
\n