Rust周刊2026W31 | SeaORM 2.0转正、Syn 3发布、gccrs内核编译

22 阅读15分钟

本周 Rust 生态迎来多项里程碑:SeaORM 2.0 历经 43 个 RC 转正稳定;Syn 3.0 发布,撬动整个宏驱动生态;gccrs 直接编译 Linux 内核。工具链侧,C 变参函数定义与 Wasm 过程宏支持相继稳定,128 位整数 asm! 向量寄存器传参也已稳定。

🦀 Rust 工具链更新

🔧 编译器

✅ 稳定化

C 变参函数定义(c-variadic function definitions)稳定化,开发者现在可以在 stable Rust 中直接定义并调用 C 风格变参函数,无需再依赖 nightly。

🆕 新功能

闭包默认继承外围函数的 #[optimize] 优化级别,优化属性可以沿函数边界自动传递到闭包,减少手动标注的负担。

⚡ 性能优化

RemoveNoopLandingPads 后置到 monomorphization 之后执行,并优化 escape_string_symbol(),减少无操作异常处理路径、加快调试信息中字符串的转义生成。

🐛 Bug 修复

修复 aarch64 等平台的 bool 调用约定,以及 proc_macro 中 cfg_attr 内部属性在 file modules 里的处理问题。

🔧 改进

resolve 阶段为并行化 import resolution loop 做了更多准备工作,为未来大幅缩短大型 crate 的编译时间铺路。

📦 Cargo

🆕 新功能

支持从配置文件中设置 -Zembed-metadata,cargo add 的 zsh 补全新增 -p/--package 参数,并新增 haiku 平台的 dylib 路径支持。

🔧 改进

git fetch 无进度时静默输出、git-cli 失败时提示改用 libgit2,toml 对连字符命名及重复的 lint 名称发出警告;build-dir layout v2 在 nightly 默认启用;未使用依赖的传递遍历限定范围,减少诊断开销。

🧹 Clippy

🧹 Lint 规则

新增 assert_is_empty、nonnull_unchecked_on_box_ptr 两个 lint,approx_constant 扩展 EULER_GAMMA 与 GOLDEN_RATIO 常量检测;branches_sharing_code 扩展到共享尾部的 match 分支,min_ident_chars 也覆盖符合 trait 命名的短标识符。

🐛 Bug 修复

修复一批误报:外部宏表达式触发 clippy::exit、内部 doc 注释的 four_forward_slashes、仅取静态引用而未读写的 multiple_unsafe_ops_per_block 等。

⚡ 性能优化

unnecessary_mut_passed 避免每次调用重复做类型与路径计算,doc 注释中的 tab 分组查找不再分配内存,lint 运行更快。

🔧 改进

duration_suboptimal_units 建议中显示完整方法名,对复合赋值语句应用 safety comment,EndianBytes lint pass 被重写,lint 提示更易用。

🔌 Rust-Analyzer

🆕 新功能

新增 struct 模式未覆盖所有字段的诊断,为未实现 trait 的诊断记录并展示完整 obligation 链,并支持宏内的 inactive-code 诊断。

🐛 Bug 修复

修复 merge_imports 非法路径、宏定义结构体未知字段、.zip(None) 调用、过期 lock 文件等一批导致 panic 或行为异常的问题。

⚡ 性能优化

并行 analysis-stats 推断在 worker 线程挂载 db,scoped lazy priming 实现惰性初始化,大型项目上的分析响应更流畅。

🔧 改进

resolve_path 支持在全部命名空间解析、references lens 尊重 exclude 配置、preferNoStd 时优先 alloc 路径、analysis-stats 进度条 Unicode 安全等。

⚡ 性能 triage

⚡ 性能优化

rustdoc 仅内联本地原语 impl、按需构建 extern trait impl、只合成为被记录项的 auto/blanket impl;调试构建提前移除无操作的 panic 处理并优化 escape_string_symbol(),编译与文档生成均受益。

📝 新增·更新 RFC

📝 新 RFC

新增 Wasm 目标 externref lang item 的 RFC,为 Wasm 上的 externref 引用类型提供语言级内置支持,将影响未来 Wasm 相关库与工具链开发。

rustdoc

🆕 新功能

关联项链接增加路径展示,doc_cfg 功能会为派生 impl 检索 cfg_attr 信息,文档导航与条件标注更准确。

⚡ 性能优化

仅在实际需要时构建 extern trait impl、仅内联本地原语的 impl,显著减少文档生成阶段的工作量与产物体积。

rustfmt

🐛 Bug 修复

