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 的惯例

在这里插入图片描述

  • 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() {}
    }
} 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiangw557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值