Rust周刊2026W36 | rustup 1.29.1 更名 target tuple、Box map 稳定化…

举报
右耳朵猫AI 发表于 2026/09/08 11:06:50 2026/09/08
【摘要】 rustup 1.29.1 弃用 target triple;编译内存降至 4GiB、智能指针 map 稳定化;修复标准库 UB 与 FFI 传参;Wasmi 2.0发布,Rustdoc 快 33%。

rustup 1.29.1 弃用 target triple;编译内存降至 4GiB、智能指针 map 稳定化;修复标准库 UB 与 FFI 传参;Wasmi 2.0发布,Rustdoc 快 33%。

🦀 Rust 工具链更新

🔧 编译器

🆕 新功能

safestack 现在可以通过 #[sanitize(safestack = “…”)] 属性逐函数开关,开发者无需为整个 crate 统一开启就能只对敏感代码启用安全栈保护。

⚡ 性能优化

本周 compiler 有三处编译期提速:名义 obligations 改为直接 push 而非层层返回、降低了标量尺寸检查的性能开销、并移除了宏派生过程中一次多余的 clone。大型项目的类型检查与宏展开耗时会有小幅改善。

📚 标准库

🆕 新功能

Box、Rc、Arc 的 (try_)map 系列方法开始支持自定义 allocator,嵌入式与高性能场景可以在保持自定义分配策略的同时做类型转换;core 还暴露了 volatile 原子操作、新增整数 min/max 的 intrinsics,并实现了 [u8]::split_ascii_whitespace 与 clamp_to,手工实现容器或用裸指针写底层代码的开发者可直接使用标准库原语。

⚡ 性能优化

aarch64 平台上的 Vec::retain_mut 新增 SVE 加速实现,String::retain 也做了专门优化,过滤保留元素这类高频操作在 ARM 服务器和移动端的吞吐会明显提升。

📦 Cargo

✅ 稳定化

cargo-lints 与 min-publish-age 两项能力正式稳定,前者让 workspace 集中配置 lint 等级,后者可自动避免拉到刚发布不久的 crate 以规避供应链风险。同时实现了 feature-metadata(RFC 3416),feature 可以在 manifest 中携带描述信息,cargo add? 等工具未来能展示每个 feature 的用途。

⚡ 性能优化

使用 git-cli 抓取依赖时的重复工作被削减,未显式配置 build.sbom 时也不再生成 SBOM,依赖解析与构建阶段在无谓开销上都有节省。

🔧 改进

cargo run 结束后会补打一个换行,避免子进程输出以 \r 结尾时把退出码信息覆盖掉;trim-paths 支持按 workspace 相对路径重映射 member 路径,可复现构建的路径处理更可控;Cargo 自身的 profiling 能力也得到增强。

🧹 Clippy

🐛 Bug修复

cargo_common_metadata 不再检查 package.readme,redundant_clone 改为真正分析循环体而不是直接放弃,–explain 的 lint 查找不再因大小写不匹配失败,never type impls 的误报也已修复,这几项都会减少误报与漏报对日常开发的干扰。

🧹 Lint规则

lint_groups_priority 的错误消息补上了缺失的逗号,missing_transmute_annotations 的建议中不再包含函数名,两处提示文本现在都能被直接复制使用。

⚡ 性能优化

too_many_lines 在规则未启用时会提前退出,不含 clone 的函数会跳过 redundant clone 分析,Clippy 在大型 crate 上的扫描耗时随之下降。

🔌 Rust-Analyzer

🆕 新功能

“Extract variable” 重构现在可以直接在 record expression 的字段名上触发,hover 会打印非默认 ABI 的函数指针签名,块级文档注释渲染时也会去掉前导星号装饰,代码重构与阅读体验都更顺手。

🐛 Bug修复

本周集中修复了一批影响日常使用的缺陷:trait 关联函数参数的 HIR lowering、hover 显示错误泛型、union 中访问数字字段的 panic、解引用未解析别名的 panic、宏内做 extract variable 的 panic、hover 带 binder 的 dyn trait 的 panic,以及括号内 range pattern 被误判为 tuple pattern 等。同时修正了 const 的泛型参数作用域、&raw * 的 unsafeck 与 never type 在数组重复表达式中的重新推断。