对带有 #[my_macro] 注解的外部 mod,允许文件未找到错误,不再因为无法解析外部模块而误报格式化失败。

🆕 新功能

支持通过 cfg_select! 发现并格式化模块,改善条件编译场景下的模块组织与格式化体验。

📚 标准库

🆕 新功能

vec![...] 宏现在可以在 const 上下文中使用,新增 str::copy_from_str 方法并为引用实现 Rng;同时为 minicore 定义 Simd 类型、实现 CovariantUnsafeCell,为底层库提供支撑。

⚡ 性能优化

step_by 特化扩展到整数 RangeIter,word_to_titlecase 增加 ASCII 快速路径,整数迭代与标题格式转换的常见场景性能明显提升。

🔧 改进

TryFromIntError 的错误信息更清晰,WASI 平台的 thread_local! 切换到新实现,std::io::buffered 移至 alloc::io 便于 no_std 环境使用。

📋 跟踪 issue

🆕 新特性提议

新增多个 lint 提议:重复 repr 属性、raw_borrows_via_references、invalid_markdown_table rustdoc lint;新稳定化目标包括 128 位整数通过 vector 寄存器传给 asm!、c_variadic_naked_functions、bool::toggle、const_btree_len。

🔧 改进

repr(Rust) 枚举在含 uninhabited 变体时省略 tag 的优化、内联解析 ty/const 变量到根变量、Wasm proc macro 支持、目标修饰符分组到 -T、Cargo 新增内建 debug profile 与 hints.min-opt-level、2024 版支持覆盖继承的 default-features。

🛠 Project/Tooling Updates

afrim 0.7.0:一个通用输入法框架

用 cargo-reapi 跨 Cargo worktree 共享 Rust 构建工作

五个并行编码 agent 构建同一个 Rust workspace,意味着从零编译了五次 Bevy。Cargo 的 target 目录是可变状态——跨 worktree 共享会导致锁竞争,而隔离的 worktree 则会静默重复相同的编译工作;Bazel 或 Buck2 等构建系统会强制引入第二个构建图以与 Cargo 保持一致。cargo-reapi 利用 RUSTC_WRAPPER 观察 Cargo 调度的编译器命令,从共享缓存恢复已验证的输出,无需替换 Cargo 的构建图即可消除冗余构建。

exiftool-rs 0.7.0:本地化 ExifTool 的 PrintConv 值,而不仅仅是标签

本地化像 WhiteBalance 的“Auto”这样的元数据值非常依赖上下文,简单的翻译映射反而会适得其反——exiftool-rs 0.7.0 在 195 个语料文件中的 192 个上与 ExifTool 自身的 -lang 输出逐字节匹配。同一个标签名存在于多个具有不同 PrintConv 类型的表中,因此 ExifTool 在 Canon 的 ExifIFD 下本地化“Auto”,但在 Nikon 下保留英文,而扁平化的 (tag, value) 键无法区分它们。本次发布剖析了一个两层设计——宽覆盖表加上源自 195 个文件语料的组作用域覆盖——以及 XMP 往返如何保证 CLI、JSON 和 GUI 输出保持一致。

宣布 SeaORM 2.0

SeaORM 2.0 历经 43 个发布候选版本后转正稳定——这是项目历史上规模最大的一次发布。1.0 的显式实体格式被证明过于冗长,手动在实体之间建立关系依然繁琐;2.0 用带类型的关联字段(has_one、has_many、belongs_to)重塑实体,将外键基数直接编码进类型系统。公告详解了新的紧凑实体格式、保持 1.0 API 可用的渐进式迁移路径,以及生产反馈如何塑造了每个发布候选版本。

kobe 0.37.0:更易部署与安装

kobe 能在几秒内为你租出一个配置完备的 Kubernetes 集群——但部署它本身就是使用它最困难的部分。一个 operator 的可用性取决于它是否易于部署:Helm chart 一直是手工封装和版本化的,演示依赖笨拙的 umbrella chart,而 Windows 和 Arch 用户则面临手动安装。0.37.0 让 chart 成为一等发布产物,并拓宽了安装矩阵——cargo binstall、Homebrew/Scoop/Chocolatey/AUR,或直接从 OCI chart 执行 helm install。

kache 0.12.0:可插拔远程后端、更智能的 GC、更清晰的诊断

用 gccrs 编译 Linux 的进展

