rustup 1.29.3 补丁版发布,systemd 开始接受 Rust 代码,Google 发布 Rust Style Guide | 近期 Rust 全球要闻(2026年11月4日)
发表于:2026-11-04
Rust 新闻
摘要
rustup 1.29.3 发布,修复 x86_64 与 Solaris 平台两个问题;systemd 开始接受 Rust 代码,采取"不移植 C、不用 Cargo"的克制路线;Google 首次公开 Rust Style Guide,Chromium 禁用 async/.await;变异泛型微调查收到超 3300 份提交;Rust 基金会将招聘技术服务总监;tar-codec 解析速度翻倍,Redox 异步 I/O 快 14-15 倍……
一、Rust 语言与技术动态
1. rustup 1.29.3 补丁版发布
11 月 3 日,rustup 团队发布 1.29.3 补丁版,修复两处问题:不支持 SSE4.1 的 x86_64 CPU 上的 "Illegal instruction" 错误(PR #5162),以及 Solaris 上的 "lock() not supported" 错误(PR #5167)。可通过 rustup self update 或 rustup update 更新,失败时可手动下载 rustup-init 替换二进制。新版本初期可能被反恶意软件扫描器拦截,通常几周内自动解决。
参考:https://blog.rust-lang.org/2026/11/03/Rustup-1.29.3
2. tar-codec:Rust 生态中快速安全的 tar 解析器
uv 自 0.13 版本起改用 tar-codec 解析源码分发包,速度约为原 astral-tokio-tar 的两倍,同时降低解析器差异带来的安全风险。文章详解 tar 格式的 V7、UStar/pax、GNU 三个变体及其状态机差异,指出"混合状态机"是主要差异来源。tar-codec 的安全设计包括:分类锁定单一格式族、严格分层架构(framing → codec → archive-trait),以及基于 cap-std 的提取实现。未来将扩展稀疏文件支持并改进 ZIP 解析。
参考:https://astral.sh/blog/tar-codec
3. Redox 环形缓冲区完成:异步 I/O 快14-15倍,IPC 延迟减半
Redox 团队获 NLnet 资助,为系统任务开发 io_uring 式环形缓冲区,已于2026年9月完成:实现 redox-rings 库及类 liburing 的 redox-ring API,支持应用与 scheme 间零拷贝异步 I/O,已用于 RamFS、NVMed 等。基准测试显示,环形缓冲区异步 I/O 接口比同步系统调用快14-15倍;团队还同步开发了驱动异步执行器。内核 IPC 优化将往返延迟从约5800周期降至约2700周期,包括直接上下文切换与大页支持。
参考:https://www.redox-os.org/news/nlnet-rb-summary
二、Rust 产业与生态动态
1. systemd 开始接受 Rust 代码:不移植 C、不用 Cargo
Linux 用户态基础设施 systemd 宣布支持使用 Rust 开发,但路线相当克制:
- Rust 仅用于末端组件和工具程序,核心库暂不支持,且明确不计划将现有 C 代码移植到 Rust;
- 所有 Rust 代码通过 Meson 构建,不使用 Cargo,仅强制要求 C 语言链接,避免双构建体系与生态膨胀;
- 新代码可用 Rust、旧代码继续跑 C,边界清晰、渐进引入,避免大规模重写带来的回归风险。
作为 PID 1,systemd 的这一决策对"关键基础设施引入 Rust"具有标志性参考意义。
参考:https://www.phoronix.com/news/systemd-Merges-Rust-Programs
2. Google 首次公开 Rust Style Guide:超大规模组织的工程取舍
Google 于 10 月公开其 Rust Style Guide,超越缩进与命名层面,将代码组织、所有权设计、API 演进、错误处理和宏使用纳入统一工程规范。部分建议相当反直觉:
- 优先拆分小 crate,建立清晰的依赖边界;
- 尽量避免 Rc 和 Arc,不为组织代码而随意引入 trait;
- 公共枚举优先考虑 #[non_exhaustive];
- 在 Chromium 中明确禁止使用 async/.await。
指南发布后在 Hacker News 引发关于小 crate 过度拆分、#[non_exhaustive] 削弱编译器检查等话题的争论。其背后的核心问题值得思考:当软件主要成本从编写转向维护时,超大规模组织如何重新定义"好代码"。
参考:https://tonybai.com/2026/10/28/google-rust-style-guide-large-scale-engineering
3. 变异泛型微调查结果公布:超 3300 份提交,态度"谨慎但感兴趣"
Rust 团队近期公布变异泛型(variadic generics)微调查结果,共收到超 3300 份提交。调查要点:
- 多数用户认为该特性可简化元组 trait 实现、替代繁琐宏,Bevy 社区参与度较高;
- 受访者普遍对现有宏变通方案不满,但也有部分人担忧语言特性过度累积;
- 总体态度为"谨慎但感兴趣",未来提案需注重语法易读性,并相对宏方案体现出明显优势。
参考:https://blog.rust-lang.org/inside-rust/2026/10/27/variadic-generics-micro-survey-results
4. 如何资助 Rust 贡献者:官方提出三种方式
Rust 大量日常工作由志愿者无偿承担,导致维护者倦怠与功能延迟。官方文章提出三种资助路径:
- 捐赠 Rust 基金会维护者基金或赞助 RustNL 团队,支持日常维护;
- 赞助需要资金的 Rust 项目目标,推动特定功能落地;
- 通过 GitHub Sponsors 直接资助个人贡献者。
企业还可加入 Rust 商业网络、让员工带薪向 upstream 贡献,或直接聘用 Rust 贡献者。
参考:https://blog.rust-lang.org/2026/10/26/how-to-fund-rust-contributors
5. 维护者聚焦:Anthony Bolden(@Walnut356)加入编译器团队
Anthony 是自学成才的程序员,曾在威斯康星州酒店上夜班期间学习编程,因不满 C++ 开发体验转向 Rust。CodeLLDB 移除内置 Rust 支持后,他投身调试器改进:2024 年起为 Windows 分发 debuginfo 可视化器、修复 MSVC 相关问题;今年通过 Google Summer of Code 改进编译器 debuginfo 测试,随后受邀加入编译器团队。他目前继续完善 Vec、宽指针、HashMap 等可视化器,希望全职改善 Rust 调试体验。给新手的建议:不必过早拘泥最佳实践,多实验、多与编译器"争论"。
参考:https://blog.rust-lang.org/inside-rust/2026/11/02/maintainer-spotlight-anthony-bolden-walnut356
6. Rust 基金会人员结构调整:将设技术服务总监,外联与营销团队合并
Rust 基金会宣布结构性调整以适应不断增长的工作量:
- 新设技术服务总监职位,负责内部工程团队及生态战略投资;过渡期间由项目总监、编译器团队联合负责人、Arm 首席工程师 David Wood 担任临时技术总监;
- 外联团队与传播营销团队合并为对外关系团队,统一负责活动、营销、传播、外联和内容,由对外关系总监 Lori Lorusso 领导。
基金会称本次调整恰逢其时,后续将公布更多更新。
参考:https://rustfoundation.org/media/update-on-rust-foundation-staffing
三、深度技术文章
1. 稳定版 Rust 的基石:rustc 自身使用 83 个 nightly 特性
文章揭示 rustc 编译器自身通过 RUSTC_BOOTSTRAP 构建时使用了 83 个 nightly 特性,重点介绍两个:
- deref_patterns(21 个 crate 使用):可透过 Box、String、Vec 等智能指针直接模式匹配,取代已移除的 box_patterns,仅限实现 DerefPure 的类型;
- default_field_values(13 个 crate 使用):允许在结构体定义中写默认值,配合 .. 语法只填必填字段,required 字段仍强制提供。
作者认为,这些特性在稳定化之前已在大型代码库中得到充分检验。
参考:https://kivooeo.github.io/blog/what-stable-rust-stands-on
2. Linux 内核 Rust 代码中的 panic 指南讨论:共识与分歧并存
Kangrejos 2026 大会上,Alexandre Courbot 提出内核 Rust 代码何时允许 panic 的问题,并给出错误处理"理想阶梯":不可失败代码 > 编译期检查 > 运行时 Result > panic。与会者达成的基本共识:
- 编译期处理优于运行时处理,可达的 panic 应视为 bug;
- 但具体界限分歧明显:Ojeda 认为应由各维护者决定,驱动代码应比核心代码更谨慎;Guo 则主张自包含组件可以 panic。
争论焦点包括 udelay 钳制输入、binder 死亡列表断言、按 Kconfig 条件 panic 等具体案例。会后编码指南暂未更新。
参考:https://lwn.net/SubscriberLink/1100873/0934a9a322c6df4c
3. CRDT 与 Rust:分布式系统与端到端加密应用的共同基础
CRDT(无冲突复制数据类型)让分布式参与者无需中心权威即可达成一致,支持实时同步、离线协作和本地优先(local-first)应用,Proton Docs、Figma、Zed 等已采用。Rust 因"一次编写、处处运行"成为 CRDT 库首选语言:可编译为 WASM,并通过 UniFFI 生成各平台原生绑定,避免多语言实现不一致。主要库包括:
- Yrs:Yjs 的 Rust 移植;
- Automerge:学术背景严谨;
- Diamond Types:专注文本协作。
作者认为 CRDT 将推动无需中心服务器的下一代端到端加密应用。
参考:https://kerkour.com/rust-crdt-love
4. 用调用图分析器发现 panic:Open Device Partnership 发布 CGA
Open Device Partnership 与微软合作发布 Call Graph Analyzer(CGA),从 Rust 单态化 MIR 中提取调用图,追踪编译后二进制中哪些函数可能 panic。文章观点:追求零 panic 并不现实,但让 panic 路径显式化、可回归分析很有价值;在体积敏感的嵌入式、绝不可失败的关键路径及 panic 处理代码中,消除 panic 尤其合理。
技术要点:CGA 基于 rustc-driver 工作,从 main、_start、extern 函数等根节点做可达性分析,支持白名单/黑名单,能检测标准库和依赖中的 panic。局限包括:优化前 MIR 带来误报、编译耗时增加 2-3 倍、依赖特定 rustc 版本、MIR 不稳定导致工具脆弱。建议以 opt-level=2 运行以减少误报。
参考:https://tweedegolf.nl/en/blog/242/finding-panics-with-call-graph-analyzer
5. Rust 中的单位处理:用 newtype 模式安全转换温度
文章以天气客户端为例,探讨如何在 Rust 中正确处理带单位的量。最简方案是添加 --fahrenheit 标志并直接调用 into_fahrenheit(),但存在问题:单位属于温度而非天气本身,且无法判断 Weather 实例当前是摄氏还是华氏,重复转换会出错。更好的做法是用 newtype 模式定义 Temperature(f64),内部统一存储摄氏度,提供 from_celsius、as_celsius、as_fahrenheit 方法,让类型系统承载单位信息,从源头避免单位混淆。文章还提醒绝对温度与温差转换规则不同,并强调抽象应适可而止。
参考:https://bitfieldconsulting.com/posts/heat-is-on
本期小结
本期 Rust 生态多点开花:rustup 1.29.3 快速修复平台回归,tar-codec 与 Redox 环形缓冲区在解析性能、异步 I/O 上表现亮眼;systemd 克制接入、Google 公开工程规范,显示 Rust 在关键基础设施与超大型代码库中日趋成熟;资助贡献者倡议、维护者加入编译器团队及基金会调整,正补齐生态"人"与"钱"的短板;rustc 依赖83个 nightly 特性、内核 panic 指南、CRDT 与 CGA 等深度话题,则体现社区在工程细节上的持续深耕。
