rustc 分不清不同文件路径
#164348 是 rustc 的一份误编译报告,标题是 miscompilation via engineered StableSourceFileId hash collisions。jsnell 在 2026 年 10 月 15 日提交,目前仍开放,GitHub 上有 15 条评论。标签包括 P-high、C-bug、T-compiler、A-filesystem、I-miscompile 和 regression-from-stable-to-stable。noop_noob 把它发到 r/rust,目前 486 分、83 条评论。报告在 1.99.0 和 nightly-2026-10-11 上复现。
rustc 用路径哈希区分源文件。Path 的哈希会忽略分隔符。PR #127297 把路径组件的长度混进哈希之后,issue 写明碰撞仍然容易出现。哈希相撞时,编译第二个文件会换成第一个文件的内容。Reddit 帖子举的例子是 data/baselines/table.rs 和 database/line/stable.rs。发帖人补充,去掉斜杠后文本相同还不够,还要再撞上哈希才会触发。
issue 写明,审查如果分别看两个路径,不会看到内容已经被替换,因为多数审计工具不会按同样的方式计算路径哈希。建议的修复是用整条路径的密码学哈希作为 source file id,不做归一化。碰撞会影响结果的地方,不再使用 Path 的哈希。相关说明见 https://github.com/rust-lang/rust/issues/127254#issuecomment-2205452710 。
原文链接:https://github.com/rust-lang/rust/issues/164348
Rust 1.99.1 修复三处回归
Rust 1.99.1 是 Rust 团队在 2026 年 10 月 15 日发布的补丁版本。公告写明它修的是此前版本引入的回归。noop_noob 发到 r/rust,目前 151 分、11 条评论。
缺少 wcslen 符号的问题记在 #163614。部分目标链接时找不到 wcslen,compiler-builtins 现在提供了回退实现。LLVM 的 loop-idiom-wcslen pass 可能插入对 wcslen 的调用,有些目标的 libc 里没有这个函数。UEFI 目标上,用了 std 的项目会坏,因为预编译标准库里已经带上这类调用。同样的用户代码模式也可以复现。
x86_64 上 FFI 返回 bool 的误编译记在 #163911。通过 FFI 返回 bool 的函数可能让返回寄存器的第 1 到第 7 位保持未指定,调用方会读到 0 和 1 以外的值。这个返回类型重新标成零扩展,以符合 ABI。
macOS 上 rust-lld 加载不了 libLLVM 的问题记在 #163947。不经过 rustup 代理直接调用编译器时,链接器可能找不到库搜索路径。现在 rust-lld 构建时带上了 libLLVM.dylib 所在目录的 rpath。
一条评论统计,1.96.1、1.97.1、1.98.1 和 1.99.1 是连续四个因误编译发出的补丁版本,并写明上一次同类修复在 1.80.1。
原文链接:https://blog.rust-lang.org/2026/10/15/Rust-1.99.1/
TRACTOR 公布首份 C 到 Rust 翻译评测
这份报告是 MIT 林肯实验室给 DARPA TRACTOR 项目做的第一轮测试评估,日期是 2026 年 2 月 20 日,共 76 页。作者包括 Hamed Okhravi、Noah Luther、Ian McQuoid、Brandt Ogden、Howard Mak、Nicholas Strega 和 Nathan Burow。Rodrigodd_ 在 2026 年 10 月 15 日把它发到 r/rust,目前 5 分。项目页在 https://www.ll.mit.edu/r-d/projects/translating-all-c-rust-tractor-benchmarks 。
TRACTOR 要做的是把大型 C 代码库翻译成 Rust,同时保持功能,并比较安全性、性能和代码质量。评测方是 MIT 林肯实验室。六个团队按主承担单位简称是 Aarno Labs、Galois、Intel、华盛顿大学、威斯康星大学和耶鲁大学。报告要求 LLM 接入可以替换,不能绑死某一家模型。
第一套测试 Battery 01 有 150 个用例。范围限定在明确的指针用法、简单数据结构、常规错误处理和静态程序结构,避开动态分配和复杂别名。功能正确率:耶鲁大学 98.7%(148/150),Aarno Labs 95.3%(143/150),Galois 90.7%(136/150),Intel 90.0%(135/150),威斯康星大学 80.7%(121/150),华盛顿大学 48.0%(72/150)。各队平均失败率 17.8%。
安全性按每个测试的 unsafe 操作数计,Intel 是 1.56,Aarno Labs 是 13.69。运行时开销中位数,威斯康星大学是 4%,Aarno Labs 是 5%。地道程度按可读性、语法、类型三项打分,满分 3。Intel 是 2.67、2.89、2.67,Aarno Labs 是 1.90、1.50、1.10。
六条路线可以分开看。Aarno 的 Tenjin 以确定性转译为主,走 C2Rust,自动模式不靠 LLM 合成。Galois 的 CRISP 把确定性转译和有界的 LLM 安全改写放在一起。Intel 的 IDEAS 按依赖顺序做片段级 LLM 翻译,并限制不生成 unsafe。华盛顿大学用工具编排的项目级 LLM 翻译。威斯康星大学用整项目 LLM 流程,靠构建失败迭代修复。耶鲁的 PROCTOR 在转译之后用静态分析做 Rust 到 Rust 的细化,减少 unsafe。
原文链接:https://github.com/DARPA-TRACTOR-Program/Reports/blob/main/First_TRACTOR_Evaluation_Report.pdf
Miro 的 PDF 阅读器维护满一年
Miro 是作者 Vincent Uden 用 Rust 写的 PDF 阅读器,仓库在 https://github.com/vincent-uden/miro ,crates.io 上的名字是 miro-pdf。这篇博客写的是项目发布一年后的维护情况。xorvralin2 发到 r/rust,目前 24 分。阅读器依赖 AGPL-3.0 的 mupdf,Rust 绑定是 mupdf-rs。
仓库里来自其他人的 issue,到 2026 年 9 月 26 日有 52 个,45 个已关闭,7 个仍开放。作者按主问题分成互斥类别。输入、导航和视图控制 15 个,构建、安装和发布 9 个,渲染、布局和文本 8 个,崩溃、卡死和资源占用 7 个。上游 mupdf-rs 已经合并 3 个相关贡献,另有 1 个已合并、还没发版。Wez Furlong 在 #53 里给过键位建议。
作者记录过一次泄漏:HashMap 的 key 构造不正确,渲染缓冲没有被丢掉。下一个版本 0.13 计划加上批注,包括下划线、删除线、高亮、手绘、评论和回复,以及裁剪、缩放和删除页面。作者也在考虑改名,因为 miro 和别的产品重名,crates.io 上已经用了 miro-pdf。
原文链接:https://www.uden.dev/blog/i-still-hate-acrobat
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论