SUNKAIS OS · READ ONLY

Jarvis

登录后,可以询问自己的任务、项目和记录。

登录后使用
Sun KaisPersonal Research Institute · 私人研究机构

Mathematics · Computational Science · Engineering · Personal Knowledge Systems

更多
SUNKAIS · PERSONAL OS

搜索全站功能

选择 前往

LANG-04 · PROGRAMMING WORKBENCH

Rust

用所有权、Result 与强类型在编译期消除大量内存和并发错误。

从 Cargo 工程、所有权和枚举进入 Rust,用 fmt、Clippy、测试与文档把安全约束变成持续可执行的工作流。

MENTAL MODEL / 心智模型

先建立正确的程序直觉

每个值有唯一所有者,借用必须满足生命周期规则;可恢复失败用 Result,缺失值用 Option。

CODE REPOSITORY / 代码仓库锚点

从可测试的目录开始

rust-project/
├─ Cargo.toml
├─ Cargo.lock
├─ src/main.rs
├─ src/lib.rs
├─ src/model.rs
└─ tests/integration.rs

QUICK START / 第一条命令

先跑通最小闭环

cargo new memory_lab && cd memory_lab && cargo run

LEARNING ROUTE / 学习路径

从写出代码到守住生产边界

每个节点都包含可复制示例、判断原则与常见陷阱。

01常用方法所有权、枚举与迭代器02工程结构crate、模块与工作区03构建运行Cargo 工作回路04依赖管理Cargo 依赖与 feature05调试测试单元、集成与文档测试06错误诊断借用、生命周期与 trait 错误07安全边界unsafe、输入与供应链
01常用方法

所有权、枚举与迭代器

让类型表达状态和失败,在边界处转换数据而不是到处克隆。

借用切片代码示例
fn mean(values: &[f64]) -> Option<f64> {
    (!values.is_empty()).then(|| values.iter().sum::<f64>() / values.len() as f64)
}

&[T] 借用连续数据且不取得所有权;空输入由 Option 显式表达。

传播错误代码示例
fn load(path: &Path) -> Result<Config, Box<dyn Error>> {
    let text = fs::read_to_string(path)?;
    Ok(serde_json::from_str(&text)?)
}

? 会在错误时提前返回并转换兼容错误类型;库代码可使用更具体的错误枚举。

迭代数据流代码示例
let total: i64 = rows
    .iter()
    .filter(|row| row.active)
    .map(|row| row.amount)
    .sum();

迭代器是惰性的;终止操作 sum/collect 才消费数据流。

02工程结构

crate、模块与工作区

lib.rs 放可复用领域逻辑,main.rs 只负责组合输入输出与进程退出。

库与入口分离代码示例
// src/lib.rs
pub mod model;

// src/main.rs
fn main() -> anyhow::Result<()> {
    memory_lab::run()?;
    Ok(())
}

集成测试可以像外部用户一样导入 library crate。anyhow 适合应用层上下文,不是唯一方案。

工作区清单代码示例
[workspace]
resolver = "3"
members = ["crates/core", "crates/cli"]

多 crate 项目共享 Cargo.lock 与 target;依赖可在 workspace.dependencies 集中声明。

03构建运行

Cargo 工作回路

check 获取最快反馈,test 验证行为,clippy 检查惯用法,release 构建性能产物。

日常验证终端命令
cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features

CI 中把格式、lint 和测试分开显示,便于快速定位失败阶段。

运行与发布构建终端命令
cargo run -- --help
cargo build --release

-- 后的参数传给程序;release 产物通常位于 target/release。

快速类型检查终端命令
cargo check --all-targets

不生成最终机器码,编辑循环中通常比完整 build 更快。

04依赖管理

Cargo 依赖与 feature

依赖最小化、feature 显式化,应用提交 Cargo.lock,升级后完整测试。

添加依赖终端命令
cargo add serde --features derive
cargo add --dev pretty_assertions

cargo add 更新 Cargo.toml 和 lockfile;dev-dependencies 只用于测试/开发。