🔧 改进

NamedTempFile 从依赖 temp-dir crate 切换为自研实现,并修复了相关缺陷,临时文件处理在跨平台上更稳定;文档渲染中的若干细节 bug 也一并修正。

✅ 已批准 RFC

📌 平台支持调整

i686-pc-windows-msvc 目标从 Tier 1 with host tools 调整为 Tier 1 without host tools,该目标仍是一级支持、测试与构建保障不变,只是不再随发行版附带编译器等 host tools,仍需要 32 位 Windows 工具链的开发者要留意获取方式的变化。

📝 新增·更新 RFC

📝 RFC 勘误

RFC 4004 发布勘误,不再鼓励使用局部递归的 accessible(…) 写法,涉及可见性规则设计讨论的开发者需要按新表述调整理解。

📄 rustdoc

🐛 Bug修复

修复了 --generate-macro-expansion 模式下宏展开生成多个 item 时的处理错误,并修正了 cargo::non_kebab_case_bins lint 的行为,生成文档时对宏定义较多的 crate 不再产出错乱的展开页。

🔧 改进

关键字高亮现在会考虑 edition 信息,同一个标识符在不同 edition 下是否为关键字不再被一刀切,跨 edition 阅读文档时的着色更准确。

🎨 rustfmt

🔧 改进

运行 diff check 时允许指定 release channel,CI 中比对 stable / nightly 格式化差异的场景不再需要切换工具链即可完成。

📋 跟踪 issue

🆕 稳定化推进

never type 的稳定化已进入 T-types 的 FCP 阶段,core::mem::DropGuard 也在推进稳定,两者落地后开发者将能在公开 API 中直接使用 ! 类型与作用域守卫。

📚 标准库 API

正在讨论将 core::fmt::NumBuffer 重导出到 alloc 和 std,以及为 RawWakerVTable 保证 8 字节对齐,自定义格式化实现与手写 Waker 的代码未来可以少写样板。

🔧 工具链与治理

Cargo feature 描述与 rustdoc 的 LaTeX 数学公式支持均在推进中;项目管理方面则有临时资助团队章程延期至 2026-09,以及依据 2025 年反馈更新 PD 选举流程的议题。

🦀 Official

rustup 1.29.1 发布?

一个补丁版本刚刚重命名了 Rust 里最常用的术语之一:rustup 1.29.1 在整个项目中用“target tuple”取代了“target triple”,于是多年来积累的文档、CI 配置和肌肉记忆一夜之间都变成了废弃术语。在这背后还藏着几处更安静的坑:被取消的 rustup-init 安装会留下残留文件、i686 工具链会静默安装到 64 位 Windows 上(现在需要 --force-non-host)、rustup-init.sh 在 Windows 上则直接失败。该版本还改进了并发能力,让 rustup doc 可以通过本地 HTTP 提供文档以适配容器化环境,并新增了对 aarch64-pc-windows-gnullvm 宿主平台的官方支持——同时提醒用户反恶意软件扫描器可能会拦截 rust-docs 的安装。

2026 年新一届项目董事选举?

Rust 基金会的董事会中有五个席位属于 Rust 项目,但构成这个项目的开发者并不能直接投票选出他们——领导力委员会会在逐团队征集提名之后再行选举。今年五个席位中只有两个开放,交错的两年任期把另外三个推迟到 2027 年,因此未来几周获得提名的人将决定项目未来数年的代表权。读者可以从中了解流程的两个阶段、9 月 21 日的提名截止时间,以及这一职位的职责要求。

2026 年 7–8 月项目管理进展?

Rust 的目标提醒机器人在几个月里一直往一个大多数目标负责人从未订阅的频道发消息——对关注它的人来说是噪音,对被它催促的人来说却完全不可见。这一点很重要,因为目标计划正是 Rust 分配资金和跟踪跨团队工作的方式:本周期新开了七个目标(二进制体积缩减、异步状态机优化、build-std),完成了 Cargo 的 lint 稳定化,终止了另外两个(包括实验性的语言规范),并把若干目标调整为部分或全额资助。这篇更新逐一梳理了每个目标的状态、rust-lang/goals 的更名、新上线的 goals.rust-lang.org 站点、每个目标的提醒频率,以及为带标签提案自动创建 Zulip 话题。

