【Rust日报】2026-09-03 FMA 揭出标准库缺陷
内容提要
本文介绍FMA仿真发现Rust标准库及musl libc在浮点舍入上的缺陷,影响无硬件FMA平台(约15%x86用户)。作者已修复fearless_simd,compiler-builtins补丁待审,musl讨论中。同时提及rustup 1.29.1改进更新与安装,rustc_codegen_gcc实现100%unwinding,及XML转TSV工具Unstruct。
延伸解读
FMA缺陷的影响范围与验证方法
文章指出,无硬件FMA的x86平台(约占15%)依赖软件模拟,而Rust标准库和musl libc在subnormal的halfway rounding上存在错误。读者可自行用文中给出的a、b、c值验证,正确结果应为0x00010001,错误结果则为0x00010002。这一缺陷可能影响依赖高精度浮点运算的应用,但修复补丁尚未完全合并,需关注后续进展。
rustup 1.29.1的实用改进
新版本显著提升了更新和组件安装的效率:rustup update会先并行检查更新,component add支持并发安装。此外,rustup doc新增--serve选项,可通过本地HTTP服务浏览文档。对于Windows用户,安装i686-pc-windows-* host需使用--force-non-host,且rustup-init.sh在Windows上的问题已修复。这些改进对日常工具链管理有直接帮助。
rustc_codegen_gcc的进展与局限
该后端在unwinding支持上达到100%,UI测试通过数增加543,失败数减少59,但rustup分发版本尚未包含此修复。这意味着普通用户暂时无法直接体验完整功能。项目下一步计划编译常用crate并运行crater,以进一步验证稳定性。对于需要GCC后端支持的架构,这一进展值得关注。
Q&A
FMA仿真发现了哪些标准库的缺陷?
FMA仿真发现Rust标准库的f32::mul_add和std::simd,以及musl libc的fmaf在subnormal的halfway rounding上处理错误。
为什么需要软件FMA?哪些平台受影响?
因为无AVX2的x86平台(约占15%)没有硬件FMA,需要软件FMA来保证浮点运算的精度。
如何检查FMA实现是否正确?
可以使用a=0x97000800、b=0x1cfff001、c=0x00010002进行测试,正确结果应为0x00010001,错误结果则为0x00010002。
rustup 1.29.1有哪些改进?
rustup 1.29.1改进了更新检查(并行检查)、组件安装(并发安装),新增rustup doc --serve,修复了Windows安装问题,并正式支持aarch64-pc-windows-gnullvm host。
rustc_codegen_gcc的unwinding支持进展如何?
rustc_codegen_gcc的unwinding支持已从约80%提升到100%,函数/变量attributes从22%升到60%,UI测试通过数增加543,失败减少59。
Unstruct工具的主要功能和特点是什么?
Unstruct是一个将XML批量转换为TSV的命令行工具,便于导入关系数据库。它支持通过parser配置选择输出列、过滤器等,每个匹配的recording生成一行,嵌套recording继承外层值,批处理采用fail-fast策略,原子写入输出。