Rust 筛选自 74 条资讯

Rust 日报 · 2026-08-08

今日速览

Cargo 的 min-opt-level 提案正式合并,库作者终于能让依赖方自动获得优化构建,不用再靠 README 手动指导。Cloudflare 发布了专为 AI 代理设计的无头浏览器 Kitesurf,底层由 Rust 的 Dioxus Blitz 驱动,把 token 数和上下文窗口放在像素渲染之前。性能方面,GreptimeDB 一个长期未优化的转换函数被重写后快了 10 倍以上,Rust 编写的 Monero 节点 Cuprate 同步速度比官方实现快约 2 倍。社区层面,rust-analyzer 在考虑移除 term search 功能前发起了用户调查,Rust 团队健康峰会则定于 9 月 8 日在蒙特利尔举行。

官方动态

  • RFC 3924 已合并:Cargo 将允许库 crate 声明最低优化级别 — rust-lang/rfcs 合并了 joshtriplett 的 RFC “cargo-hints-min-opt-level”:库 crate 可以通过 Cargo 的 hints 系统声明 min-opt-level(如 [hints] min-opt-level = 2)。背景是 dev profile 默认不优化,某些高性能库在无优化构建下几乎不可用,此前只能靠 README 让用户手动为 [profile.dev.package."..."] 设置 opt-level = 3;新机制让依赖方自动获得优化,顶层 crate 仍可覆盖。RFC 还讨论了未来的 max-opt-level,用于把从 opt-level = 3 获益有限的 crate 降到 2。

  • Rust 团队健康峰会将于 9 月 8 日在蒙特利尔举行 — Rust 项目总监推动举办今年的 Rust Team Health Summit,定于 9 月 8 日、RustConf 2026 的举办地蒙特利尔 Palais des Congrès 举行。峰会为邀请制,议程包括领导力、指导、继任规划、招募和跨团队协作,明确“不是做决策的地方”。组织者提到,几年前的 Rust Leads Summit 曾帮助形成如今重要的“project goals”机制,本次延续这一思路,为团队负责人提供专门交流空间。

  • Rust 社区提案:未来 LLM 政策应优先降低评审者认知负担 — 用户 semmyenator 在 Rust Users Forum 发帖,为 rust-lang/rust 未来的 LLM 政策提出方向。他承认现行政策是保护维护者带宽的必要措施,但认为追加测试套件或文档要求可能反而加重评审负担,形式化的责任追究在匿名开源环境不现实。建议未来政策聚焦快速分流:对机械式回复、重复粘贴 LLM 输出的 PR 可用标准非惩罚性回复立即关闭,评审不必鉴别代码是否由 AI 生成;同时用轻量复选框和“安全港”声明让善意贡献者简单披露 AI 工具的使用。

  • Rust Content Team 盘点:C++ 互操作与安全关键 Rust 的访谈 — Rust 基金会博客介绍 RustWeek 2026 期间 Content Team 与项目成员的访谈。Teor(基金会 C++ 互操作工程师)谈到在 Tor 项目中把 Rust 引入遗留 C 代码库、最终演变为完整分布式系统重写的经历;访谈还披露基金会互操作计划近况:进行问题空间映射、探索“splat”函数重载实验(如何在不破坏 trait coherence 的前提下让 C++ FFI 重载更符合人体工学),以及非正式用户研究发现的链接错误、类型不匹配等常见入门障碍。另一场访谈中,Safety-Critical Rust Consortium 负责人 Pete LeVasseur 讨论了“安全关键”在汽车、航空等领域的含义。