🛠 Project/Tooling Updates

Wasmi 2.0:打造最快的 Wasm 解释器?

历时八个月重写 Wasmi 引擎,使其比 1.0 快了约 2.2 倍——该数据是在 Apple M2 Pro 上以 wasmi-benchmarks 套件的几何平均值测得的。这一点很关键,因为在 IoT 设备、Soroban 和 Ripple 这样的智能合约宿主,以及 Typst 和 Zellij 这类插件系统上运行 WebAssembly 的是解释器而非 JIT,可移植性和启动开销让分层编译无从谈起。读者可以看到它与其他可移植解释器在三种硬件配置下的完整基准对比,以及新增的二进制体积开关、稳定的燃料计量、确定性 profile 支持和重新设计的 CLI。

我如何在一周内让 Rustdoc 快了 33%?

一个函数体只有 #![recursion_limit = “8”] 的单行 crate 让 Rustdoc 以栈帧错误崩溃——追查这个并非真正缺陷的问题,反而让 Rustdoc 在一周内快了 33%。严格来说这不算回归,因为栈帧数量并不属于 Rust 的稳定性保证,但调查为什么 Rustdoc 在 core::fmt 里烧掉大量栈帧、而 rustc 编译同样的代码却没问题,暴露出了真正被浪费的工作。读者将看到逐步剖析并修复每一处瓶颈的过程,最终在 hyper、bitmaps 等 crate 上把实际耗时最多削减 40%,在微基准上削减 60%。

自研的 Rust 与 C# 异步互操作 FFI 框架?

ScyllaDB 把它的 C++ 和 Node.js 驱动重写为同一个 Rust 驱动的轻量绑定,随后在 C# 上撞了墙:Rust 到 C# 的互操作几乎没有任何现成方案,仅有的两个选项都是 bindgen。bindgen 解决的是跨边界调用的问题,而不是 tokio 与 .NET 异步运行时如何通过 C ABI 协同这个更难的课题——而这正是包装一个异步 Rust 驱动的前提。读者将看到该团队自研的异步 FFI 框架的全过程讲解。

📖 Observations/Thoughts

Cargo 的调度器能做得更好吗??

摘要已生成(约 101 词),并已把该实例判例追加到记忆文件。

我们如何打造全球首个用 Rust 编写的安全认证产品——以及为什么选择裸机?

全球首个用 Rust 编写并通过安全认证的嵌入式系统,出自一个此前没有任何 Rust 产品交付经验的团队;而在他们启动时,Rust 缺少认证编译器这一点还是减分项。Sonair 的 ADAR One 是一款安全等级的 3D 超声波传感器,当有物体进入其防护区时会让机器人停下,因此那里的内存错误是物理危险而非单纯的 bug;团队在 Ferrocene 拿到认证之前就押注了它,并放弃了大部分 crate 生态以满足认证和计算平台的要求。文章回顾了这场豪赌、促使他们转向 Rust 的 C/C++ 痛点,以及让他们最终仍取得两年先发优势的裸机决策。

优化 1.1.1.1 的 DNS 缓存,我们如何省下 100 TB 内存?

Rust 并发 vs Go 并发:无栈协程 vs 有栈协程?

用 Rust const fn 做编译期计算的九条规则:解析文件、构建查找表、提前发现错误……无需构建脚本(第一部分)?

在你的 Rust 程序运行之前,图像就已被解码、音频已被压缩、机械臂程序也已组装完毕,且运行时开销为零、堆分配为零,因为 const fn 让编译器完成这些工作,然后把输入字节和所有中间值全部丢弃。这一点在内存稀缺、甚至可能没有文件系统的嵌入式 no_std 目标上最为重要,也引出了一个现实问题:const fn 该推到什么程度才会不再划算。读者将获得从两个真实 crate 中总结出的九条规则,首先是让 include_bytes!() 把文件直接喂给常量求值,以及第二部分与 C++、Zig 和其他 Rust 方案对比的预告。

用 Rust 实现的智能体虚拟机 —— Cristian Sánchez?

AsyncIterator 取得进展 —— Jack O’Connor?

📚 Rust Walkthroughs

Rust 版 rnull 块设备驱动?

