【Rust日报】2026-10-16 rustc 分不清不同文件路径
内容提要
Rust 1.99.1 修复三处回归:wcslen 缺失、x86_64 FFI 返回 bool 误编译、macOS rust-lld 加载 libLLVM 失败。另有 rustc 路径哈希碰撞误编译报告,以及 TRACTOR 首轮 C 转 Rust 评测,耶鲁正确率最高。
延伸解读
路径哈希碰撞:误编译的隐蔽风险
rustc 使用路径哈希区分源文件,但哈希碰撞可能导致编译第二个文件时错误地使用第一个文件的内容。报告指出,即使去掉斜杠后文本相同,仍需哈希碰撞才会触发。这种误编译难以被常规审计工具发现,因为工具不会以相同方式计算路径哈希。建议的修复是使用整条路径的密码学哈希作为 source file id,避免归一化。
连续补丁版本:误编译修复的节奏
Rust 1.99.1 修复了三处回归,包括 wcslen 缺失、x86_64 FFI 返回 bool 误编译和 macOS rust-lld 加载 libLLVM 失败。评论指出,1.96.1、1.97.1、1.98.1 和 1.99.1 是连续四个因误编译发布的补丁版本,上一次同类修复在 1.80.1。这反映了编译器在快速迭代中平衡新特性与稳定性的挑战。
C 转 Rust 评测:正确率与安全性的权衡
TRACTOR 首轮评测显示,耶鲁大学在功能正确率上最高(98.7%),但各团队在安全性和运行时开销上差异显著。例如,Intel 的 unsafe 操作数最低(1.56),而 Aarno Labs 较高(13.69);威斯康星大学运行时开销中位数最低(4%)。这表明翻译策略需在正确性、安全性和性能之间取舍,没有单一方案全面占优。
Miro PDF 阅读器:维护一年的经验
Miro 项目维护一年后,作者统计了 52 个 issue,其中输入、导航和视图控制类最多(15 个)。上游 mupdf-rs 已合并多个贡献。作者还记录了一次因 HashMap key 构造不正确导致的内存泄漏。下一个版本 0.13 计划加入批注功能,并考虑改名以避免与同名产品冲突。这些经验对 Rust 桌面应用开发者有参考价值。
Q&A
rustc 为什么会出现分不清不同文件路径的误编译?
rustc 使用路径哈希来区分源文件,但 Path 的哈希会忽略分隔符。PR #127297 将路径组件的长度混入哈希后,碰撞仍然容易发生。当哈希相撞时,编译第二个文件会错误地使用第一个文件的内容,导致误编译。
Rust 1.99.1 修复了哪三处回归问题?
Rust 1.99.1 修复了三处回归:1) 部分目标链接时缺少 wcslen 符号,compiler-builtins 提供了回退实现;2) x86_64 上 FFI 返回 bool 的误编译,返回类型重新标为零扩展以符合 ABI;3) macOS 上 rust-lld 加载不了 libLLVM,现在构建时带上了 libLLVM.dylib 所在目录的 rpath。
TRACTOR 首轮 C 到 Rust 翻译评测中,各团队的功能正确率如何?
在 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%。
TRACTOR 评测中,各团队在安全性和代码地道程度上的表现如何?
安全性按每个测试的 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。
Miro PDF 阅读器维护一年后,作者处理了哪些主要问题?
到 2026 年 9 月 26 日,仓库有 52 个 issue,45 个已关闭,7 个仍开放。按主问题分类:输入、导航和视图控制 15 个,构建、安装和发布 9 个,渲染、布局和文本 8 个,崩溃、卡死和资源占用 7 个。上游 mupdf-rs 已合并 3 个相关贡献。
Miro PDF 阅读器下一个版本 0.13 计划增加哪些功能?
Miro 0.13 计划加上批注功能,包括下划线、删除线、高亮、手绘、评论和回复,以及裁剪、缩放和删除页面。作者也在考虑改名,因为 miro 和别的产品重名,crates.io 上已经用了 miro-pdf。