【Rust日报】2026-10-31 1.99.0 的 rustc.exe 被杀毒软件标红

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

本期Rust社区动态:Windows上rustc 1.99.0被杀软误报,1.99.1未检出;sysinfo 0.40.0新增GPU信息并优化刷新性能,指令数减少65%;Firezone发布sanstun,将WireGuard加密拆出以支持多线程处理;wasm-language-tools v0.12.0优化解析,408MB文件内存占用从4.3GB降至1.65GB。

🔎

延伸解读

误报的边界:版本与签名

帖子显示,误报仅出现在 rustc 1.99.0,1.99.1 未被检出,且 rustup 安装器本身正常。作者提到该可执行文件没有签名,评论也指出杀毒软件对开发工具误报常见。这提示读者:遇到类似情况可先核对版本与哈希,并关注后续版本是否修复,而非直接归因于工具链本身。

GPU 刷新优化的关键取舍

sysinfo 0.40.0 加入进程 GPU 信息后,刷新开销明显上升。作者通过过滤 /dev/dri/ 与 /dev/accel/ 路径、改用 getdents64 和 readlinkat 等手段逐步压缩开销。最大改进来自识别与父进程共用 fd 表的线程并直接复用父进程 GPU 时间,使指令数减少 65%。这说明性能优化需先定位真实瓶颈,而非盲目替换系统调用。

sanstun 的设计意图与代价

sanstun 把加密从状态机中拆出,使 begin_encapsulate 只做记账并返回可跨线程的 PendingEncapsulate,加密可移到工作线程。基准显示 1280 字节时记账仅占加密时间约 2%,理论上限约 45 倍,但未计线程交接开销。读者需注意,这一收益取决于实际线程调度与负载,并非所有场景都能接近上限。

wasm-language-tools 的破坏性变更

v0.12.0 在解析 408MB 文件时显著降低内存占用,解析吞吐也大幅提升。但 SyntaxNode 和 SyntaxToken 引入生命周期属于破坏性改动,依赖这些类型的下游代码可能需要调整。此外,重命名、补全和范围格式化的行为也有细化规则。升级前应评估兼容性影响,而非只看性能数字。

❓

Q&A

Windows 上 rustc 1.99.0 被杀毒软件误报是怎么回事?

有用户报告 Windows 上官方 rustc 1.99.0 的可执行文件被 F-Secure 等杀毒软件标为恶意,上传 VirusTotal 后多家厂商也报毒。该问题似乎只出现在 1.99.0,1.99.1 未被检出。复现步骤:新装 rustup,清空 RUSTUP_HOME 和 CARGO_HOME,再执行 rustup toolchain install 1.99.0-x86_64-pc-windows-msvc。rustup 安装器本身未被标。评论指出杀毒软件常对开发工具误报,且该可执行文件没有签名。帖子里没有 Rust 项目的官方说明。

sysinfo 0.40.0 如何优化 GPU 信息刷新性能?

sysinfo 0.40.0 在 Linux 上加入进程 GPU 信息后,通过多项优化将刷新指令数减少 65%。关键优化包括:用 getdents64 一次多读目录项,将 readlink/open 换成 readlinkat/openat;把一批 &str 换成 &[u8];复用读文件、拼路径和 getdents64 的缓冲区;最大的一跳是处理线程与父进程共用 fd 表的情况,直接复制父进程的 GPU 时间,使指令少 65%、耗时少 64%。

sanstun 是什么?它如何把 WireGuard 加密拆出去?

sanstun 是 Firezone 发布的 Rust WireGuard 状态机库,IO 和时间都留在库外,加密可以放到别的线程做。入站数据报只有 Interface::receive 一个公开解析入口,负责解析、限速并交出消息类型。Tunnel::begin_encapsulate 不加密,只检查 session、占包序号、推进计时器,返回实现了 Send 的 PendingEncapsulate,可交到别的线程再调用 encrypt。解密分成 begin_decapsulate、decrypt、commit_decapsulate。

wasm-language-tools v0.12.0 在内存和解析性能上有什么改进?

wasm-language-tools v0.12.0 打开 408MB 文件时,Linux 上内存从 4.3GB 降到 1.65GB,macOS 上从 4.0GB 降到 1.47GB。解析器基准中,408MB 的 swc 文件解析耗时从约 3.06 秒降到约 961 毫秒,吞吐从约 127 MiB/s 升到约 405 MiB/s;900 字节样本耗时降低约 27.6%。textDocument/foldingRange 改用 amber tree 后快 92%。

sanstun 的加密性能基准数据如何?

cargo bench data_path 的 64 字节结果:begin_encapsulate 约 20.8 纳秒,encrypt 约 226 纳秒,begin_decapsulate 约 37.7 纳秒,decrypt 约 205.8 纳秒,commit_decapsulate 约 17.5 纳秒。1280 字节时,begin_encapsulate 仍约 20.8 纳秒,encrypt 约 933.5 纳秒,decrypt 约 914.9 纳秒,commit_decapsulate 约 17.7 纳秒。1280 字节时,发出新包的记账部分只占加密时间的 2%。文章称把加密挪到工作线程理论上限约 45 倍,未算线程交接开销。

wasm-language-tools v0.12.0 有哪些破坏性改动或行为变化?

v0.12.0 中 SyntaxNode 和 SyntaxToken 现在带生命周期,这是破坏性改动。重命名时,非法标识符会加上双引号收下,缺前导 $ 时会补上。指令名补全只列前缀,再输入 . 才会继续展开。范围格式化只改选中范围,不改整个语法节点。

🏷️

标签

➡️

继续阅读