用 Rust 重新实现 Linux 那个什么都不做的 null_blk 驱动,结果大部分工作是在搭建驱动所需的抽象层——Andreas Hindborg 的补丁集中大部分内容都是在补齐编写一个块设备驱动所必需的 Rust 内核 API。null_blk 存在的唯一目的就是以最快速度完成请求来对块设备层做基准测试,这让它成为与 C 原版做同类对比的理想对象。文章逐步讲解了模块初始化、pin_init_scope() 与 configfs 的固定引用,以及达到功能对等后所揭示的 Rust 在内核中的成熟度。

你的第一个 GPUI 应用:用 Rust 构建桌面 UI?

Zed 编辑器所基于的 UI 框架没有标记语言、没有 CSS、也没有 DSL——整个界面都是用普通 Rust 代码描述的。GPUI 以 Rust 的安全性带来原生桌面性能,但它年轻且快速演进的 API 意味着文档稀少、破坏性变更频繁,让新手只能靠猜。文章从一个空白的 cargo 项目开始构建一个类 Linear 的问题追踪器,依次讲解依赖配置、类 flexbox 的布局组合与样式,最终把侧边栏、页头、标签页和问题卡片组装成一个精致的静态界面。

欢迎来到机器世界:模拟一颗 CPU?

调试一台飞向比邻星的探测器本来就够难了——Trailblazer 1 团队还弄丢了飞行软件的源代码和文档,它们是在云盘空间不足时被删除的,而所有人都以为另一个部门还留着副本。RTFM 通信计算机的存储器可能已被宇宙射线打坏,在没有源码、没有文档、又碰不到硬件的情况下,看清它的软件究竟在做什么的唯一办法就是把这颗 CPU 本身建模出来。你将从取指—译码—执行循环开始,构建一个逐条执行航天器机器码指令的模拟器。

证明我的 Rust NVR 不漏内存(结果它漏了)?

作者本想证明自己的 Rust NVR 不漏内存,结果却发现了无界增长——macOS 的 leaks 和 Clang LeakSanitizer 都看不见这种增长,因为数据仍然可达,只有在无人值守运行数周之后才会造成真正的内存压力。Electron 的 PartitionAlloc 垫片把每一次 Rust 分配都路由到与前端共享的同一个分区中,抹掉了分配的来源信息,而 Chromium 的堆剖析器是为一次性排查设计的,并不适合常驻的现场指标采集。文章介绍了如何为发布前的浸泡测试构建可绘图的内存指标,以及如何定位并修复这个泄漏。

绝不能出错的软件:为儿童用药剂量计算器做属性测试?

计算出 4.025 mL 这样的剂量是没有意义的——照护者的注射器只有半毫升刻度,因此 favi-child 这个把 200 mg 法匹拉韦片剂配成儿童混悬液的 Rust 计算器会返回 4.0 mL,并容忍 1 mg 的偏差。精确算术与真实注射器能抽取的量之间的这道鸿沟,正是这段代码属于安全关键的原因:一个家庭会依据它的输出给孩子用药,因此每个方案都必须是可量取的、能装进容器的,并且让偏差最小。读者将看到作者为什么遍历每一组可行的药片/加水组合而不是套用公式、total_cmp 如何为 f64 结果排序,以及属性测试如何证明这些不变量。

用 GPUI 的 Canvas 绘制图形?

一个本应贴合面板圆角顶边的进度条却总是把圆角盖住——无论怎么调整圆角样式或挪动这个动画 div 都无济于事,最终的解决办法是把它画到 GPUI 的 canvas 上,也就是这个框架自己用来渲染 UI 的同一个底层图元。当一个元素必须继承另一个元素的几何形状时,组件的样式系统就失效了,而 GPUI 除了自己绘制之外没有留下任何逃生出口。文章逐步讲解了 canvas() 的 prepaint/paint 这对方法,以及用 PathBuilder 的 move_to、line_to、close() 绘制线条、矩形和其他基础图形。

彻底搞懂 Rust 的 Pin?

