rust 初探 -- Package, Crate, Module

rust 初探 – Package, Crate, Module

Package, Crate, 定义 Module

rust 模块系统

  • Package(最顶层):Cargo 的特性,让你构建、测试、共享 Crate
  • Crate:一个模块树,它可以产生一个 library 或可执行文件
  • Module、Use:让你控制代码的组织、作用域、私有路径
  • Path(路径):为 struct、function 或 module 等项命名的方式

Package 和 Crate

Crate类型:binary,library
Crate Root:

  • 是源代码文件
  • rust 编译器从这里开始,组成你的 Crate 的根 Module
    一个 Package:
  • 包含一个 Cargo.toml,它描述了如何构建这些 Crates
  • 只能包含 0-1个 library crate
  • 可以包含任意数量的 binary crate
  • 但必须包含一个 crate(library 或binary)
Cargo 的惯例

rust 初探 -- Package, Crate, Module_第1张图片

  • src/main.rs:
    • bianry crate 的 crate root
    • crate 名与 package 名相同
  • src/lib.rs:
    • package 包含一个 library crate
    • library crate 的 crate root
    • crate 名与 package 名相同
  • cargo 会把 crate root 文件交给 rustc 来构建 library 或 binary
Package 相关惯例
  • 一个 Package 可以同时包含 src/main.rs 和 src/lib.rs
    • 也即一个 binary crate,一个 library crate
    • 名称与 package 名相同
  • 一个 Package 可以有多个binary crate:
    • 放到 src/bin 目录下
Crate 的作用
  • 将相关功能组合到一个作用域内,便于在项目间进行共享,防止冲突
  • 访问它的功能需要通过对应的名字:如 rand

定义 module 来控制作用域和私有性

  • Module:
    • 在一个 crate 内,将代码进行分组,增加可读性,易于复用
    • 控制项目(item)的私有性:public,private
  • 建立 Module:
    • mod 关键字,可嵌套
    • 可包含其他项(struct,enum,常量,trait,函数等)的定义
      示例:
mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}
        fn seat_at_table() {}
    }

    mod serving {
        fn take_order() {}
        fn serve_order() {}
        fn take_payment() {}
    }
} 

rust 初探 -- Package, Crate, Module_第2张图片

  • 这里的 src/main.rs 和 src/lib.rs 叫做 crate roots,两个文件(任意一个)的内容形成了名为 crate 的模块,位于整个模块树的根部
  • 整个模块树在隐式的 crate 模块下

你可能感兴趣的:(rust,rust,开发语言,后端)