< 返回版块

Mike Tang 发表于 2026-11-06 20:51

Discord 客户端改用 GPUI

这是 Discord 联合创始人 Stanislav(@svishnevskiy)2026 年 11 月 4 日发在 X 上的一条帖子。KeyGlove47 把截图发到 r/rust,采集时 927 分、90 条评论。帖子时间是 2026-11-04 20:44 UTC。Reddit 帖子时间是 2026-11-04 20:55 UTC。

帖子写,Discord 从 2018 年就开始用 Rust。基础设施、语音技术,以及现有客户端的一部分,已经是 Rust。帖子写,下一步是把整个客户端换成 Rust。Electron 会去掉。React Native 也会去掉。移动端保留原生 UI。桌面端和移动端通过 Rust 共享应用代码。帖子写,希望很快进入用户测试。帖子点名的界面方案是 GPUI,并写明 Tauri 不在这个方案里。

截图里的进程列表有一项 Discord Phoenix,内存 290.2 MB。

moon-w0man 的评论有 68 分。评论写,GPUI 还缺不少操作系统集成和无障碍功能,GPUI-CE 和 Zed 正在分开走。crispy-addison 的评论有 3 分,写他们团队给 gpui-ce 补过无障碍补丁,接近 Electron 的水平。

原文链接:https://x.com/svishnevskiy/status/2118081920194203799

rustc 十一月的编译耗时

这篇是 Nicholas Nethercote 写的编译器性能月记,记录他在 Hexcat 工作的第一个月。作者 2026 年 11 月 4 日发到 r/rust,采集时 228 分、17 条评论。上一篇日期是 2026 年 9 月 30 日。

Span 是 rustc 里的数据结构。AST、HIR、MIR 的节点都带一个 span。每个 span 有四个 32 位字段,一共 16 字节:源码位置 lo/hi、宏相关的 context,以及用来降低小改动影响的 parent。多数 span 可以压成三种 8 字节内联格式之一,剩下的放进全局表。

#163857 换了压缩方案。增量编译里需要 intern 的 span,从旧方案的 20%–40% 降到大约 1%。非增量编译通常低于 0.1%。context 在 intern 之后也能内联存放。一批基准的指令数下降,最好的情况超过 3%,周期数下降更多。增量编译的改进更大。

#163971 由 Josh Triplett 提交,顺着新表示做了几处 span 操作的微优化。最好的情况指令数下降超过 2%。

#163628 在查询 parent span 的哈希表前面加了一条单条缓存。最好的情况指令数下降超过 4%,主要落在增量编译。

#164291 试过用 pattern type 给 Span 留 niche,让 Option<Span> 和 Span 一样大。能编过。代码里 Option<Span> 不多,性能没有上去。作者放弃了这个改动。

新 trait solver 这边有三个 PR:#163981、#164234、#165160,针对 Diesel。新 solver 在 Check Full 上的指令数开销,从旧 solver 的 1.49 倍降到 1.16 倍。typenum 和 nalgebra 也有改进。

#164484 由 Takayuki Maeda 提交,给元数据加了稀疏编码。指令数略增。周期数和墙钟时间基本持平。元数据体积最多降 37%。峰值内存最多降 7%。

2026-09-28 到 2026-11-02 的墙钟时间比较里,达到 relevant 阈值的结果有 236 项改进,分布在 45 个基准上。回退有 4 项,分布在 3 个基准上。把低于方差阈值的结果也算进去,平均墙钟时间下降 2.85%,平均峰值内存下降 4.46%。

从 2026-01-01 算起的指令数比较有 561 项测量。560 项改进,1 项回退。改进里第二差的是 3.10%。这个观察来自 Matyáš Racek。

原文链接:https://nnethercote.github.io/2026/11/04/how-to-speed-up-the-rust-compiler-in-november-2026.html

systemd 接受用 Rust 写程序

这是 Amutable 的一篇说明,写 systemd 合并了可选的 Rust 支持。对应 PR 是 https://github.com/systemd/systemd/pull/44324 ,GitHub 用户 brauner 提交,状态是 Merged。eszlari 2026 年 11 月 4 日把文章发到 r/rust,采集时 92 分、15 条评论。