浏览器与基础设施

  • Cloudflare 发布 Kitesurf:为 AI 代理设计的无头浏览器 — Cloudflare 正式发布 Kitesurf,一个完全运行在 Workers 上、专为 AI 代理构建的浏览器,已在 Browser Run 中开放免费 beta。官方称 Chromium 这类引擎为人类设计,内存和计算开销对模型是浪费;Kitesurf 不再关心标签页、主题、扩展,而注重 token 数、上下文窗口、可扩展性和成本,结构化和机器可读内容被放在像素级渲染之前,并把 prompt injection、工具安全纳入威胁模型。据 Reddit 转帖标题,该项目由 Rust 写的 Dioxus Blitz 驱动。

  • celld:自托管的分布式 Durable Objects — celld 把 Cloudflare Workers 的 Durable Objects 模型搬到自托管环境:bucket 充当协调者,没有成员协议、故障检测器和共识,cell 所有权只是 bucket 里一条通过一次原子写声明的记录;内置复制器用 LTX 格式(Litestream 的副本格式)把每个 cell 的 SQLite 状态持续同步到 S3。页面称这是对 Kenton Varda 与 Cloudflare Workers 团队设计的致敬,并坦承自托管不会自动更可靠,只是让故障域明确、可检查。

  • Cuprate:Rust 编写的 Monero 节点同步速度快 2 倍 — Reddit r/Monero 上的同硬件对比显示,Rust 编写的 Monero 节点实现 Cuprate(Kesterite 版本)同步区块链的速度比 monerod 快约 2 倍。Hacker News 也转载了这项对比。

技术与性能

  • 读取一个 Rust 性能 PR:一个函数快 10 倍 — GreptimeDB 作为 Prometheus 的远端读后端,recordbatches_to_timeseries 负责把列式 RecordBatch 转成行式 TimeSeries,这个函数长期未优化。提交者 @lyang24 在 PR #8587 中重写了它,只改动 src/servers/src/prom_store.rs 一个文件;他提供的 CPU profile 显示,300k 序列、4 并发读时该步骤占 36.2% CPU,其中字典物化占 8.9%,而它本身既不碰磁盘也不算账。作者补写的基准显示,改动前 10K 行要 3.7ms、100K 行 44ms,吞吐不到 3M 行/秒;改动后最佳情况快 10 倍以上。该优化已随 GreptimeDB v1.2.0-beta.1 发布。

  • Rust 的 Generativity 模式 — 长文介绍 Rust 中的 generativity 模式,它组合 typestate 与 GhostCell,把原本运行时完成的检查搬到编译期,用于静态要求数据必须来自或引用同一来源。文章以排列组合库为例:组合两个排列需要长度相同、元素唯一等条件,由此引出用类型系统强化所有权的需求。后半部分会讲解该模式的实现原理,并分析 Crystal Durham 的 generativity crate 对它的改进。

  • Tail-Call Interpreters in Rust:不同 VM 调度风格的基准实验 — 作者 Jimmy Ostler 受一篇关于 VM dispatch 的 Scala 文章启发,在 Rust 中实现了多种调度风格并做基准测试。文章先解释尾调用解释:编译器把递归转成跳转,避免分配新栈帧。随后以一个 5 指令栈机为例,对比 switch dispatch、尾调用 dispatch,以及在 Rust 中通过不稳定特性 explicit_tail_calls 用 become 显式请求尾调用优化。作者还尝试了更复杂的寄存器机变体,并测量了不同方案的差异。

  • 一篇分析列举 Rust 的主要设计缺陷:语法一致性、核心特性复杂度与系统编程边界 — 作者分三类讨论 Rust 常被批评的设计问题:语法上 ::<>(turbofish)冗长、str/String、Path/PathBuf 命名不统一、分号规则有例外;核心特性上,借用检查器会拒绝一些逻辑上安全的代码(虽然 NLL 已改善,Polonius 预计进一步缓解),async 会“传染”整个项目、Future 在 await 点被取消时缺乏显式处理,且标准库不提供 async runtime 导致 tokio/async-std 生态碎片化;孤儿规则也限制了 trait 实现。文章属于个人分析,将社区长期辩论整理成文。

