langShift

模块系统与构建工具

学习 Rust 的模块系统、包管理和项目结构,对比 JavaScript 的模块化开发

模块系统与构建工具

📖 学习目标

了解 Rust 的模块系统和包管理工具 Cargo,学会如何组织 Rust 项目结构,并理解与 JavaScript 模块系统的差异。


🎯 模块系统对比

JavaScript 的模块系统

JavaScript 使用 ES6 模块语法:

正在加载...

Rust 的模块系统

Rust 使用 moduse 关键字管理模块:

正在加载...

模块系统差异

  1. 文件组织: Rust 使用 mod 声明模块,JavaScript 使用文件路径
  2. 可见性: Rust 需要显式声明 pub 来公开函数和结构体
  3. 导入语法: Rust 使用 use 关键字,JavaScript 使用 import
  4. 默认导出: Rust 没有默认导出概念,需要显式导入

📦 包管理系统对比

JavaScript 的 npm

正在加载...

Rust 的 Cargo

正在加载...

包管理差异

  1. 配置文件: npm 使用 package.json,Cargo 使用 Cargo.toml
  2. 依赖管理: Cargo 的依赖管理更严格,版本冲突处理更好
  3. 构建工具: Cargo 集成了构建、测试、文档生成等功能
  4. 特性系统: Rust 支持条件编译和特性标志

🏗️ 项目结构对比

JavaScript 项目结构

javascript-project/
├── package.json
├── package-lock.json
├── node_modules/
├── src/
│ ├── index.js
│ ├── math.js
│ ├── utils.js
│ └── components/
│ ├── calculator.js
│ └── formatter.js
├── tests/
│ ├── math.test.js
│ └── utils.test.js
├── dist/
├── .gitignore
└── README.md

Rust 项目结构

rust-project/
├── Cargo.toml
├── Cargo.lock
├── src/
│ ├── main.rs # 二进制程序入口
│ ├── lib.rs # 库入口
│ ├── math.rs
│ ├── utils.rs
│ └── components/
│ ├── mod.rs # 子模块声明
│ ├── calculator.rs
│ └── formatter.rs
├── tests/
│ ├── integration_test.rs
│ └── common/
│ └── mod.rs
├── examples/
│ └── basic_usage.rs
├── benches/
│ └── benchmark.rs
├── .gitignore
└── README.md

🔧 Cargo 命令对比

npm 常用命令

正在加载...

Cargo 常用命令

正在加载...

📚 模块组织最佳实践

创建模块层次结构

正在加载...

🎯 练习题

练习 1: 创建模块结构

创建一个 Rust 项目,包含以下模块:

  • math: 基础数学运算
  • utils: 工具函数
  • models: 数据模型
查看答案
// src/lib.rs
pub mod math;
pub mod utils;
pub mod models;
// src/math.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn multiply(a: i32, b: i32) -> i32 {
a * b
}
// src/utils.rs
pub fn format_string(s: &str) -> String {
format!("[{}]", s)
}
// src/models.rs
#[derive(Debug)]
pub struct User {
pub name: String,
pub age: u32,
}
impl User {
pub fn new(name: String, age: u32) -> Self {
User { name, age }
}
}

练习 2: 配置 Cargo.toml

为项目添加以下依赖:

  • serde 用于序列化
  • tokio 用于异步编程
  • reqwest 用于 HTTP 请求
查看答案
[package]
name = "my-project"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.0", features = ["full"] }
reqwest = { version = "0.11", features = ["json"] }

练习 3: 模块导入导出

创建一个模块,导出多个函数,并在 main.rs 中使用:

查看答案
// src/calculator.rs
pub fn add(a: f64, b: f64) -> f64 {
a + b
}
pub fn subtract(a: f64, b: f64) -> f64 {
a - b
}
pub fn multiply(a: f64, b: f64) -> f64 {
a * b
}
// src/lib.rs
pub mod calculator;
// main.rs
use my_project::calculator::{add, subtract, multiply};
fn main() {
println!("5.5 + 3.2 = {}", add(5.5, 3.2));
println!("10.0 - 4.5 = {}", subtract(10.0, 4.5));
println!("6.0 * 2.5 = {}", multiply(6.0, 2.5));
}

📝 总结

在这一章中,我们学习了:

  1. 模块系统: Rust 使用 moduse 管理模块,比 JavaScript 更严格
  2. 包管理: Cargo 是 Rust 的包管理工具,功能比 npm 更集成
  3. 项目结构: Rust 项目有标准的目录结构
  4. 依赖管理: Cargo.toml 配置文件管理项目依赖
  5. 构建工具: Cargo 集成了构建、测试、文档等功能

关键要点

  • Rust 的模块系统更注重可见性和组织性
  • Cargo 是 Rust 生态系统的核心工具
  • 项目结构遵循 Rust 约定
  • 依赖管理更严格,避免版本冲突

下一步学习

在下一章中,我们将深入学习 Rust 的所有权系统,这是 Rust 最核心的概念,也是与 JavaScript 最大的差异所在。


继续学习: 所有权与内存模型