GCC 的 Rust 前端 gccrs 在 2026 年上半年编译了 Linux 内核本身——这场压力测试暴露了简单独立程序永远不会揭示的属性处理、名称解析和资源管理方面的 bug。内核的 Rust 集成目前将开发者锁定在 LLVM 的 rustc 上,但 LLVM 不支持的架构以及 GCC 的插件生态要求基于 GCC 的工具链,而 gccrs 目前只能处理基本程序,Linux 发行版只能干等。报告讲述了内核 crate 暴露的 bug、项目重构后的路线图,以及为什么可用的 Rust 的 GCC 后端已成为发行版的优先事项。

flodl 0.7.0:一个仪表盘视图,在每个层级重复

构建 flodl 0.7.0 的递归仪表盘时,抓出了项目自身五个测量错误指标的数字。0.6.0 版构建了训练集群,但用单一视图回答三个不同的问题——一个 rank 的损失、一台主机的吞吐量以及整个 cohort 的汇总全部挤进同一个 epoch 数据流。文章讲述了自包含仪表盘如何在根、主机和 rank 层级以恒定开销查询递归,以及一次将数 GB 瞬态数据从同步屏障中移除的内存优化。

samkhya 1.2.1——连接基数上限变得可证明

BrewFS:一个类似 JuiceFS 的 Rust 分布式文件系统

一个开源的 Rust 文件系统在 24 个匹配基准测试中的 15 个上击败了 JuiceFS,大文件写入吞吐量提升 90%,热缓存读取达 2.4 GiB/s。应用需要 POSIX 语义,如原子重命名和字节范围 I/O,而基础设施团队想要事务性元数据加上廉价的 S3 容量——这种张力是大多数对象存储文件系统难以调和的。BrewFS 通过 FUSE、可插拔元数据后端(Redis、TiKV、etcd、PostgreSQL、SQLite)以及内存/SSD 缓存兼顾两者,并由 708 个 xfstests 和完整的 pjdfstest 语料背书,而诚实的基准表格清楚展示了 JuiceFS 仍然胜出的地方。

📖 Observations/Thoughts

改进 std::simd::swizzle_dyn

Rust 的 std::simd::swizzle_dyn——标准库的动态 SIMD 洗牌——只要硬件无法表达任意掩码,就会静默退化为逐字节移动,即使是原生洗牌也要为兑现其越界置零承诺而付出额外开销。这意味着 512 位向量上简单的 RGBA 布局交换无法始终使用全宽指令,把真实性能白白浪费掉。文章剖析了有缺陷的泛型实现,并重构了能干净映射到硬件的任意洗牌,覆盖 128–512 位宽度。

查询循环:编译器谋杀悬案

一次神秘的 CI 超时——一个 Rust UI 测试仅仅“运行了很长时间”——让一位 Ferrocene 工程师耗费一周调试,甚至弄崩了他的机器,直到发现是三个互不相关的 bug 合谋制造了一个毫无用处的错误。Ferrocene 的生存之道在于合并上游 Rust 编译器变更,因此区分上游回归与基础设施故障意味着要追查断裂的 SSH 管道、被拒绝的连接,以及 Kubernetes devpod 上静默挂起的编译器。这篇文章完整还原了这场谋杀悬案般的诊断过程,展示每一层如何被层层剥开,直到三个 bug 浮出水面。

GDPatch:一个多功能的 Godot 模组加载器

大多数 Godot 模组加载器都锁定在单个游戏上,而新的 GDPatch 声称能在任何 Godot 4.x 游戏上运行。其作者在 WEBFISHING 上构建了前代产品 GDWeave,因为生态中唯一通用加载器虚弱的 hooks API 和可疑的设计选择让他失望。文章讲述了让 GDPatch 与众不同的技术,并邀请模组制作者试用,文档和 Discord 服务器已准备好收集反馈。

内存安全绝对主义者

用 Fil-C 编译的 C 和 C++ 代码现在会在越界访问和使用后释放时 panic——无需改写成 Rust。几十年来,这些语言把内存安全留给程序员,而 Rust 的编译期强制则以拒绝某些本可安全的程序为代价。文章解析了 Fil-C 如何结合 GC 与 InvisiCaps 来追踪指针可访问的内存、Zig 受 Fil-C 启发的编译模式,以及这条新的中间道路对内存安全版图意味着什么。

C++ 到 Rust 迁移

最安全的 C++ 到 Rust 迁移不是全面重写——而是渐进式。被 Rust 的内存安全和更低长期维护成本吸引的团队往往想一次性迁移所有内容,但全面重写有破坏正常工作的系统的风险。结合 Mainmatter 的 Luca Palmieri 和 JetBrains 的 Vitaly Bragilevsky 的迁移经验,这篇文章提炼出迁移在哪里成功、在哪里停滞,以及一份实用手册:从隔离模块开始,在现有构建和发布流程中运行 Rust,随着信心增强逐步扩展。