项目与发布

  • Gitlawb Node:让自托管 git 服务器联邦成 mesh 网络 — 在 GitHub Actions 本周约 11 小时故障后,作者发布了这个开源项目:实例是一台 Axum HTTP 服务器(Postgres 存元数据,裸 git 仓库存对象),通过 libp2p QUIC gossip 互相发现和同步,目标是解决“自托管 forge 是一座孤岛”的问题。身份体系没有账户和密码,Ed25519 密钥对就是身份(did),每次写入都带 RFC 9421 HTTP 签名;配套的 git remote helper 让标准 git clone/fetch/push 直接可用,不用 fork git 或写自定义客户端。README 列了已知局限:私有仓库读权限的强制校验尚未实现,UCAN 链验证/吊销不完整,签名目前证明身份多于完整授权策略。

  • Presse:Rust 写的 PDF 压缩合并 CLI,基准测试比 Ghostscript 快约 7 倍 — 作者对 19 个真实 PDF 对比了 presse press --quality 50 与 Ghostscript /ebook:平均执行时间 0.135 秒对 0.927 秒,平均体积减少 19.2%,而 Ghostscript 因对低于目标 DPI 的图片降采样,平均反而增大 10.2%。实现上把图像按目标质量重编码(跳过 CMYK 图),再配合对象流打包、xref 流压缩等结构性优化;支持批量压缩、合并 PDF 和图片转 PDF。

  • Crubit:C++/Rust 双向互操作绑定生成器 — Crubit 是一个 C++ 与 Rust 的双向绑定生成器,目标是打通两个生态。示例显示:Rust 的共享引用 &Account 映射为 C++ 的 const 引用,&str 映射为 rs_std::StrRef;C++ 的 std::unique_ptr、std::optional 也能暴露给 Rust 使用。官方文档提供从 C++ 调用 Rust、从 Rust 调用 C++ 的完整 walkthrough,并附生成的绑定代码快照。

  • TrailBase 0.32:Firebase 替代品的 Rust 单文件后端 — TrailBase 是开源的 Firebase 式后端,提供类型安全 REST API 和变更订阅、认证、多数据库、WebAssembly 运行时、地理空间支持和管理界面,打包为单个可执行文件,基于 Rust、Wasmtime 与 SQLite(现已支持 Postgres)。v0.32 新增:WASM 组件可向管理界面注册仪表盘,并新增组件浏览器;Rust 组件通过跨请求池化状态使吞吐量提升 4 倍;支持用户名作为邮箱之外的身份标识;新增匿名账户并可在之后升级为正式账户;备份 UI 和滚动备份。

  • Arxid:带密钥的可逆 ID 混淆库 — Arxid 是一个用 ARX-Feistel 网络做可逆置换的 Rust crate,把 40 位顺序整数映射成 7 字符 base62 代码,用于混淆 URL 中的自增 ID;相比用 HMAC-SHA256 做轮函数的同类实现快约 16 倍。它 no_std、全局禁 unsafe,轮数 4 由严格雪崩效应测量得出,并附带一份冻结规范和 61 个规范测试向量,保证各语言移植版本字节一致。作者明确:它不是加密、不是 MAC、未审计,只阻止随意枚举,不替代访问控制。在论坛讨论中他也承认,如果本来就会持久化 ID 映射,直接用随机数或 UUID 更简单;Arxid 针对的是不想维护映射的场景。

  • decimal-bytes:面向数据库存储的任意精度十进制 crate — 作者发布 decimal-bytes,为数据库存储提供三种十进制类型:变长任意精度 Decimal(最大 131,072 位)、固定 8 字节的 Decimal64(精度 ≤16 位、内嵌 scale)和 Decimal64NoScale(精度 ≤18 位、外部 scale)。与 rust_decimal、bigdecimal 相比,它的序列化字节可按字典序直接比较大小,无需反序列化,适合数据库索引和列存储排序。支持 PostgreSQL 的 NaN、±Infinity 特殊值及排序语义。

  • poisoned:解决 Drop 中锁中毒导致双重 panic 的小库 — 作者把常年在各项目里复制粘贴的锁辅助代码发布成了 poisoned crate。它提供一个 LockExt trait,核心是 or_panic():若在 Drop 中锁定已中毒的 Mutex/RwLock,而线程此时正在 unwinding,继续 panic 会导致 panic during panic 并 abort 进程;该方法检测 std::thread::panicking(),在展开时用 PoisonError::into_inner 取回 guard,其余情况照常 panic。另有 or_panic_with 支持惰性构造自定义消息。单一 trait、零依赖。

  • Dosu:修复终端里波斯语/阿拉伯语/希伯来语 RTL 渲染问题的小工具 — 作者为 Kitty、Alacritty、Ghostty 等终端错误渲染波斯语/阿拉伯语文本的问题写了 Dosu:一个位于 shell 和终端之间的 Rust 包装层,按 Unicode 双向算法正确渲染 bidi 文本,无需更换终端。目前支持 Linux/macOS,提供 curl 安装脚本,作者欢迎反馈和边缘案例。

  • 为家具店写的二维 guillotine 切割优化器 — 一个数学背景的开发者分享了他为小型家具店写的 2D guillotine 切割优化器,用于把刨花板/MDF 板材切成订单零件,在保证滑动台锯可加工的前提下最小化废料。项目开源,核心是对基因组表示泛型的遗传算法(GaDecoder trait 复用同一套 GA,支持 SLAS 和 GLAS 两种编码),另配单张板材的精确求解器(基于 Andrianova 等人论文的 DP)和来自 Jukka Jylanki 论文的贪心启发式。多线程版通过每岛独立 PRNG 加同步屏障保证确定性:相同种子和配置总是复现相同结果。CLI 提供 JSON 接口,实际使用中由 Excel VBA 调用,并可导出 AutoCAD 切割图;选择 Rust 是因为 GA 每轮要跑数百万次基因组评估。

  • canora:一个原生紧凑的 Spotify 客户端 — 作者受够了官方 Electron 客户端占用大量内存和 VRAM、且默认不支持 Wayland 分数缩放,于是用自己高度实验性的 UI 框架写了这个原生客户端。作者说明开发中使用了 LLM 辅助编码,但强调不是低质量的 AI slop。

  • Siffra:支持量纲分析的 GPUI 计算器 — 作者受 Soulver、Numi 这类计算器启发,用 chumsky 写自定义解析器、astro_float 做任意精度运算,可以在计算中带上单位做中间换算。目前只在 macOS 上测试过,还没做 Windows/Linux 的平台抽象,作者在论坛征求这两个平台上的帮助。

  • Rsrssr:终端 RSS/Atom 阅读器 — Rsrssr 是一个受 Newsboat 启发的终端 RSS/Atom 阅读器,基于 ratatui、ratatui-image 和 feed-rs 构建。它内置 HTML 渲染器并支持显示图片,提供分层 feed 目录结构,支持合并 feed 去重,还能对条目标题、URL 等运行任意系统命令。作者表示项目有意比 Newsboat 精简,图片支持是最大差别,未来可能加细粒度过滤和 killfile 系统。

  • Μlang:用 macro_rules! 实现的函数式语言 — 有人在论坛展示了一个完全用 macro_rules! 实现的函数式语言 Μlang。从帖子里的代码看,它用显式命令配合 continuation passing style 做求值,支持 repeat、par、define、let_in、加减运算和 de Bruijn 索引,需要 #![recursion_limit = "4096"] 与 macro_metavar_expr 特性。作者说这个项目让他学到宏如何按字面前缀匹配、如何在宏里用 CPS,也意识到宏和 C 宏不是一回事。

  • Zaivern Code:在 Rust 桌面应用里同时指挥多个 AI 编码代理 — 面向“Claude Code 写实现、Codex 测试、Gemini CLI 写文档”的多代理工作流,这个 Apache-2.0 工具(最新 v0.7.0)把 29 种 AI CLI 的启动预设收进一个 Tauri 界面,可向所有代理广播同一条指令、统一审批和监控,也能从手机查看进度并批准操作。安全设计上默认关闭自动批准,权限提升必须手动确认,退出时终止子进程以防留下孤儿进程。它不捆绑任何 AI 工具,需要用户自行安装并登录。

  • Sovereign Engine:Rust/Tauri 写的本地优先“意图引擎” — Show HN 项目,把用户的意图转成动态生成的代码块,Rust/TypeScript 编译器的输出会被喂回上下文窗口形成“编译器反馈循环”用于自我修复,代码执行后随即剪枝清除,避免运行时膨胀。设计目标是运行时逻辑零云锁定(local-first),目前处于早期阶段。

  • Mdpager 0.1.0:Unix 风格的 Markdown 分页器 — 目标是让 mdpager README.md 用起来和 less 翻普通文本一样。依赖很少,只有 pulldown-cmark、unicode-width 和 libc;作者希望有不同终端模拟器的用户帮忙测试。

  • PZEUDO 0.0.2-dev.1:Rust 深度学习框架的地基更新 — 新版本加入 Grad/NoGrad 模式、面向无梯度张量的 GradStorage、Xavier 和 He 权重初始化、ModelBuilder,以及 SGD-Momentum、AdaGrad、RMSProp、Adam 四个优化器,并支持参数保存与加载。项目仍处于 0.0.2-dev 的早期开发阶段。

  • Langgraph4rust v0.2.0:受 Python LangGraph 启发的 Rust 状态化工作流引擎 — langgraph4rust 是一个用 Rust 实现的工作流引擎,设计上借鉴了 Python 的 LangGraph。开发者通过带类型化状态的节点图来描述工作流,引擎负责并行执行和条件路由;0.2.0 版本新增了基于 push 的流式 API,可以实时输出执行事件。项目仍处早期阶段,采用 Apache-2.0 许可证。作者在论坛征求 API 设计反馈,特别是希望用过 Python LangGraph 的用户指出缺失的功能。

