Vec 和 String 的枚举优化不只靠空指针
这是 kmdreko 2026 年 10 月 17 日发在 r/rust 的说明,讲 Vec 和 String 的枚举布局。采集时 129 分、24 条评论。
作者写,空指针 niche 可以让 Option<Vec<_>> 和 Vec<_> 占用同样的大小。作者原先以为,再增加几个变体就得单独放 discriminant。作者给出的例子含有一个 String 变体,以及 B、C、D、E 四个单元变体。作者在较新的编译器上测得 size_of::<String>() 和这个枚举都是 24。作者写,这个结果从 1.76.0 起可以观察到;作者查过 1.76.0 的发布说明,里面没有写到这一点。作者给出的最近公开说明是 https://stackoverflow.com/questions/79131922 。
Rust 1.99.1 的 alloc 源码把 capacity 定义成 type Cap = core::num::niche_types::UsizeNoHighBit,地址是 https://doc.rust-lang.org/1.99.1/src/alloc/raw_vec/mod.rs.html#39 。旁边的安全注释写,cap 必须小于等于 isize::MAX。评论里 _ChrisSD(61 分)写,相关关键词是 pattern types,标准库用 UsizeNoHighBit 这类包装类型,避免依赖还没稳定的语法,并给出 https://github.com/rust-lang/rust/blob/158f79d5c24d262f820fa45da96e7b77bc29a338/library/core/src/num/niche_types.rs#L116 。zdimension 写,该文件里的 pattern type 写法出现在宏参数中,宏会生成运行时检查。Sharlinator(42 分)写,希望以后有 u63、u31 这类类型;LLVM 支持任意位宽整数,pattern types 以后也可能稳定。
原文链接:https://www.reddit.com/r/rust/comments/1x8cj45/psa_enum_optimization_for_vecstring_can_use_the/
通往 iroh 1.0
这篇文章是 n0 团队的回顾,标题是 The road to iroh 1.0,记录 iroh 从 IPFS 实现走到稳定线格式的过程。kibwen 在 2026 年 10 月 17 日把它发到 r/rust,采集时 66 分、10 条评论。
iroh 是按公钥拨号的 QUIC 点对点连接库,仓库在 https://github.com/n0-computer/iroh ,仓库里有 Apache-2.0 和 MIT 两份许可证。采集时 GitHub 有 12,751 个 star。crates.io 当前版本是 1.3.0,发布于 2026 年 9 月 28 日;1.0.1 发布于 2026 年 6 月 29 日。总下载 3,367,195 次。文章写,1.0 表示线格式和 API 稳定,扩展点还在。
文章写,项目做了四年,代码没有使用 LLM。起点是 Rust 版 IPFS,目标是手机这类资源受限设备。blob 传输先做成 krakensync,内容寻址只用 BLAKE3。联网在两天内用 quinn 接上 QUIC。并行的 Delta Chat 聊天记录迁移需要可恢复的大文件传输,IPFS 兼容实现满足不了磁盘和依赖体积约束。团队因此停止兼容现有 IPFS 实现,旧代码留在 beetle。端点身份改成 Ed25519 公钥,传输只留 QUIC。
打洞方案参考 Tailscale,打不通时走 relay。地址查找后来用 pkarr 的格式,也可以直接走 BitTorrent mainline DHT。范围随后收窄成按端点 ID 直连,blob、gossip、docs 拆到独立 crate。0.35 作为长期稳定版,另开 canary 系列。为了让 QUIC 知道多条路径,团队 fork 了 quinn,实现叫 noq。站点写,iroh 已经在数十万台设备上跑生产。
原文链接:https://www.iroh.computer/blog/the-road-to-iroh-1-0
Apalis 1.0.0 稳定
Apalis 是 Rust 的后台任务和消息处理库,仓库在 https://github.com/apalis-dev/apalis ,许可证 MIT。作者 geoffmureithi 在 2026 年 10 月 17 日把 1.0.0 发到 r/rust,采集时 12 分、5 条评论。
crates.io 上 1.0.0 的发布时间是 2026 年 10 月 12 日,总下载 1,319,278 次。GitHub 采集时有 1,439 个 star。介绍博客的日期是 2026 年 10 月 16 日。发布说明在 https://github.com/apalis-dev/apalis/releases/tag/v1.0.0 。
1.0 把原来的单体 Backend trait 拆开。Backend 负责轮询、心跳和中间件。TaskSink 负责入队。Expose 负责队列、worker、任务过滤和指标。BackendFactory 负责多个 worker 共享连接。Worker 改成类似 Stream,需要被唤醒才消费任务。作者写,这样可以减少长轮询。
顺序工作流提供 and_then、filter_map、fold、repeat_until、delay_for、delay_with。DAG 工作流里没有依赖的节点并行执行,图在运行前做校验,可以打印成 DOT。1.0 还加上任务幂等、手动重试,以及 MonitorContext 和 TaskContext,可以从外部取消任务和 worker。新增的后端包括 RSMQ、NATS 和 PgMQ。已有后端包括 Redis、PostgreSQL、SQLite、MySQL 和内存。评论里 chicagoderp 写,自己的设计制造软件已经用 Apalis 跑了一年多。
原文链接:https://apalis.dev/blog/introducing-v1-2026-10-16
哪些研究够得上 Rust 的下一代
这是 Dyson8192 2026 年 10 月 17 日发在 r/rust 的提问,问哪些编程语言研究已经成熟到可以进入以后的 Rust,或进入遵循类似原则的后继语言。采集时 136 分、62 条评论。
帖子写,Rust 早期的一条原则是只采用已经经过验证的研究。作者在回复里写,这里的 2.0 指后继语言,不指按 SemVer 发布 Rust 2.0。
SirKastic23 的评论有 117 分,点名 linear types、algebraic effects 和 session types,并提到 Vale 设计者写过 linear types,以及 Rust 里讨论过的 must-move types。JoJoModding 的评论有 15 分,写 linear types 和并发、递归数据类型放在一起,还没有像 RustBelt 那样清楚的模型;leakpocalypse 说明,带 Rc 的 Rust 不能同时保证类型一定会被 drop。vlovich 的评论有 110 分,提到 Valen 的 linear types 和 group borrowing。Bassfaceapollo 的评论有 33 分,写自己在看 Hylo、Koka、Austral,并加上 Valen。seg_lol 贴了用 Rust 实现的语言 Par,仓库在 https://github.com/par-team/par-lang 。
原文链接:https://www.reddit.com/r/rust/comments/1x80208/research_that_has_matured_enough_for_rust_20/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论