【Rust日报】2026-11-05 Discord 客户端改用 GPUI
内容提要
Discord宣布客户端全面改用Rust,移除Electron和React Native,桌面与移动端共享Rust代码,界面采用GPUI,但社区指出其系统集成与无障碍功能仍不足。rustc十一月性能月记介绍span压缩等优化,增量编译改进显著,平均墙钟时间降低2.85%。systemd合并可选Rust支持,仅限叶子组件,默认auto。benchfmt.rs对接Go benchstat,基准显示Rust解码更快,但堆内存占用更高。
延伸解读
Discord 迁移的取舍:共享代码与平台集成
Discord 计划用 Rust 重写整个客户端,桌面与移动端共享应用代码,但移动端保留原生 UI。这能减少重复逻辑,但社区评论指出 GPUI 仍缺操作系统集成和无障碍功能,有团队称补丁后接近 Electron 水平。迁移能否成功,不仅看代码复用,更取决于这些平台细节能否补齐。
rustc 性能改进:增量编译受益明显
十一月月记显示,span 压缩让增量编译中需 intern 的 span 从 20%–40% 降到约 1%,配合缓存和微优化,平均墙钟时间下降 2.85%,峰值内存下降 4.46%。这些数字来自基准测量,实际项目收益会因代码规模和编译模式而异,但增量编译方向的改进信号明确。
systemd 的 Rust 支持:谨慎的渐进路线
systemd 合并的 Rust 支持仅限叶子组件,即单个二进制,根组件暂不接受,需等 Rust 有一等共享库支持。选项默认 auto,依赖 rustc 1.85 和 bindgen 0.71.1,构建走 meson 而非 cargo。项目明确不重写已有 C 代码,Rust 仍是可选项,没有 Rust 的 systemd 继续可用。
benchfmt.rs 对比:速度与内存的权衡
benchfmt.rs 让 Rust 基准结果可直接用 Go benchstat 分析。示例中 Rust 解码 Varints 快 37.16%,Remote Write 解码快 17.68%,但堆字节多 30.98%,主要来自 prost 中 Vec 按 2 倍扩容。这说明 Rust 在吞吐上占优,内存效率并非全面领先,选型时需结合具体负载权衡。
Q&A
Discord 客户端为什么要从 Electron 和 React Native 迁移到 Rust?
Discord 从 2018 年就开始使用 Rust,基础设施、语音技术以及现有客户端的一部分已经是 Rust。下一步是把整个客户端换成 Rust,去掉 Electron 和 React Native,移动端保留原生 UI,桌面端和移动端通过 Rust 共享应用代码,界面方案采用 GPUI。
GPUI 目前存在哪些不足?
社区评论指出 GPUI 还缺不少操作系统集成和无障碍功能,GPUI-CE 和 Zed 正在分开走。有团队给 gpui-ce 补过无障碍补丁,接近 Electron 的水平。
rustc 的 span 压缩优化带来了哪些性能提升?
新的压缩方案将增量编译中需要 intern 的 span 从旧方案的 20%–40% 降到大约 1%,非增量编译通常低于 0.1%。一批基准的指令数下降,最好的情况超过 3%,周期数下降更多,增量编译的改进更大。
systemd 对 Rust 的支持有哪些限制?
systemd 合并了可选的 Rust 支持,但仅限叶子组件(单个二进制),根组件(把 Rust 放进 libsystemd-shared.so)目前不接受,要等 Rust 有一等的共享库支持。Rust 代码用 core,不用 std、alloc crate 和外部 crate。该选项默认 auto,需要 rustc >= 1.85、bindgen >= 0.71.1 和 meson 1.4.0。
benchfmt.rs 在基准测试中显示 Rust 和 Go 的性能差异如何?
在 DecodeVarints 上 Rust 快 37.16%(5.36 µs 对 8.54 µs);在 2000 条 series 的 Remote Write 解码中 Rust 快 17.68%。但 Rust 的堆内存占用更高:2000 条 series 时堆字节多 30.98%(2.05 MiB 对 1.57 MiB),200 条 series 时多 42.59%。Rust 的堆分配次数少 14.55%。
2026 年 9 月到 11 月 rustc 的整体性能改进情况如何?
墙钟时间比较中,达到 relevant 阈值的结果有 236 项改进,分布在 45 个基准上;回退有 4 项,分布在 3 个基准上。把低于方差阈值的结果也算进去,平均墙钟时间下降 2.85%,平均峰值内存下降 4.46%。从 2026 年 1 月 1 日算起的指令数比较有 561 项测量,560 项改进,1 项回退。