Rust 2026 经验谈 - Rust 2026 展望
四十篇文章,从 Edition 2024 到嵌入式 Rust,我们走过了 Rust 工程化实践的每一个重要领域。作为收官之作,本文不再向后看,而是向前看——Rust 2026 及以后,语言特性会怎么演进?生态会朝什么方向?Rust 在行业中的渗透率会达到什么水平?Rust 治理如何应对规模化挑战?
Rust 1.96.0 已稳定特性(2026-05-28)
Rust 1.96.0 带来了多项重要特性的稳定化,以下特性已从 nightly/预览状态转为稳定可用:
assert_matches! / debug_assert_matches!
模式匹配断言宏正式稳定。相比 assert!(matches!(..)),提供更好的错误信息(打印实际值和模式)。不在 prelude 中,需 use core::assert_matches;。详见 009 篇。
新 core::range::Range* 类型(RFC 3550)
新的 core::range::Range、RangeFrom、RangeInclusive 等类型实现了 Copy + IntoIterator(而非 Iterator),消除了旧 range 类型非 Copy 的痛点。未来 edition 中 0..1 语法将产生新类型,旧类型移至 core::range::legacy::*。详见 001 篇。
From<T> for AssertUnwindSafe<T> / LazyCell<T, F> / LazyLock<T, F>
From<T> for AssertUnwindSafe<T>:使catch_unwind的闭包包装更自然,泛型代码中无需手动AssertUnwindSafe(|| ...)。详见 011 篇。From<T> for LazyCell<T, F>/From<T> for LazyLock<T, F>:允许从已计算值直接构造惰性容器,避免重复初始化闭包。
WebAssembly 目标链接器行为变更
Rust 1.96.0 改变了 WebAssembly 目标的链接器行为:不再默认传递 --allow-undefined 给链接器。这意味着:
- 之前:未定义的符号会自动转为 WASM import,静默通过链接
- 现在:未定义符号是链接错误,必须显式声明为 import
// 之前:未声明的 extern 函数静默成为 WASM importunsafe extern "C" { fn external_fn() -> i32; } // 可能不是你想要的
// 现在:需要显式声明或使用 wasm-bindgen 管理导入// Edition 2024 要求 extern blocks 标记为 unsafe extern影响:这个变更提高了 WASM 链接的正确性——之前未定义符号静默转为 import 可能掩盖拼写错误或遗漏的链接依赖。如果你使用 wasm-bindgen,通常不受影响(它会正确管理导入)。但如果你手动管理 WASM 导入或使用 wasm-pack,可能需要调整构建配置。
1.80 -> 1.96 期间已经落地的关键能力
async closures(Rust 1.85.0 已稳定)
异步闭包曾经是异步生态里最别扭的缺口之一。Rust 1.85.0 已经稳定了 async closures 以及 AsyncFn / AsyncFnMut / AsyncFnOnce trait,因此教程中不能再把它写成未来特性:
async fn with_async_callback(cb: impl AsyncFn(i32) -> i32) { let result = cb(42).await; println!("{result}");}
let closure = async |x: i32| -> i32 { some_async_work(x).await + 1};为什么重要:异步闭包是构建高阶异步组合子的基础。过去许多 API 需要手写 Future 类型或 Box<dyn Future>,现在可以逐步收敛到更自然的闭包写法。
let chains(Rust 1.88.0 已稳定)
let chains 允许在 if / while 条件中把布尔表达式和 let 模式链起来:
if request.is_authenticated() && let Some(user) = request.user() && user.is_active(){ serve(user).await;}这类代码过去通常要写成嵌套 if let 或提前 match,现在 stable 上可以直接表达“所有条件同时成立并绑定变量”。
即将稳定或仍在推进的语言特性
return-type notation(RTN)
RTN 允许在 trait bound 中引用函数的返回类型——这对 async trait 至关重要:
// 现在(Edition 2024 稳定):async fn in trait 直接可用trait Service { async fn process(&self, req: Request) -> Response;}
// 但高阶约束仍需要 RTN——指定返回的 Future 的类型fn compose<S1, S2>(s1: S1, s2: S2)where S1: Service, S2: Service, <S1 as Service>::process(..): Future<Output = Response>, // RTN 语法{ // ...}为什么重要:RTN 是 async trait 的补全。async fn in trait 已经在 Edition 2024 中稳定,但高阶约束(如”两个 service 的 process 返回同一类型”)需要 RTN。
当前状态:RTN 在 nightly 上实验性可用,是 2026 年的重点稳定目标,但尚未稳定。
effects system
Effects system 是 Rust 类型系统的下一阶段演进——它统一了 const、async、panic 等效果标记:
// 现在:const fn 是特殊语法const fn fibonacci(n: u64) -> u64 { if n <= 1 { return n; } fibonacci(n - 1) + fibonacci(n - 2)}
// 未来:effects 统一后fn fibonacci<const constness: IsConst>(n: u64) -> u64 where Self: constness{ if n <= 1 { return n; } fibonacci(n - 1) + fibonacci(n - 2)}
// 这意味着:// - const fn 自动推导// - async fn 是效果而非关键字// - panic handling 可以在类型层面约束// - 未来可以添加更多效果(如 IO、non-terminating)为什么重要:Effects system 是 Rust 类型系统的长期方向——它让”这个函数是否可能 panic”、“是否可能在编译时执行”成为类型约束而非 ad-hoc 语法。这将极大增强 API 的表达力。
当前状态:Effects system 是长期项目(keywords generics / keyword generics),2026 年可能看到 MVP 的 nightly 实现,稳定尚远。
gen blocks
Generator blocks(gen 块)是 Rust 的协程语法——它允许用迭代器风格写生成器:
// 现在:手动实现 Iteratorstruct FibIter { a: u64, b: u64,}
impl Iterator for FibIter { type Item = u64; fn next(&mut self) -> Option<u64> { let result = self.a; self.a = self.b; self.b = result + self.b; Some(result) }}
// Rust 2026:gen blocksfn fibonacci() -> impl Iterator<Item = u64> { gen { let mut a = 0u64; let mut b = 1u64; loop { yield a; let next = a + b; a = b; b = next; } }}
// async gen:异步生成器fn async_lines(stream: TcpStream) -> impl AsyncIterator<Item = String> { async gen { let reader = BufReader::new(stream); let mut line = String::new(); loop { line.clear(); match reader.read_line(&mut line).await { Ok(0) => break, Ok(_) => yield line.clone(), Err(_) => break, } } }}为什么重要:gen blocks 消除了实现 Iterator 和 Stream 的手动状态机样板。它是 Rust 异步生态的”最后一英里”——有了 async gen,Stream 的创建将和 Iterator 一样简单。
当前状态:gen blocks 在 nightly 实验性可用(#![feature(gen_blocks)]),截至 Rust 1.96 仍为 nightly,稳定时间未定。
trait aliases
Trait aliases 允许给一组 trait bound 起名字:
// 现在:重复的复杂 boundfn process<T: Clone + Send + Sync + 'static>(item: T) { }fn store<T: Clone + Send + Sync + 'static>(item: T) { }fn validate<T: Clone + Send + Sync + 'static>(item: T) { }
// Rust 2026:trait aliasestrait Sharable = Clone + Send + Sync + 'static;
fn process<T: Sharable>(item: T) { }fn store<T: Sharable>(item: T) { }fn validate<T: Sharable>(item: T) { }
// 更实际的例子trait Runnable = FnMut() -> bool + Send + 'static;trait Streamable = futures::Stream + Send + Unpin + 'static;为什么重要:在 Rust 生产代码中,复杂 trait bounds 是常态——5-10 个约束组合的 where 子句随处可见。Trait aliases 让这些声明可复用、可读。
当前状态:trait aliases 在 nightly 上长期可用(#![feature(trait_alias)]),截至 Rust 1.96 仍为 nightly,稳定进度慢是因为需要解决与类型推断的交互问题。
特性稳定时间线预估
| 特性 | Nightly 可用 | 稳定版本 | 影响 |
|---|---|---|---|
assert_matches! / debug_assert_matches! | 2022 | 1.96.0 ✅ | 中——更好的模式匹配断言 |
新 core::range::Range* 类型 | 2023 | 1.96.0 ✅ | 中——Copy range 消除 clone |
From<T> for AssertUnwindSafe / LazyCell / LazyLock | 2024 | 1.96.0 ✅ | 低——API 易用性提升 |
| async closures | 2024 | 1.85.0 ✅ | 高——消除 async 样板 |
| return-type notation | 2024 | 2026 H2(预计) | 高——补全 async trait |
| gen blocks | 2024 | 未定(仍为 nightly) | 中——简化生成器 |
| trait aliases | 2019 | 未定(仍为 nightly) | 中——简化 trait bound |
| effects system | 2025 | 2027+ | 极高——类型系统革命 |
| let chains | 2023 | 1.88.0 ✅ | 中——简化条件逻辑 |
| arbitrary self types | 2023 | 2026(预计) | 低——智能指针方法 |
crates.io 趋势
下载量增长
crates.io 的下载量在 2024-2026 年间持续加速:
2023 年:约 300 亿次总下载2024 年:约 450 亿次总下载(+50%)2025 年:约 650 亿次总下载(+44%)2026 年:预计 900+ 亿次总下载(+38%)
日均下载: 2023:~8000 万/天 2024:~1.2 亿/天 2025:~1.8 亿/天 2026:~2.5 亿/天(预估)增长动力来自三方面:Rust 在企业后端的渗透、WebAssembly 生态的扩展、嵌入式/IoT 的新增场景。
热门新 crate(2024-2026)
框架层: - axum 0.8+ → 生态最完善的 Rust web 框架 - loco → 类 Rails 的全栈框架(基于 axum + SeaORM) - salvo → 另一个快速成长的 web 框架
异步运行时: - tokio 1.x → 绝对主导地位 - embassy → 嵌入式异步运行时,增速最快
数据库: - sqlx 0.8 → 编译时 SQL 检查 - sea-orm 1.x → 异步 ORM - redb → 纯 Rust KV 数据库
可观测性: - tracing 0.1 → 事实标准 - opentelemetry-rust 0.27+ → 三信号稳定
构建工具: - cargo-lambda → AWS Lambda 开发 - miette → 诊断报告(替代 anyhow 的显示层) - cargo-modules → 可视化 crate 结构
AI/ML: - candle → HuggingFace 的 Rust ML 框架 - burn → Rust 深度学习框架 - tract → ONNX/TensorFlow 推理crate 质量趋势
正面趋势: 1. 文档覆盖率提升——docs.rs 的 crate 文档越来越完善 2. MSRV 策略普及——更多 crate 声明最低支持 Rust 版本 3. CI 标准化——cargo-hack、cargo-ci-clean 实现多版本测试 4. 1.0 发布增加——生态走向稳定
需要关注: 1. 依赖传递膨胀——web 框架间接依赖上百个 crate 2. 安全审计覆盖——只有约 30% 的热门 crate 经过 cargo-audit 3. crate 废弃管理——大量 0.x crate 长期不更新Rust 在行业中的落地案例
Android
Google 从 2019 年开始在 Android 中引入 Rust,2024-2026 年进展:
- Android 14:~200 万行 Rust 代码- Android 15:~500 万行 Rust 代码- Android 16(2025):~800 万行 Rust 代码- 新的 HAL 实现:优先用 Rust- Binder IPC:Rust 绑定- 关键成果:Rust 代码的内存安全漏洞率 = 0(相比 C/C++ 的显著降低)- 策略:新原生代码优先 Rust,不重写已有 C++ 代码Linux 内核
Rust 在 Linux 内核中的地位从”实验”走向”生产”:
- 6.1(2022):初始 Rust 支持,仅一个模块- 6.8(2024):更多驱动可用 Rust 编写- 6.12(2024):ARM64 Rust 支持- 6.14+(2025):网络设备驱动的 Rust 绑定- 实际驱动:Google 的 nova-drivers(GPU)、Apple M1 驱动探索- 争议:Rust-for-Linux 社区与内核社区的磨合仍在继续 - 关键分歧点:unsafe 包裹、抽象层风格、构建系统Windows
Microsoft 在 Windows 中推进 Rust:
- Windows 内核:开始用 Rust 重写部分驱动- WinRT/Windows API:官方 Rust 绑定(windows crate)- Azure:多个服务用 Rust 重写(如 DNS 服务)- 安全驱动:新安全敏感组件优先用 Rust- DevBox:开发环境工具链中包含 RustCloudflare Workers
Cloudflare Workers 是 Rust 在边缘计算中最成功的落地:
- Workers 运行时基于 V8(Rust 编译为 Wasm)- 100+ 个生产服务用 Rust 编写- 关键优势:冷启动 < 5ms、内存安全、Wasm 沙箱- 代表项目: - Cloudflare DNS resolver(1.1.1.1) - Cloudflare Firewall Rules - Cloudflare WARP 客户端(部分 Rust)Discord
Discord 是最早大规模使用 Rust 的科技公司之一:
- 2019:用 Rust 重写 Go 的读状态服务(15x 延迟降低)- 2020-2024:扩展到更多核心服务 - Presence 服务 - Typing indicators - Permission 计算- 经验教训: - Rust 的性能优势在 GC 压力大的场景最显著 - 开发效率比 Go 低 20-30%,但运维成本大幅降低 - 团队从"抗拒"到"拥护"的转变约需 6 个月Dropbox
Dropbox 的 Rust 实践聚焦于文件同步引擎:
- Nucleus:Dropbox 桌面客户端的文件同步引擎(C++ → Rust 重写)- 重写动机: - C++ 的内存安全漏洞难以根除 - 并发模型太复杂(手写锁 + 回调地狱) - Rust 的所有权模型天然适合同步引擎- 结果: - 崩溃率降低 50%+ - 同步冲突减少 30%+ - 开发迭代速度持平(重写后)更多案例速览
| 公司/项目 | 用途 | Rust 规模 |
|---|---|---|
| Amazon | Firecracker(微 VM)、AWS Lambda Runtime | 核心服务 |
| Mononoke(Mercurial 服务器)、Source Control | 数百万行 | |
| GitHub | Hoverfly(代码搜索)、Semantic | 基础设施 |
| 1Password | 核心密码管理引擎 | 跨平台核心 |
| Figma | 实时协作服务器(C++ → Rust) | 性能关键路径 |
| Deno | JS/TS 运行时 | 整个项目 |
| Linkerd | 服务网格代理 | 核心代理 |
| Tikv | 分布式 KV 存储 | 整个项目 |
| Meilisearch | 搜索引擎 | 整个项目 |
Rust 基金会与治理
Rust 基金会发展
2021:Rust 基金会成立(白金会员:AWS、Google、Microsoft、华为、Mozilla)2022:首批项目资助(CraneLift、rust-analyzer、bindgen)2023:Security Initiative 启动(安全审计 + 漏洞响应)2024: - 基金会成员扩展到 50+ 家公司 - RustConf 规模 800+ 人 - 首届 Rust Nation(伦敦)2025: - 基金会年度预算超 200 万美元 - 全职技术项目管理员 - crate 审计基金2026: - 基金会从"资助者"转向"方向引导者" - 安全合规认证推进 - 与 ISO/CENELEC 标准对接(安全关键领域准入)治理挑战与改革
挑战 1:编译器团队 vs 语言设计团队 - 编译器实现是瓶颈——很多特性 nightly 可用但无法稳定 - 改革:增加编译器团队人力,建立"稳定化冲刺"机制
挑战 2:RFC 流程的效率 - RFC 周期:从提议到稳定平均 2-3 年 - 改革:minor features 走"FCP(Final Comment Period)快通道"
挑战 3:Libs 团队的碎片化 - std 库特性添加太保守(如 stabilized io_error_other 花了 3 年) - 改革:API 工作组定期评审高频需求
挑战 4:社区分裂风险 - "保守派" vs "激进派":关于语言复杂度的根本分歧 - 改革:通过 Edition 机制给双方空间
挑战 5:供应链安全 - crates.io 的恶意 crate 风险(2024 年有数起 typosquatting 事件) - 改革:crate 审核、依赖锁定、安全审计自动化贡献者生态
Rust 编译器贡献者:~400 活跃(每月 1+ PR)Rust 标准库贡献者:~150 活跃crates.io 发布者:~15 万(累计)crates.io 活跃维护者:~3 万(最近 6 个月有更新)
贡献者增长趋势: 2023:约 2000 新贡献者 2024:约 2800 新贡献者 2025:约 3500 新贡献者(预估)Rust 的未来方向思考
1. 复杂度管理
Rust 正站在一个十字路口:语言特性越来越多,学习曲线越来越陡。async closures、effects system、gen blocks——每一个都有价值,但加在一起意味着新人更难上手。
我的观点: 1. 特性多不是问题,特性之间的交互才是问题 2. Edition 机制是好工具——可以在新 Edition 中简化旧写法 3. "渐进式复杂度"是关键:80% 的代码只用 20% 的特性 4. 工具链需要跟上:rust-analyzer 的类型提示、clippy 的复杂度 lint 5. 教育资源需要分层:"Rust 入门" 与 "Rust 高级类型系统" 应该是两本书2. 编译时间
编译时间仍然是 Rust 最大的工程痛点:
2024 年进展: - recompilation 优化:incr-comp 稳步改进 - parallel frontend:逐步启用(-Zthreads=N) - mold/lld 链接器:链接时间降低 50%+
2026 年预期: - parallel frontend 默认启用 - recompilation 进一步优化(尤其是 macro 展开) - 但根本性的编译时间问题不会解决——Rust 的类型系统复杂度决定了编译是 O(n²)+
长期方向: - 增量编译到函数粒度 - 远程编译缓存(sccache、distant) - 更快的 trait 求解器3. 互操作性的下一步
当前:Rust ↔ C 互操作成熟(FFI + bindgen/cbindgen)进行中: - Rust ↔ C++ 互操作(cxx、autocxx)——2026 年大幅改善 - Rust ↔ Swift 互操作(Swift 5.9+ 原生支持) - Rust ↔ Kotlin 互操作(JVM FFI) - Rust ↔ Python(PyO3 0.22+,性能和易用性大幅提升)
未来: - 组件模型(Component Model)统一 Wasm 互操作 - 跨语言共享类型定义(wit 文件) - Rust 成为"系统编程的通用粘合层"4. Rust 在安全关键领域的道路
当前状态: - Rust 未被任何安全认证标准(DO-178C、ISO 26262)认可 - Ferrocene(Rust 的认证分支)正在推进 ISO 26262 认证 - Ada/SPARK 仍然是航空航天的主流
2026 年预期: - Ferrocene 获得 ASIL-D(汽车)认证 - 航空领域开始试点 Rust(辅助工具,非飞控) - 医疗器械领域:Rust 用于非植入式设备的固件
长期: - Rust 成为安全关键领域的第二选择(仅次于 Ada/SPARK) - 认证成本是最大障碍——Rust 编译器的认证需要数百万美元5. AI 时代的 Rust
Rust 在 AI/ML 中的角色: 1. 推理引擎——candle、tract、burn 提供纯 Rust 推理 2. 数据管线——Rust 的高吞吐在数据预处理中有优势 3. 模型服务——Moirai、candle-pyo3 提供 Rust + Python 混合方案 4. AI 基础设施——tensor 存储、分布式调度
为什么 Rust 不太可能取代 Python 做模型训练: - 训练生态在 Python 上太成熟 - GPU kernel 用 CUDA/ROCm(C++),上层 API 用 Python - Rust 会在推理和基础设施层找到定位
2026 年的 AI/Rust 格局: - 推理:Rust 在边缘推理(Wasm + 小模型)中有独特优势 - Agent 框架:Rust 的并发模型适合高并发 Agent 服务 - MLOps 工具:用 Rust 重写性能关键的数据管线6. 我的 2026 预言
保守预测(90% 置信度): 1. async closures 稳定 ✅(已在 1.85.0 稳定) 2. Rust 年下载量超 900 亿 3. Android 中 Rust 代码超 1000 万行 4. Linux 内核至少 10 个 Rust 驱动 5. crates.io 总 crate 数超 20 万
中等预测(60% 置信度): 6. gen blocks 稳定 7. trait aliases 稳定 8. 至少一家大型银行用 Rust 做核心交易系统 9. Rust Conf 参会人数超 1000 10. Ferrocene 通过 ISO 26262 ASIL-D
大胆预测(30% 置信度): 11. effects system 出现在 nightly 12. Rust 成为 AWS Lambda 的第一语言(超越 Node.js) 13. Rust 编译时间减少 50%(相比 2024 基线) 14. Rust 被纳入大学计算机必修课(至少一所)系列结语
四十篇文章,我们走过了 Rust 工程化实践的完整版图:
- 基础篇(001-005):Edition 2024、工具链、项目工程、CI/CD
- 所有权篇(006-013):所有权经验、生命周期、类型状态、trait 高级、枚举模式匹配、错误处理三层
- 异步篇(014-019):async/await 内幕、Tokio、Stream、FFI、踩坑、生态
- 并发篇(020-023):Send/Sync、无锁、Channel、共享状态
- 元编程篇(024-027):声明宏、过程宏、宏选型、const generics
- Unsafe 篇(028-032):Unsafe 哲学、裸指针、FFI 双向、审查清单
- 应用篇(033-040):序列化、网络编程、数据库、可观测性、测试、性能、嵌入式、展望
Rust 的旅程才刚刚开始。语言在进化,生态在成熟,社区在壮大。2026 年的 Rust 比 2020 年的 Rust 更强大、更易用、更广泛——但最核心的东西从未改变:零成本抽象、内存安全、所有权模型。
这就是 Rust 的力量——不是”更快”,而是”更对”。不是”更酷”,而是”更可靠”。
愿你在 Rust 的道路上,编译通过,测试全绿,生产无忧。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
TinyZ's Blog