本周Bevy 0.19发布引入全新场景系统,OpenAI以60万美元成为Rust基金会白金会员,Rust PNG crate被Chromium和GNOME采用,LiteLLM迁移至Rust实现15倍吞吐提升,hyper发现竞争条件漏洞。工具链方面,proc_macro_hygiene稳定化、str_from_utf16_endian等多项特性落地。
🦀 Rust 工具链更新
🔧 编译器
🆕 新功能
开发者现在可以在模块级别使用 #[diagnostic::on_unknown] 属性,对模块中未识别的 lint 选项或配置自定义诊断信息,提升编译期用户体验。
⚡ 性能优化
将 trait 求解器 evaluate_goal_raw 中不常执行的路径提取到独立的 #[cold] 函数中,减少指令缓存压力,提升解析器热路径的编译速度。
🐛 Bug 修复
修复了按值传递的动态分发 vtable shim 丢失 #[track_caller] 注解的问题,确保通过 dyn trait 调用时 panic 仍能正确报告调用位置。
📚 标准库
🆕 新功能
新增 io::Read::read_le 和 io::Read::read_be 方法,开发者可以直接从实现了 Read 的流中读取小端或大端编码的整数,无需手动处理字节序转换。
⚡ const 环境扩展
TryFrom<Vec<T>> for [T; N] 和 BTreeMap 的 Default 实现现已支持 const 上下文,开发者可以在常量环境中进行数组类型转换和创建空 BTreeMap。
✅ 稳定化
str_from_utf16_endian(从 UTF-16 字节片创建字符串,支持大小端)、strip_circumfix(去除字符串首尾匹配的界定符)和 substr_range/subslice_range(在字符串/切片中定位子串范围)三组 API 已稳定化,可直接在 stable Rust 中使用。
📦 Cargo
🆕 新功能
Cargo lint 现在支持 build.warnings 配置,开发者可在 [lints] 表中统一管理构建警告级别。同时新增 unstable -Zmin-publish-age 标志,可限制 crate 发布到 crates.io 后的最短公开时间;Solaris 平台也获得了 fcntl 文件锁支持。
🔧 改进
cargo add 现在会列出依赖的过新版本并提供覆盖方法;cargo install 会像 rustc 一样运行 Cargo lint;resolver 在版本冲突时给出更清晰的解决提示;rustc -V 失败时的测试错误信息也有改进。
🐛 Bug 修复
修复了 --host-config 模式下将目标平台的配置错误应用到宿主构件的问题;跳过无 packed debuginfo 时的 dwp 提升测试,减少假阳性失败。
🧹 清理
移除了所有早于 0.61 的 windows-sys 依赖项,Cargo 依赖树更加精简干净。
🧹 Clippy
🆕 新增 Lint 规则
新增三个 lint:建议在可确定分块大小时用 as_chunks 替代 chunks_exact 以获得编译期长度保证;检测不必要的 unwrap_unchecked 调用;检测对 &mut [T; N] 切片在循环中的手动 fill 操作并建议用 fill 方法简化;同时将 ! 类型在 unnecessary_cast lint 中与 - 统一处理。
🐛 误报修复与稳定性
修复了多项误报和崩溃问题:extra_unused_type_parameters 不再建议自动修复;let_underscore_future 跳过有显式类型注解的绑定;std_instead_of_core 不再对 core::io 和 MSRV 相关项报假阳性;unnecessary_box_returns 当大小依赖泛型参数时不再触发;对包含未定大小类型参数的常量求值不再 ICE;大类型在 uninit 检查时不再 OOM。
⚡ 性能优化
对 or_fun_call、question_mark、manual_clamp、ranges、match_same_arms 等 lint 进行了 5 项性能优化,优先检查方法名等轻量信息再执行类型查询,以及在 lint 被允许时跳过 match_same_arms 的完整检查等工作,显著提升 Clippy 在大型项目上的执行速度。
🔌 Rust-Analyzer
🐛 Bug 修复
修复了四个崩溃问题:尾部表达式宏中的 #[cfg] 检查、静态常量在数组长度位置时的崩溃、对未知类型接收器补全 .await 导致的 panic、以及常量位置上超出范围的整数字面量 panic。MIR 求值也增强了对混合位和字节大小的支持。
⚡ 性能优化
GC(垃圾回收)过程不再多次访问同一节点,减少不必要的扫描开销,提升长时间使用后的编辑器响应速度。
🔧 改进
replace_match_with_if_let 辅助操作不再对 if-let 守卫强行加括号;implements_trait_unique_with_infcx 放宽限制,只禁止 Self 类型为错误类型;"merge imports"辅助操作迁移到编辑器接口。
🗑️ 移除
正式移除了 ted(类型引擎依赖)组件,Rust-Analyzer 内部架构进一步简化。
📋 跟踪 Issue
✅ 稳定化推进
#[my_macro] mod foo;(proc_macro_hygiene 的一部分)进入稳定化流程,宏定义模块路径语法即将可用;box_patterns 被标记为移除,推荐迁移到 Box::new 模式匹配。
🆕 新功能提案
IntoIterator 将为 Box<[T; N]> 实现,允许直接消费盒装数组进行迭代;string_from_utf8_lossy_owned 跟踪 issue 已开启,类似 String::from_utf8_lossy 但不返回借用直接返回拥有的 String。
🔧 语言改进
关联常量中的匿名生命周期将推断为 'static,减少冗余标注;ty 系统考虑在推断变量是否满足 Sized 时纳入子类型关系;new solver 中启用 eager param_env 规范化;新增 lint 提案检测当 N 为零时 panic 的迭代器函数;启动 t-project-structure/t-comprehensibility 工作组以改进编译器项目的可理解性。
🛠 Project/Tooling Updates
Bevy 0.19发布
Bevy 0.19引入了下一代场景系统,采用新的Bevy场景符号(BSN)格式,支持可组合、可感知依赖的场景,同时还带来了GPU优化渲染、接触阴影、文本输入支持、更丰富的字体处理以及官方应用设置框架。
kache 0.7.0:缓存真实世界C/C++代码树
kache 0.7.0推出了一个内容寻址的C/C++构建缓存,通过基准测试和建模每次缓存未命中背后的编译标志,已能在Firefox、LLVM和Substrate等大型真实代码库上实现缓存命中,同时加固了共享使用路径,引入信任边界验证、驱逐锁定和竞态安全的S3密钥缓存交换。
GuardianDB新功能:引入ODM对象文档映射层
GuardianDB新增了一个可选的ODM层,允许开发者定义强类型数据模型并在数据进入P2P复制流程前进行本地验证,提供了高层建模工具,同时不改变去中心化存储引擎。
Rust中安全使用SIMD,即使在内层
Ratatui 0.30.2发布------用Rust打造终端用户界面的库
Ratatui 0.30.2新增了一个Termina后端(来自Helix编辑器的跨平台VT操作库),并修复了0.30.1中块阴影导致部分Widget不再实现Send的回退问题,恢复了线程安全性。
从Julia到Rust:面向AI时代的科学计算可微张量栈
tenferro-rs是一个Rust原生的密集张量栈,填补了现有Rust库之间的空白,提供了自动微分、追踪变换以及显式CPU/CUDA后端,其动机是作者因类型不稳定和大规模张量网络代码库的编译时间问题而从Julia迁移。
hotpath-rs 0.18:分析异步与并发Rust程序------通道与锁竞争
hotpath-rs 0.18引入了一种代理包装模式,用于检测Future和Stream等异步与并发Rust类型,以观察通道吞吐量、锁竞争和队列积压,新增的"wrap"通道检测功能甚至被用于对分析器自身进行分析,直至其极限。
📖 Observations/Thoughts
我们在hyper HTTP库中发现了一个bug
Cloudflare在hyper HTTP库中发现了一个竞争条件,该bug会间歇性地截断来自Images绑定的大图片响应,返回部分数据且状态码为200但不记录任何错误日志------经过六周的排查,最终仅用四行代码便修复了问题。
与Alexey Milovidov和Austin Bonander聊ClickHouse
文章探讨了在ClickHouse 150万行C++代码库中逐步引入Rust的挑战,重点关注如何将Rust链接到C++服务器同时保持可复现的CMake构建和FIPS合规性,并讨论了最困难的障碍是来自Rust语言本身还是其生态系统。
优化#sqlx::test重建时间
文章深入分析了为什么#sqlx::test即使设置了SQLX_OFFLINE=1并优化了sqlx-macros仍会导致约8-10秒的增量重建时间,将根因追溯到sqlx的过程宏展开而非数据库连接开销。
用Rust重写整个世界?
本文反对将现有C/C++代码库进行天真的"停止世界"式重写或机械的自动翻译成Rust,认为这两种方式都不可行,并暗示了大内存不安全代码的渐进式迁移策略。
📚 Rust Walkthroughs
LiteLLM迁移到Rust------构建最快最轻的AI网关
LiteLLM正在从Python迁移到Rust,实现了15倍吞吐量、内存降低11倍(降至约32MB)以及每个请求低于1ms的开销,同时保持了完整的API兼容性和相同配置。
Rust中安全使用SIMD,即使在内层
通过构建HTTP/1.1服务器学习Rust异步编程与Tokio
本教程通过使用Tokio从零构建HTTP/1.1服务器来教授Rust异步编程,涵盖Future、协作式并发、原始TCP网络编程以及无需任何框架的手动请求解析。
在Bevy中逐步构建打砖块游戏
一个教程系列,演示如何在Bevy 0.18中使用ECS基础构建打砖块游戏(基于之前的Pong和贪吃蛇教程),强化Query、Resource、Timer和游戏状态等概念,同时加入粒子效果、生命值和游戏结束逻辑,全程仅使用彩色矩形,无需精灵图。
将30万行C++和Perl移植到Rust:双预言机媒体元数据引擎
一种编译不过的数据竞争
作者用Rust构建了一个名为ruxe的并行Redux库,利用Rust的类型系统让编译器拒绝编译任何多个reducer可能同时写入同一状态的reducer管道。
RustCurious第9课:Trait即接口
BAML:用Rust创建的新编程语言
版本控制的未来
借用的优雅:新手打造易读Bevy和Rust代码之旅
📦 Crate of the Week
本周推荐Crate:cargo-rdme
cargo-rdme是一个Cargo工具,能从crate的rustdoc文档自动生成README并保持同步,自动转换代码块(移除隐藏行、添加语言标签),并将内部链接解析为docs.rs链接。
📌 foundation
Rust基金会欢迎OpenAI成为白金会员
OpenAI以60万美元的赞助加入Rust基金会成为白金会员,资金将用于支持维护者工作、Rust项目目标、Rust创新实验室以及整个Rust生态系统的结构化维护者支持。
Rust Commercial Network启动,汇聚Rust商业用户
Rust基金会启动了Rust Commercial Network(RCN),这是一个面向行业专业人士和Rust项目成员的社区,旨在分享生产部署经验、创建参考架构,并建立从商业用户到Rust项目的反馈循环。
Mainmatter推出Rust实操培训
Mainmatter将在巴塞罗那的技能提升周举办Rust实操工作坊,参与者可通过Credly获得可公开验证的Rust基金会工作坊完成徽章。
📌 newsletters
The Embedded Rustacean 第74期
第74期涵盖ESP32-E22获得开源Linux驱动、OpenAI以白金会员身份加入Rust基金会、新的Rust静态分析工具Soteria(索提里亚)、OpenCV 5发布、Android 16运行在RISC-V上,以及各类嵌入式Rust教育资源。