crate 是一个二进制项或者库。crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块。
    Cargo 遵循一个约定:src/main.rs 就是一个与包同名的二进制 crate 的 crate 根。同样的,Cargo 知道如果包目录中包含 src/lib.rs,则包带有与其同名的库 crate,且 src/lib.rs是 crate 根。
    如果一个包同时含有 src/main.rssrc/lib.rs,则它有两个 crate:一个二进制的和一个库的,且名字都与包相同。

    • main.rs:binary crate,应该生成一个(或多个)可执行文件,可以安装在用户的路径中,并可以像平常一样执行。
    • lib.rs:lib crate 的目的不是创建可执行文件,而是为其他板块提供可依赖和使用的功能。

    通过将文件放在 src/bin目录下,一个包可以拥有多个二进制 crate:每个src/bin下的文件都会被编译成一个独立的二进制 crate。
    一个 crate 会将一个作用域内的相关功能分组到一起,使得该功能可以很方便地在多个项目之间共享。

    感觉更像 C++ 中的 package