Lobsters | 原文链接 | 2026-09-01 收录

RangeFrom 第二篇:我为何认为 Rust 该迭代器设计有问题

来源: erk.dev — 2026-08-30

概述

Rust 的 RangeFrom(n..)迭代器看似简单,作者却从五个预期出发逐一揭示其设计缺陷:溢出时机导致最终值可能被跳过、溢出后可能产生范围外的值、不同实现 Step 的类型溢出行为不一致(有的 panic、有的回绕、有的饱和)、甚至可能永不递增。他通过实测列出 7 种整数/枚举类型在 Debug 与 Release 下的三种迥异行为,认为这些语义混乱是个「foot gun」。作者主张溢出时迭代器应返回 None 并改用 Step::checked_forward,并提议用 enumerate_with 方法替代 zip(1..) 的惯用法。

核心要点

金句

这个迭代器在 Debug 与 Release 下的行为截然不同,是一把语义不清的雷。
返回 Lobsters 首页