把值装进 Box 并不会固定它:移动这个 Box 时堆上的值确实原地不动,但没有任何机制阻止你用 *boxed 直接把它再移出来,从而悄悄破坏地址保证。异步 future 是对地址敏感的——它们持有指向自身字段的指针,因此首次 poll 之后的一次移动就会让这些自引用悬空;然而一个永远不能移动的值毫无用处,它甚至连从函数里返回都做不到,所以这层保证必须只在使其变得敏感的那一步之后才生效。读者将看到从零重建的简化版 Pin、为什么 Pin<Box<dyn Future>> 到处出现,以及你能拿它做什么、不能做什么。

📦 Crate of the Week

本周 crate:buf_read_splitter?

本周推荐的 crate 是 buf_read_splitter,它可以把一个流拆分(分离)成多个子流。

📌 foundation

Rust 标准库验证竞赛如何突破手工证明工程的规模瓶颈?

要证明 Rust 标准库中不存在未定义行为——大约 34000 个函数、每六周发布一个新版本——从来不是任何单一团队或工具能够负担的工作,然而一场众包竞赛已经从四所机构的 21 位外部贡献者那里收到了 450 多个 PR。基础代码的形式化验证通常被锁在某家公司的研究小组内部,而一个每六周就变动一次的标准库会跑赢任何固定的证明工作。读者将看到这场竞赛在 RustConf 2026 之前的进展报告:带有明确目标、清晰成功标准和金钱奖励的离散挑战如何让这项工作规模化,以及 Kani、ESBMC、VeriFast 和 Flux 这四款验证工具是如何接入持续集成的。

欢迎 Rust 项目经理 Tomáš Šedovič 加入 Rust 基金会团队!?

Rust 领导力委员会现在全职付薪聘请一个人,其工作内容包括做会议记录、确保没有任何事项被遗漏。Tomáš Šedovič 此前作为承包商在 Libs、Lang、Cargo、Types、FLS 和领导力委员会的会议上做的正是这些事,如今 Rust 基金会把他转为正式员工,经费来自项目优先事项预算。Rust 的治理依赖数十个志愿者团队,协调债因此悄然累积:行动项停滞、决策无人记录,而 Rust for Linux 和 CPython 这样的跨语言协作则失去了联络人。读者将看到设立这一职位的理由、Tomáš 覆盖项目目标团队与跨生态联络工作的职责范围,以及 CEO Rebecca Rumbul 对正式雇员化所释放信号的解读。

欢迎 Jess Izen 出任 Rust 基金会驻场工程师?

在接下来的一年里,Rust 基金会获得了一位全职工程师,却不必动用那些用于支付维护者薪酬的资金:Jess Izen(@jlizen)以驻场工程师的身份加入,同时保留 AWS 雇员身份。Rust 共享基础设施和社区库的需求已超出志愿者的维护能力,而 Jess 来自 AWS 的 Rust 语言团队——负责运维 Amazon 内部的 crates.io 镜像、维护 axum、tower-http 和 dial9,此前还在 AWS WAF 团队构建过 anti-DDoS 与机器人流量管控服务。读者将了解她的背景,以及她将与基金会安全工程师共同设计的 crates.io 改进方案。

📌 newsletters

《嵌入式 Rustacean》第 79 期?

📌 research

Rust 中的函数式状态机:Typestate 与 Newtype 模式?


往期精选

  • Rust周刊2026W35 | never type 稳定化、next solver 登 nightly、arrayref 供应链投毒、min-publish-age 转正
  • Rust周刊2026W34 | tokio_with_wasm 入驻浏览器、Cargo 默认 -Zembed-metadata=no、extern “custom” 稳定化、OxiSH 内存安全 SSH
  • Rust周刊2026W33 | RFC 3323 征集测试、polonius 上线 nightly、Bevy 六周年、fearless_simd v0.7、Box::take 稳定化
  • Java周刊2026W35 | JDK 28 值类、Spring Boot 4.1.1、Spring AI 2.0.1、Quarkus 3.39.1、GraalVM 25.3.4.1
  • 2026年8月编程语言排行榜|MATLAB 首次跌出前20
  • Node.js周刊2026W35 | Node.js 26.8.0发布、pnpm 12 Rust重写、Bun 1.4发布、Solid 2.0 RC、SvelteKit 3 RC

阅读原文


扫码关注「右耳朵猫AI」

扫码关注「右耳朵猫AI」

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。