#Rust
4 篇
Rust 1.96 的 Range 类型:把 Copy 从迭代器手里拿回来
Range 一直不是 Copy,因为它自己实现了 Iterator。Rust 1.96 稳定了一套新的 Range 类型:只实现 IntoIterator,于是可以 Copy。这篇讲这个区分为什么重要,以及它什么时候会改掉你熟悉的语法。
Rust 的 Result 里,上下文要补在出错的那一层
`?` 会把错误原样上抛,不告诉你在哪一步失败。底层返回可匹配的结构化错误,应用层用 Context 补上「在做什么」和输入参数,日志里才有能定位的那一行。
什么时候该把一个 crate 拆成 workspace
拆 workspace 的触发条件是编译时间和依赖边界,不是目录好不好看。三个信号成立才拆,否则只是把一次编译换成多个包的管理成本。
结构化日志不是把 println 换成 tracing::info
拼接字符串的日志只能被人眼读,带字段的日志才能被查询和聚合。字段、span、级别、以及别在热点路径上格式化,是四个真正要做的决定。