PR 写,变的是程序可以用 Rust 写。libsystemd-shared、libsystemd,以及 NSS 和 PAM 模块继续用 C。Rust 程序和 C 程序一样,动态链接 libsystemd-shared。Rust 代码用 core。不用 std,不用 alloc crate,也没有外部 crate。

这个选项默认 auto。需要 rustc >= 1.85,bindgen >= 0.71.1。PR 写,这正是 Debian 13 自带的版本。bindgen 0.72.0 会被拒绝,因为它生成的代码编不过。auto 在找到工具链时启用。-Drust=enabled 在找不到时直接失败。还需要 meson 1.4.0,用来接 rust 模块的 bindgen()。更老的 meson 上,-Drust=auto 会自己关掉。交叉编译还没做。

构建走 meson,不走 cargo。溢出检查在所有构建类型里打开。panic=abort。警告只在 --werror 时当成错误。

文章把支持分成两类。叶子组件是单个二进制,项目接受。根组件是把 Rust 放进 libsystemd-shared.so,目前不接受。文章写,根组件要等 Rust 有一等的共享库支持。systemd 现在有 180 个以上的小二进制。静态链接会让共享库和很多二进制带上重复的 Rust 代码。

文章列了几条约束。C 和 Rust 二进制在解析选项、显示帮助、输出错误上用同一套行为。路径查找继续用 systemd 自己的 chase*(),基于文件描述符。分配失败按可失败处理,项目提供自己的分配器 crate。已有 C 代码不会为了换语言去重写。Rust 仍然是可选项。没有 Rust 的 systemd 继续可用。

文章还写,Rust 1.100 里有一处改动会弄坏刚合并的 Rust 支持。rust-lang/rust#164855 很快把它回退了。

原文链接:https://amutable.com/blog/systemd-loves-rust

benchfmt.rs 接上 Go 的 benchstat

benchfmt.rs 是一个零依赖的 Rust 基准运行器,也能把 Criterion 的结果转成 Go benchstat 能读的格式。仓库在 https://github.com/bwplotka/benchfmt.rs 。kibwen 2026 年 11 月 4 日把文章发到 r/rust,采集时 8 分、0 条评论。

它补了 /key=value 分组、每次操作的分配字节 B/op、分配次数 allocs/op,以及 pprof。仓库还带 Criterion 和 libtest 转换器,可以直接输出 Go 的 benchfmt。

文章用两段解码代码做对照。DecodeVarints 是 36 行的无符号 LEB128 解码。样本 varints_2000.bin 有 4,798 字节、2,000 个 uint64,写入预分配切片,堆分配为 0。DecodeRemoteWrite2 解 Snappy 压缩的 Prometheus Remote Write 2.0 请求体。2,000 条 series 的样本未压缩 244.9 KiB,Snappy 后 57.0 KiB。

机器是 24 核 Intel Xeon 2.20GHz。Go 1.26.8,Rust 1.99.1。每个基准跑 6 轮,每轮 2 秒,-cpu 2。Go 的 DecodeVarints 是 8,514 ns/op、563.52 MB/s、0 B/op、0 allocs/op。文章写,Rust 在 DecodeVarints 上快 37.16%,5.36 µs 对 8.54 µs。2,000 条 series 的 Remote Write 解码,benchstat 里 Rust 快 17.68%。

分配计数给出另一组数。2,000 条 series 时,Rust 的堆分配次数少 14.55%,16,490 对 Go 的 19,297。堆字节多 30.98%,2.05 MiB 对 1.57 MiB。200 条 series 时,Rust 的堆字节多 42.59%,271.9 KiB 对 190.7 KiB。文章写,Go 的 protoc-gen-go 生成指针切片,嵌套结构体单独分配。Rust 这边 88.4% 的分配字节来自 prost 里 Vec 按 2 倍扩容。

Snappy 这一段,Go 的 x86 汇编 snappy.Decode 大约 0.12 ms/op。纯 Rust 的 snap 大约 0.18 ms/op。Remote Write 整段解码里,Go 仍然更慢。文章把差额记在 runtime.mallocgc 和 GC assist 上。

原文链接:https://www.bwplotka.dev/2026/rust-microbenchmarks-benchstat/


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页