检查依赖树终端命令
cargo tree
cargo tree -d

-d 查找多版本依赖;不要仅为“版本统一”强行覆盖不兼容的主版本。

05调试测试

单元、集成与文档测试

测试公共契约、错误分支和边界,并让示例代码随 crate 一起验证。

结果测试代码示例
#[test]
fn rejects_empty_input() {
    assert_eq!(mean(&[]), None);
    assert_eq!(mean(&[2.0, 4.0, 6.0]), Some(4.0));
}

模块内单元测试可访问私有项;tests/ 中的集成测试只走公开 API。

定位单个测试终端命令
cargo test rejects_empty_input -- --exact --nocapture
RUST_BACKTRACE=1 cargo test

PowerShell 可先设置 $env:RUST_BACKTRACE="1";backtrace 需要调试信息。

调试二进制终端命令
rust-gdb target/debug/memory_lab
break memory_lab::main
run
bt

Windows/MSVC 工具链通常使用 Visual Studio 或兼容调试器。

06错误诊断

借用、生命周期与 trait 错误

先理解值被移动或借用的时间线,再调整数据流,避免立即 clone 掩盖设计问题。

use of moved value诊断清单
找到取得所有权的调用 → 判断应传 &T、&mut T 还是返回所有权 → 仅在语义确需副本时 clone。

移动不是拷贝失败,而是编译器阻止重复使用已转移的所有权。

cannot borrow as mutable诊断清单
缩短不可变借用作用域;先提取所需值;避免同一时刻持有指向同一数据的可变与不可变引用。

通过重新组织作用域解决,而不是滥用内部可变性。

trait bound not satisfied诊断清单
阅读 required by bound → 检查泛型参数与 feature → 用 cargo tree 确认是否存在不同版本的同名类型。

编译器的 help / note 往往给出缺失 trait 或派生建议。

07安全边界

unsafe、输入与供应链

安全 Rust 缩小内存风险,但输入验证、业务授权和依赖风险仍需显式治理。

解析不可信输入代码示例
let count: usize = raw
    .trim()
    .parse()
    .map_err(|_| AppError::InvalidCount)?;
if count > MAX_ITEMS { return Err(AppError::TooLarge); }

类型解析之后仍要验证业务上限,避免内存或计算量拒绝服务。

unsafe 审核边界诊断清单
把 unsafe 限制在小模块;逐条写明 Safety 前置条件;外部提供安全 API;用测试/Miri/平台工具覆盖边界。

unsafe 关闭的是部分编译器检查,不等于代码自动正确。

供应链清单诊断清单
审阅新增 crate、feature 与许可证;提交 Cargo.lock;定期更新并测试;可使用 cargo-audit 检查已知公告。

cargo-audit 需要单独安装,审计结果还需要结合可达性和运行环境判断。

PRIVATE CODE VAULT / 私人代码仓库

Rust 私人代码与伪代码仓库

把 Rust 的练习、工程片段、算法伪代码、验证说明与历史版本保存在登录后的私人空间。

TEXT ONLYRLS PRIVATENO EXECUTION
这里只归档,不运行代码。支持导入与下载纯文本源码;`.mlx`、`.xlsx`、`.accdb` 等二进制容器不会入库。密码、Token、私钥等秘密也会被拒绝,请改用环境变量。
PRIVATE SESSION REQUIRED

登录后打开你的私人仓库

游客只看到这个说明,不会收到、缓存或渲染任何私人源码。

安全登录

REFERENCE SOURCES / 官方与高质量资料

版本差异优先以官方文档为准

先在本站找回路径,再进入原始文档确认版本、平台和完整前置条件。

DELIVERY LOOP / 练习闭环

把每次练习变成可以重新运行的资产

  1. 01 · 定义写清输入、输出、边界与失败行为。
  2. 02 · 最小实现先让单一案例从命令行完整运行。
  3. 03 · 验证增加边界测试、调试信息与质量检查。
  4. 04 · 沉淀提交代码、README、依赖清单和复现命令。