Gemini 正在把 Google 的 C/C++ 迁到 Rust
这是 Google 介绍新模型 Gemini 4 Argon 的博文。文中写到,Argon agent 正在把 Google 内部的 C/C++ 代码库迁到 Rust,规模从 re2、libgav1 这类核心库的数万行,到 Fuchsia Zircon 内核的 80 万行以上。这些系统改动上线前要经过自动和人工审计、仿真测试和评审。
libgav1 是 Google 开源的视频解码库。Argon agent 在已有 Rust 移植上替换了 3.2 万行 SIMD 代码:多轮按 profile 做实验,查看编译器输出,写出能让编译器自动向量化的安全 Rust。结果是内存安全的解码器,视频输出与原移植一致,速度是该 Rust 移植的 2.7 倍,更接近优化过的 C++。
原文链接:https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-4-argon/
Rust 1.99.0 稳定 C 可变参数
Rust 1.99.0 是 2026-10-01 发布的稳定版。这个版本可以在 Rust 里定义 extern "C" 和 extern "C-unwind" 的 C ABI 可变参数函数。可变参数列表的类型是 VaList,和各目标上的 C va_list ABI 兼容;能从里面读出的类型由 VaArgSafe 约束。非 "C" ABI 的 naked 可变参数函数也一并稳定,这类函数要用内联汇编来写。
同一版本明确了从原始指针取大小和对齐的安全要求,并稳定了 Layout::for_value_raw、mem::size_of_val_raw、mem::align_of_val_raw。Sized 类型本来就可以在 stable 上取,这次把非 Sized 类型的要求也定下来。
文档更新了 Box::leak:不建议之后再把这块内存释放掉。原因是这类写法会和当前以及以后可能的编译器优化互相干扰,自定义分配器稳定后问题更大。文档建议改用 Box::into_non_null 或 Box::into_raw。这条说明也适用于标准库里其他 leak 函数。
同期稳定的 API 还包括 Box<[T; N]> 及其引用的 IntoIterator、VecDeque::retain_back、Box::into_non_null / from_non_null、Vec::into_parts / from_parts、String::from_utf8_lossy_owned、string::FromUtf8Error::into_utf8_lossy、StepBy<I> 的 FusedIterator、std::fs::set_times 和 set_times_nofollow。
原文链接:https://blog.rust-lang.org/2026/10/01/Rust-1.99.0/
Generic Const Arguments 进入实现
Inside Rust 这篇说明介绍 Generic Const Arguments(GCA)。它是一组 nightly 特性,用来替换自 2021 年 min_const_generics 稳定以来就存在的 generic_const_exprs。设计从 2024 年 6 月 RustFest Zürich 上 Const Generics 项目组的讨论开始。初始实现主要来自 @camelid,后续实现和设计大量来自 @khyperia。
稳定版上,const 泛型参数只能是泛型参数本身(例如 { N })或完全具体的常量(例如 { 1 + 1 })。[u8; T::NUM_BYTES] 和 [u8; N + 1] 还不行。GCA 让带泛型参数的更多表达式进入 const 泛型,新支持的表达式要写在 gca! 宏里。gca! 里可以用泛型参数,但目前不支持算术和函数调用;gca!(1 + 1) 或 gca!(foo()) 会报错,而 { 1 + 1 } 和 { foo() } 可以。
gca_adts 支持在 const 泛型里构造结构体、枚举、数组和元组,例如 gca!(TupleStruct(N))、gca!(MyEnum::Record { x: N })、gca!([N1, 12])。数组重复表达式 gca!([N1; 2]) 目前还不支持。gca_const_items 允许 const item 进入类型系统,需要 -Znext-solver。这样不能直接写的 gca!(N + 1),可以先做成 const FOO: usize = N + 1; 再引用。关联常量绑定,以及带关联常量的 trait 的 dyn 兼容,也在这个特性里。缩小版 gca_min_const_items 只接受右边是 gca!(..) 的 const item,不需要 next solver。
原文链接:https://blog.rust-lang.org/inside-rust/2026/10/02/generic-const-args-and-you/
i686 Windows 目标降为只发标准库
这是 Rust 官方对两个 32 位 Windows 目标的降级说明。从 Rust 1.100.0 起,i686-pc-windows-msvc 从带 host tools 的 Tier 1 降为不带 host tools 的 Tier 1;i686-pc-windows-gnu 从带 host tools 的 Tier 2 降为不带 host tools 的 Tier 2。标准库构建仍会分发,编译器等 host tools 不再提供。i686-pc-windows-msvc 作为 Tier 1 目标仍会跑 CI。
之后在 32 位 Windows 主机上不能再安装工具链,需要从仍受支持的主机交叉编译,例如 64 位 Windows 工具链。其他 32 位平台不受这次改动影响。
背景是:只支持 32 位的桌面和服务器 x86 CPU 已经超过 15 年没有销售,通用 32 位 Windows 支持在 2025 年 10 月结束。即使在现代 x86_64 硬件上,构建 i686 Windows 工具链也出过问题:用 i686 MSVC 目标构建的编译器二进制会崩溃,GNU C++ 工具链在构建 LLVM 时会 OOM。对应说明见 RFC 3999 和 MCP 1020。
原文链接:https://blog.rust-lang.org/2026/10/02/demoting-i686-windows-targets-to-std-only/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论