用途
Rust Core Language 是一个面向稳定版 Rust 1.98.1、edition 2024 的技能,用于编写或审查地道的 Rust 代码。它聚焦于编译器不会替你捕获的问题:避免无谓克隆的所有权设计,以及机器生成 Rust 反复出现的失败模式。
主要能力
- Edition 2024 特性:在配置 crate、使用 let chains / async closures 时提供指导。
- 所有权与借用:设计函数签名与数据流,选择拥有还是借用参数、设计生命周期、使用 Rc/Arc 共享。
- LLM 陷阱修复:审查或修复生成 Rust 中的 clone tax(为消除借用检查器报错而克隆,而非重新设计所有权)、unwrap/expect 泛滥、String 与 &str 误用、用索引循环替代迭代器、以及编译器本可省略的过度生命周期标注。
使用方式
技能包含强制性的 Agent 工作流:
- 使用 fuse-ai-pilot:research-expert 确认当前稳定版本及任何特性的稳定化发布版本(版本变化快)。
- 使用 fuse-ai-pilot:explore-codebase 在添加代码前阅读 Cargo.toml 中的 edition 及现有所有权约定。
- 编写代码后运行 fuse-ai-pilot:sniper 和 cargo clippy。
- 切勿凭记忆陈述稳定化版本——需对照 doc.rust-lang.org/releases.html 核实。
关键规则:
- 先借用再拥有。参数使用 &T / &str / &[T],除非函数必须保留该值。
- .clone() 需要理由。为消除借用检查器错误而克隆是设计异味(clone tax)。先重新设计所有权;仅当确实存在第二个所有者时才克隆。
- 对可失败值不使用 .unwrap() / .expect(),除非有书面理由。合并前 grep 它们。优先使用 ?、match 或有文档说明的不变量。
- 引用计数句柄使用 Arc::clone(&x) 而非 x.clone()——它使廉价的指针复制显式化,并与深克隆区分。
- 迭代器优于索引循环。优先使用 iter()/map()/filter()/collect() 而非 for i in 0..len { v[i] }——无边界检查噪音,无差一错误。
- 让省略机制工作。不要标注编译器可推断的生命周期。
已验证事实(来源已核对)
- Edition 2024 在 Rust 1.85.0(2025-02-20)稳定,RFC #3501。
- Let chains(if let A = x && let B = y && cond)在 1.88.0(2025-06-26)稳定,仅限 edition 2024——依赖 if let 临时作用域变更。
- Async closures(async || { .. })在 1.85.0 稳定。
- Rust 1.97.0(2026-07-09):v0 符号修饰为默认;Cargo build.warnings(CI 中 CARGO_BUILD_WARNINGS=deny,不使构建缓存失效);链接器输出通过 linker_messages lint 显示(默认 warn);整数 highest_one/lowest_one/bit_width。
- Rust 1.98.0(2026-08-20):{integer}::format_into + core::fmt::NumBuffer(std 替代 itoa);f32/f64 algebraic_* 方法;str::strip_circumfix、str::substr_range、String::from_utf16le/from_utf16be。
- gen blocks 不稳定——feature gate #![feature(gen_blocks)],跟踪 issue rust-lang/rust#117078,RFC #3513。不要在 stable 上使用;返回的迭代器尚未 fused,语法可能仍会变化。
参考指南
概念:
- Edition 2024:edition-2024.md——在配置 edition、使用 let chains / async closures、检查特性稳定性时加载。
- 所有权与借用:ownership-borrowing.md——在选择拥有还是借用参数、设计生命周期、使用 Rc/Arc 共享时加载。
- LLM 陷阱:llm-pitfalls.md——在审查生成 Rust 的 clone tax、unwrap 泛滥、String/&str、索引循环时加载。
模板:
- idiomatic-code.md——在需要借用优先签名、迭代器链和 let chains 的复制粘贴示例时加载。
验证清单
- 若使用 edition-2024 特性,Cargo.toml 声明 edition = "2024"。
- 没有纯粹为满足借用检查器而添加的 .clone()。
- 每个 .unwrap()/.expect() 都有说明理由的注释或可证明不会失败。
- 参数使用引用,除非需要所有权。
- 没有编译器可省略的生命周期标注。
- cargo clippy 干净,sniper 通过。
适用场景与限制
适用于编写或审查地道 Rust、设计所有权与借用、修复机器生成 Rust 的常见问题。不涉及错误类型设计(thiserror vs anyhow,属于 rust-error-handling)、异步运行时问题(属于 rust-async-concurrency)、SOLID/文件布局规则(属于 fuse-solid:solid-rust)。gen blocks 在 stable 上不可用。