用 SIMD 与 L1 缓存实现 Rust 高性能扁平 2D 数组

在 Rust 中存储 2D 数组最显而易见的方式——Vec 的 Vec——也是最慢的方式之一,数据分散在独立的堆分配中,破坏了 CPU 缓存局部性。然而几乎每个基于网格的程序都默认采用它,默默承受着直觉无法预见的 SIMD 和 L1 缓存代价。文章在 nightly Rust 上对朴素 2D 数组与扁平 1D 替代方案进行了基准测试,用微基准定位真正的瓶颈,并展示了连续内存加上 SIMD 如何加速终端 UI 和图像处理等工作负载。

用 TeaQL 构建 Java–Rust 微服务:模型、事件与审计意图

一份经审查的 XML/KSML 元数据源能生成几乎一致的类型化 Java 和 Rust 代码——因此同一支付系统中的 Java 和 Rust 微服务感觉像同一种语言。张力在于:将 Java 的企业工作流服务与 Rust 的延迟敏感型客户服务混在一起,会诱使团队共享一个数据库或持久化模型,从而削弱限界上下文,而审计意图注释很容易被误认为授权。本文通过一个可运行的 Java–Rust 支付参考项目,展示 TeaQL 如何生成类型化对象、查询构建器和审计意图,同时保持模型分离并把授权逻辑放在生成代码之外。

我们如何将交易机器人的反应时间从约 2 秒降到毫秒级——只把热点路径移到 Rust

一个 Polymarket 上的做市机器人在生产环境中持续亏钱,尽管回测表现良好——在快速市场上约 2 秒才响应部分成交,会让你被抢先交易。直觉是全部用 Rust 重写,但问题在于一个缓慢的多秒控制循环,而不是语言;裸仓位亏损是完成一笔配对收益的几倍,所以反应速度就是整个经济学。团队把量化逻辑留在 Python,只把订单簿摄入、决策循环和下单移动到 Rust sidecar,把最昂贵的事件降到几十毫秒,完全不动策略代码。文章解释了热点路径拆分,以及为什么部分重写优于全面重写。

ESP32 服务器:在 TLS 上分发 HTTP/2 流

一块 ESP32 开发板——一个仅 520 KiB RAM 的廉价双核微控制器——用纯 Rust 在 TLS 1.3 上提供 HTTP/2 请求服务,这是作者找不到任何人做过的首创。大多数嵌入式设备在远程数据交换上坚持使用 MQTT,而尽管 C 工具链主导嵌入式世界,由 WTX、Embassy 和 ESP crates 组成的快速演进的 Rust 技术栈却不断破坏兼容性。这篇实操指南把每个主题的介绍与代码注释配对,使用乐鑫官方 Rust crates 和 Embassy 的异步运行时,完整项目可下载。

Rust Berlin Talks · 2026 年 7 月 23 日

📚 Rust Walkthroughs

尚无 token 并不意味着 Rust LLM 流可以安全重试

Rama 101.2:核心概念

在 Rama 中,一切都是服务——DNS、TCP、TLS 和 HTTP 层都变成同一种可组合抽象。大多数 Rust 网络代码迫使客户端、服务器和代理采用不同模式,而 Rama 将它们统一到一个模块化框架中,任何具有正确输入输出类型的服务都可以通过便捷的高层 API 暴露。第二课深入讲解框架的核心概念——包括 Service trait——然后转向服务器端。

Axum 内部有什么?

📦 Crate of the Week

本周精选 Crate:cargo-efmt

本周的 crate 是 cargo-efmt,它是 cargo fmt 的即插即用替代品,用于支持 .editorconfig。

📌 newsletters

Rust 科学计算 #20(2026 年 7 月)

Rust 下载量最高的解析 crate Syn 本月发布了 v3 版本——这一变化在宏驱动的生态中引发了连锁反应。在 Rust 中编写符合人体工程学的高性能数值代码仍需付出实际努力:trait 实现样板代码繁重,插值、多目标优化和自动微分各有各的复杂性。本月的 Rust 科学计算摘要汇总了关键更新——用于派生 trait 的 derive_more、带解析梯度的 InterpN 新 B 样条方法、用于多目标问题的 NSGA-RS、oximo 基于 Enzyme 的自动微分引擎,以及 Syn 3 语法树变化对下游 crate 的影响。


往期精选


阅读原文


扫码关注「右耳朵猫AI」

扫码关注「右耳朵猫AI」