Lobsters | 原文链接 | 2026-09-28 收录 · 热度 39

关于「解析,而非校验」的 Rust 思考

来源: eli.thegreenplace.net — 2026-09-26

概述

Eli Bendersky 复盘 Alexis King 那篇经典文章「解析,而非校验」(Parse, don't validate)在 Rust 中的实践:与其在运行时校验一个可能为空的值、再让每一处调用都处理不可能发生的情况,不如让类型系统承载不变量。他依次考察了 NonEmpty、uutils 的 Pipeline、rust-analyzer 的 AbsPathBuf、camino 的 Utf8PathBuf、NonZero 以及 serde 反序列化这些真实例子,说明如何通过类型精化把校验前移,使后续代码不必再检查。

核心要点

金句

核心问题在于,Vec 本质上就是一个可以为空的类型:你可以在相关代码上到处带上「这个不会为空,拉钩保证」的注释,但它不会被任何东西形式化地检查。
← 返回 Lobsters 首页