【Rust日报】2026-09-03 FMA 揭出标准库缺陷

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

本文介绍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策略,原子写入输出。

🏷️

标签

➡️

继续阅读