MENTAL MODEL / 心智模型
先建立正确的程序直觉
每个值有唯一所有者,借用必须满足生命周期规则;可恢复失败用 Result,缺失值用 Option。
Mathematics · Computational Science · Engineering · Personal Knowledge Systems
切换会载入对应网站形态,并更换导航、首页结构、内容密度、页面网格与阅读路径;当前路径及其他查询参数会保留。
预览卡展示真实构图语言;切换后会同步改变布局密度、卡片几何、按钮、边框、HUD、背景纹样与动效节奏。
0% 会停止装饰动画并隐藏粒子;系统开启“减少动态效果”时始终优先静态显示。
0% 会移除上层面板遮罩,100% 为完全不透明;文字和控件始终保持清晰。
系统已启用减少透明效果:背景模糊会关闭,但仍采用你设置的面板不透明度。
LANG-04 · PROGRAMMING WORKBENCH
用所有权、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.rsQUICK START / 第一条命令
cargo new memory_lab && cd memory_lab && cargo runLEARNING ROUTE / 学习路径
每个节点都包含可复制示例、判断原则与常见陷阱。
让类型表达状态和失败,在边界处转换数据而不是到处克隆。
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 才消费数据流。
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 集中声明。
check 获取最快反馈,test 验证行为,clippy 检查惯用法,release 构建性能产物。
cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-featuresCI 中把格式、lint 和测试分开显示,便于快速定位失败阶段。
cargo run -- --help
cargo build --release-- 后的参数传给程序;release 产物通常位于 target/release。
cargo check --all-targets不生成最终机器码,编辑循环中通常比完整 build 更快。
依赖最小化、feature 显式化,应用提交 Cargo.lock,升级后完整测试。
cargo add serde --features derive
cargo add --dev pretty_assertionscargo add 更新 Cargo.toml 和 lockfile;dev-dependencies 只用于测试/开发。
cargo tree
cargo tree -d-d 查找多版本依赖;不要仅为“版本统一”强行覆盖不兼容的主版本。
测试公共契约、错误分支和边界,并让示例代码随 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 testPowerShell 可先设置 $env:RUST_BACKTRACE="1";backtrace 需要调试信息。
rust-gdb target/debug/memory_lab
break memory_lab::main
run
btWindows/MSVC 工具链通常使用 Visual Studio 或兼容调试器。
先理解值被移动或借用的时间线,再调整数据流,避免立即 clone 掩盖设计问题。
找到取得所有权的调用 → 判断应传 &T、&mut T 还是返回所有权 → 仅在语义确需副本时 clone。移动不是拷贝失败,而是编译器阻止重复使用已转移的所有权。
缩短不可变借用作用域;先提取所需值;避免同一时刻持有指向同一数据的可变与不可变引用。通过重新组织作用域解决,而不是滥用内部可变性。
阅读 required by bound → 检查泛型参数与 feature → 用 cargo tree 确认是否存在不同版本的同名类型。编译器的 help / note 往往给出缺失 trait 或派生建议。
安全 Rust 缩小内存风险,但输入验证、业务授权和依赖风险仍需显式治理。
let count: usize = raw
.trim()
.parse()
.map_err(|_| AppError::InvalidCount)?;
if count > MAX_ITEMS { return Err(AppError::TooLarge); }类型解析之后仍要验证业务上限,避免内存或计算量拒绝服务。
把 unsafe 限制在小模块;逐条写明 Safety 前置条件;外部提供安全 API;用测试/Miri/平台工具覆盖边界。unsafe 关闭的是部分编译器检查,不等于代码自动正确。
审阅新增 crate、feature 与许可证;提交 Cargo.lock;定期更新并测试;可使用 cargo-audit 检查已知公告。cargo-audit 需要单独安装,审计结果还需要结合可达性和运行环境判断。
尝试更短的关键词,或者清空分类后重新搜索。
PRIVATE CODE VAULT / 私人代码仓库
把 Rust 的练习、工程片段、算法伪代码、验证说明与历史版本保存在登录后的私人空间。
游客只看到这个说明,不会收到、缓存或渲染任何私人源码。
REFERENCE SOURCES / 官方与高质量资料
先在本站找回路径,再进入原始文档确认版本、平台和完整前置条件。
DELIVERY LOOP / 练习闭环