< 返回版块

Youziw 发表于 2021-11-30 17:53

Tags:Rust

很多语言有 Package 的概念,Rust 也有,除此之外,更常见的是 Crate。有一个常见的误解:packages 和 crates 是一样的。

1.关于Crate

一个 crate,类似 crate 中的模块,是一种代码组织的方式。

一个 crate,可以是一个二进制(可执行)或库。

一个 crate ,不会独立发布,而是作为 package 的成员发布。

编译器知道 crate 是什么,并使用 create 作为项目的命名空间。如果不在作用域内,你可以通过类似这样的调用 std::hash::Hash 定义自己的 trait。

2.关于Package

一个 package ,是至少一个 crate 的包装器。package 是可发布的。

一个 package ,可以包含 0 或 1 个库 create。

一个 package ,可以包含任意数量的二进制 create。

将 package 加入依赖时,意味着使用 package 中的一个 create。

当你使用 cargo run 或 cargo install 而指定具体的 crate 时,意味着执行 package 中的一个二进制 crate。

当 cargo run --bin 或 cargo install --bin 后跟一个 crate 名称时,意味着使用 package 中这个特定的 crate。

3.为什么会误解呢?

主要因 crates.io 导致的。虽然叫做 crates.io,实际上它是 packages 的仓库。你通过 crates.io 找到了某个库,会将 package 加入 Cargo.toml 依赖中,你不需要指定具体的 crate,因为 package 只能有一个库 crate。

评论区

写评论
wrx1239 2022-04-27 08:40

有兴趣的小伙伴可以投递简历哦

作者 Youziw 2021-12-06 22:44

👍

--
👇
ftkj411522: 现阶段,非凸科技正寻找行业内优秀的【Rust开发工程师】,薪资福利超级优厚。在平等、开放的环境里,等你和非凸一起并肩作战!飞速成长!欢迎加入!

ftkj411522 2021-12-01 18:10

现阶段,非凸科技正寻找行业内优秀的【Rust开发工程师】,薪资福利超级优厚。在平等、开放的环境里,等你和非凸一起并肩作战!飞速成长!欢迎加入!

1 共 3 条评论, 1 页