rust crate 单元

举报
福州司马懿 发表于 2025/09/25 10:15:34 2025/09/25
【摘要】 在 Rust 中,Crate(中文常译为“包”或“单元”) 是 Rust 代码的最基本编译和分发单位。它可以是一个可执行程序(binary crate)或一个库(library crate)。Crate 是 Rust 生态系统的核心概念,类似于其他语言中的“项目(Project)”、“包(Package)”或“库(Library)”。 1. Crate 的两种类型 (1) Binary Cr...

在 Rust 中,Crate(中文常译为“包”或“单元”) 是 Rust 代码的最基本编译和分发单位。它可以是一个可执行程序(binary crate)或一个库(library crate)。Crate 是 Rust 生态系统的核心概念,类似于其他语言中的“项目(Project)”、“包(Package)”或“库(Library)”。


1. Crate 的两种类型

(1) Binary Crate(可执行包)

  • 编译后生成一个可执行文件(如 ./target/debug/my_app)。
  • 包含 main.rs 文件(入口函数 fn main())。
  • 示例:
    cargo new my_app  # 创建一个新的 binary crate
    
    文件结构:
    my_app/
    ├── Cargo.toml    # 依赖和元数据
    └── src/
        └── main.rs   # 入口函数
    

(2) Library Crate(库包)

  • 编译后生成一个 .rlib.so/.dll 文件(供其他代码调用)。
  • 包含 lib.rs 文件(库的公共接口)。
  • 示例:
    cargo new my_lib --lib  # 创建一个新的 library crate
    
    文件结构:
    my_lib/
    ├── Cargo.toml
    └── src/
        └── lib.rs   # 库的公共 API
    

2. Crate 的核心特性

(1) 模块化(Modules)

  • Crate 内部通过 mod 关键字组织代码(类似其他语言的“命名空间”或“包”)。
  • 示例:
    // src/lib.rs
    mod math {
        pub fn add(a: i32, b: i32) -> i32 {
            a + b
        }
    }
    
    pub fn greet() {
        println!("Hello from my_lib!");
    }
    
    其他代码可以通过 my_lib::math::add() 调用。

(2) 依赖管理(Dependencies)

  • 通过 Cargo.toml 声明依赖的外部 crate(如 serdereqwest)。
  • 示例:
    [dependencies]
    serde = { version = "1.0", features = ["derive"] }
    reqwest = "0.11"
    

(3) 可见性控制

  • 使用 pub 关键字控制模块、函数或结构的公开性:
    pub fn public_function() {}  // 可被外部调用
    fn private_function() {}     // 仅限当前 crate 内部使用
    

3. Crate 的作用域

(1) 本地 Crate

  • 当前项目中的代码(如 src/main.rssrc/lib.rs)。

(2) 外部 Crate

  • 通过 Cargo.toml 引入的第三方库(如 serdetokio)。
  • 使用 use 导入:
    use serde::{Deserialize, Serialize};
    

(3) 标准库(std)

  • Rust 内置的标准库(如 std::vec::Vecstd::io)。
  • 默认自动引入,无需显式声明:
    let vec: Vec<i32> = Vec::new();  // 来自 std::vec
    
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。