社区讨论

  • rust-analyzer 考虑移除 term search — rust-analyzer 维护者 chrefr 在论坛调查用户是否使用 term search 功能,因为团队考虑移除它。term search 的作用是:在已知目标类型时,列出当前作用域里能组合出该类型且通过借用检查的表达式,最初 PR 的例子是在错误位置推荐 self.name(db)、GenericParam::TypeParam(self).name(db) 等候选。投票和评论显示多数人不知道或不用;维护者随后回复,决定暂时不整体移除,只砍掉它与借用检查的集成(因为后者本身要被移除),从函数体推断返回类型的功能保留。

  • 能否从 DynMetadata 取出 vtable 指针 — 有人在论坛问能否把 &dyn SomeTrait 拆成两个 thin *mut c_void 传给 C++,之后再用 std::ptr::from_raw_parts 重组,结果发现 DynMetadata 是不透明结构,没有访问 vtable 指针的 API。编译器开发者 bjorn3 解释,不透明是因为标准库不保证 metadata 一定是单个指针,例如 dyn Foo + Bar 未来可能用两个 vtable;标准库自己跨 FFI 传 Box<dyn Trait> 时,会再包一层成 Box<Box<dyn Trait>>。讨论给出的可行方案需要 transmute 并配合若干断言,作者总结:实践上能做但很脆弱,当前 API 形状有意劝退这种做法。

  • Cargo 功能提案:在输出中把 crate 名称链接到 crates.io — Lynnesbian 在 Rust Internals 提议让 cargo update、cargo add 等命令输出的 crate 名变成 OSC 8 超链接,点击直达 crates.io 页面,方便查看更新日志或不熟悉的依赖。Cargo 已在 #12889 中为 HTML 输出启用 OSC 8,机制可复用;不支持 OSC 8 的终端继续显示纯文本。讨论中 epage 表示支持,kornel 建议链接到版本特定的 crates.io URL,并提醒自定义 homepage 链接容易因域名过期等原因失效。

  • libp2p 实践提醒:ConnectionEstablished 事件并不可靠 — 一个用 Rust + libp2p + Tauri 写了约 2.7 万行代码的开发者分享经验:libp2p 报告已连接、swarm 状态正常、peer 数也对,但 ConnectionEstablished 事件并不总是真的,不能当作连接已建立的依据,他曾为此修了三个星期的 bug。他还提到 libp2p 文档默认读者已经懂 P2P,对新手不友好。项目以 MIT 协议开源。

  • Rust 内存基准测试怎么做 — 有人在论坛问有没有现成的内存基准测试工具,希望同时测内存占用、CPU 实时和 CPU 耗时。回复推荐了 dhat(定位分配来源)和 divan(同时覆盖运行时与内存性能且很易用),还建议用 tcmalloc、mimalloc、jemalloc 等替代分配器重跑基准——有回复称曾靠换分配器大幅降低内存占用。提问者最终采用 divan 的 AllocProfiler,只需加 #[global_allocator] 一行,但有人提醒发布构建里要移除。