Rusty thoughts on "Parse, don't validate"
8 hours ago
- 这篇文章回顾了 Rust 中的“解析,不要验证”模式,强调使用类型来强制执行不变性,而不是运行时检查。
- 一个关键的例子是用 NonEmpty<T> 类型替换 Vec<T>,该类型保证非空,消除了重复的 Option 处理(例如,first() 直接返回 &T)。
- 其他 Rust 示例包括用于避免零检查的 NonZero<usize>、用于绝对路径的 AbsPathBuf 以及编码已验证类型的 serde 反序列化。
- 该模式提高了类型安全性、清晰度和性能(例如,由于 niche 优化,Option<NonZeroUsize> 与 usize 大小相同)。
- 像 Python/JS 这样的动态语言通常需要手动验证,而 Rust 的类型系统允许编译时强制执行。