【Rust日报】2026-10-17 zip crate 旧版本被 yank 后又恢复
内容提要
zip 库因安全问题批量撤回旧版本,后恢复部分版本至 10 月 30 日或发布 backport。Rust 多系统模拟器 Sly 发布,支持 GBA 和 SNES,计划支持更多主机。轻量 Discord 客户端 Yapfast 闲置内存约 40MB,但第三方客户端违反 Discord 条款。Niko Matsakis 谈 agent 与 Rust,认为类型系统和默认性能使 Rust 适合 agent 编写代码。
延伸解读
yank 不是删除:锁文件与依赖解析的实际影响
文章明确说明 yank 不会删除已发布的 crate,锁文件里已记录的版本仍可解析,但 cargo add 和 cargo update 不会再选中被 yank 的版本。这意味着已有项目不会因 yank 突然构建失败,但新引入或更新依赖时会被迫避开问题版本。考虑到 zip 有 3983 个反向依赖,维护者选择先 yank 再公开安全问题,实际是在给下游留出迁移窗口。
恢复版本有期限:10 月 30 日或 backport 先到为准
维护者恢复了 8.6.0、7.4.0、6.0.0 等版本,但写明只保持可解析到 10 月 30 日,或到对应大版本 backport 发布,以先到者为准。这说明恢复并非撤销安全策略,而是临时过渡。依赖 zip 旧大版本的项目应把这段时间视为迁移截止期,而不是问题已解决的信号;采集时仍有 17 个版本处于 yanked 状态。
Yapfast 的资源数据来自作者自测,且条款风险明确
Yapfast 约 40MB 闲置内存、0.22 秒启动的对比,来自站点在 2026 年 10 月 15 日用两台机器做的测量,启动时间取第二次启动,方法公开在仓库文档中。读者应把它看作作者自测而非独立评测。文章同时明确第三方客户端违反 Discord 服务条款,站点也写不能保证账号不被封,这是采用前必须权衡的实际风险。
Sly 的完成度分层:SNES 较成熟,GBA 仍缺音频与存档
Sly 首发支持 GBA 和 SNES,但两者完成度不同:作者写 SNES 支持很好,多数 GBA 游戏能运行,却还没有音频,游戏存档也不支持,仅即时存档可用。计划中的 PS1、Dreamcast、GameCube 等尚未落地。桌面端提供 Launcher、Classic、Debugger 三个前端,调试器还可在支持 WebGPU 的浏览器中打开,适合关注模拟器内部实现的读者。
Q&A
zip crate 为什么在 2026 年 10 月 16 日批量 yank 旧版本?
维护者 Pr0methean 因安全问题(包括 GHSA-vv5m-jxxh-4627、GHSA-4v9h-p7m9-rh26、GHSA-4684-h2q9-2vcp 以及本月稍后才会公开的其他安全问题)从北京时间 11:32 起 yank 了一批 9.x 以外的版本。
zip crate 被 yank 的版本后来恢复了吗?恢复后有什么限制?
是的,10 月 17 日 00:51 维护者恢复了 8.6.0、7.4.0、6.0.0、5.1.1、4.6.1 和 3.0.0,并写明这些版本会保持可解析到 10 月 30 日,或到对应大版本的 backport 发布,以先到者为准。到 10 月 17 日 08:22,更多版本也被 unyank,但采集时 136 个版本里仍有 17 个是 yanked。
Rust 写的多系统模拟器 Sly 目前支持哪些游戏主机?
Sly 首发支持 Game Boy Advance 和 SNES。计划中的系统包括 PS1、Game Boy、Game Boy Color、Sega Genesis、Dreamcast、GameCube 和 Wii。
Yapfast 客户端相比 Discord 桌面版在资源占用和启动速度上有什么优势?
根据 Yapfast 官网对比,同一账号登录后闲置时,Yapfast 约占用 40MB 内存,而 Discord 桌面版约 800MB;从图标到可用窗口,Yapfast 耗时 0.22 秒,Discord 桌面版耗时 8 秒。测量日期为 2026 年 10 月 15 日。
使用 Yapfast 这类第三方 Discord 客户端有什么风险?
第三方客户端违反 Discord 服务条款。Yapfast 官网写明不能保证账号不会被封,并指出实际被封的账号多与垃圾信息或自动化有关。
Niko Matsakis 认为 Rust 为什么适合 agent 编写代码?
Niko Matsakis 认为 Rust 的默认性能和类型系统护栏是适合 agent 写代码的两点。他提出可以把权重往人更专注读代码、agent 更专注写代码调整,并希望把证明工具接进可扩展的编译器,减少宏和钉死的编译器版本,目标是证明写出的 unsafe 代码正确且不会造成未定义行为。