可变参数泛型调查收回 3300 多份
《Variadic Generics Micro Survey results》是 Rust 官方 Inside Rust 博客 2026 年 10 月 27 日的文章,公布一年前发出的可变参数泛型微调查结果。Kobzol 同一天发到 r/rust,采集时 175 分、54 条评论。
调查收回 3300 多份提交。其中一个问题有 900 条文字回答。团队考虑过用 AI 处理开放回答,出于隐私和质量,最后人工过数据集。完整报告是 PDF,放在 rust-lang/surveys 仓库。
问“可变参数泛型会不会让你的项目更容易”,1702 人答会,其中 1025 人写了细节。开放回答里常见的用途有:给任意长度的元组实现 trait、parser combinator、SQL 查询的可变列和参数、多维张量类型、把结构体拆成字段元组。大约 7 人写现有的宏方案够用。更多人明确不喜欢用宏给固定长度元组生成实现。有人写,宏覆盖到某个元组长度之后,用户还是会要更长的。
问可变参数映射,1287 人答会有帮助,344 人写了开放回答。问非线性可变参数,696 人答会,205 人写了细节。文章写,这道题的示例把回答带向了过滤,也碰到了 trait specialization。
最后一问“还有没有和可变参数泛型相关的评论”,572 人作答。23 条回答专门解释为什么不选“最高优先级”,常提到的更高优先级是 specialization 和更好的 const generics。文章把总体气氛写成谨慎,但有兴趣。怀疑者是少数,人数已经够多,后面的提案不能直接略过。怀疑者最常写的担心是功能越堆越多,新人会更难看懂。文章写,后面要推可变参数泛型,语法得容易读,也得说明比现在的宏方案强在哪里。
回答里 Bevy 社区偏多。文章写,分不清是 Bevy 用户更在意可变参数,还是调查在 Bevy Discord 上发得多。
原文链接:https://blog.rust-lang.org/inside-rust/2026/10/27/variadic-generics-micro-survey-results/
Wild 0.11.0 默认打开 Wasm
Wild 0.11.0 是 Linux 和 Wasm 用的快速链接器发布。作者 dlattimore 2026 年 10 月 27 日发到 r/rust,采集时 73 分、10 条评论。GitHub Release 发布时间是 2026 年 10 月 24 日。
Wasm 功能这次默认打开,可以用来链接 Wasm。调试信息还没做。Wasm 移植主要是 lapla-cogito 在 GSoC 2026 做的。
GNU linker script 支持推进了一截,主要是 vishruth-thimmaiah 在 GSoC 2026 做的。发布说明写,现在的脚本语法够用来链接 Linux 内核模块,离链接 Linux 内核本身还差一截。脚本侧这次加上 FILEHDR、PHDRS、段属性、ASSERT、复合赋值和符号重定义。
Mac 移植还没默认打开。Wild 已经能在 Mac 上链接自己。至少一位维护者把 Wild 当作 Mac 上 Rust 的默认链接器。
正确的 ELF COMDAT 支持让 Rust 代码的链接慢了大约 1.5%。Rust 代码的 COMDAT 用量不大。输出落在 EXT4 一类文件系统上的性能问题做了调整。线程数默认最多 32,除非用 --threads 覆盖。超过这个数会撞上 Linux 内核按 inode 的互斥锁。构建 Wild 的最低 Rust 版本现在是 1.99.0。
评论里 vlovich 问 inode 争用,并贴了 XFS 的补丁。dlattimore 写,输出在 tmpfs 上时,大约 51% 的周期花在 shmem_add_to_page_cache 调进的 spinlock 慢路径;EXT4 上大约 34%,调用点是 __filemap_add_folio。图在 PR #2670。
原文链接:https://github.com/wild-linker/wild/releases/tag/0.11.0
uv 换上 tar-codec 解析 sdist
tar-codec 是 Astral 写的 tar 解析器,用来解析 Python 源码分发。作者 yossarian_flew_away 2026 年 10 月 27 日发到 r/rust,采集时 31 分、4 条评论。代码在 astral-sh/astral-codec 的 crates/tar-codec。
uv 从 0.12 起可以在 --preview-features tar-codec 后面用它。0.13 起,uv 用它解析 source distribution,这是默认实现。关掉的环境变量是 UV_LEGACY_TAR_BACKEND=1。文章写,它大约比之前的 astral-tokio-tar 快一倍,也减少解析器差异。
0.13 之前,uv 用 astral-tokio-tar 做 tar 的解析和创建。这条线是 tokio-tar 的多层 fork。大约一年前,astral-tokio-tar 收到一批安全报告。问题很多落在解析差异上:同一份 tar,uv、pip 和其他工具可能看到不同内容。一种是只对某个解析器在末尾追加文件或内容。一种是让不同解析器解出完全不同的内容。
文章写,Python 的 sdist 在构建时本来就会执行任意代码,打包这边通常把 tar 差异看成次要问题。Astral 还是决定自己写解析器。tokio-tar 这一系默认偏宽松,往上补约束比从头写更容易出错,性能目标在旧代码里也达不到。
tar-codec 先看第一个块的 magic 和 version,把后面的解析锁到一个家族,要么 UStar/pax,要么 GNU。头之间对家族不一致就拒绝。GNU 的 L/K 扩展,每种只允许一条。pax 扩展头按未声明、生效、墓碑三种状态处理。空路径,以及全局扩展头试图给所有成员声明 size 这类关键状态,会被拒绝。底层分帧在 tar-framing crate。
原文链接:https://astral.sh/blog/tar-codec
cargo-auditable 0.7.7 能审计固件
cargo-auditable 把依赖列表嵌进编译出的二进制,让 cargo audit 和其他扫描器检查已知漏洞。作者 Shnatsel 2026 年 10 月 27 日发到 r/rust,采集时 12 分、5 条评论。仓库是 rust-secure-code/cargo-auditable。
从 v0.7.7 起,它也能用于微控制器固件。审计数据写在固件镜像里,但不会烧进 ROM 紧张的微控制器。镜像仍然可以审计,不占片上 ROM。
不占 ROM 的做法是 ELF 里的审计数据不设 SHF_ALLOC。这一步本来就在做。难的是把参数交给链接器。
多数平台用 C 编译器当链接器,给真正链接器的参数要加 -Wl。一部分嵌入式目标直接调用链接器,-Wl 会让构建失败。稳定版 Rust 没有办法区分这两种。作者用了一个假装成 nightly rustc 的参数,只跑 rustc --print target-spec-json,读 target spec 里的 linker flavor。作者写,另外两条路更容易漂:从某个 rustc 版本抽出数据写死,或者解析 rustc 编译链接时的非机器可读输出。
作者希望有 rustc --print linker-flavor。target spec 里的 linker flavor 键看起来不会改,现在的做法还能用。这个 nightly-only 参数坏了,也不会影响 Tier 1 和大部分 Tier 2。
原文链接:https://www.reddit.com/r/rust/comments/1xgq7e4/cargoauditable_now_lets_you_make_auditable/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论