---
title: Clippy warning 作为 Rust 学习路径
date: '2021-09-22 16:54:33'
draft: false
summary: Clippy 的价值不只在挑错，它会逼你在真实代码里持续面对 Rust 的语言细节和习惯用法。
slug: rust-clippy-warnings-as-learning-path
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/Kzmi96Knu
tags:
- rust
- clippy
- learning
- open-source
topics:
- software-engineering
type: post
---

升级 `Rust` toolchain 之后，修一下午 warning 这件事看起来有点枯燥，但我越来越觉得，这其实是学习 `Rust` 很实用的一条路径。

像这次新增的 `needless_collect` 检查，就很典型。

它会提示你：前面把一个 `iterator` 处理完后先 `collect` 成集合，后面又把它重新转回 `iterator` 使用。很多情况下，这个中间 `collect` 根本没必要。

因为 `Rust` 的 `iterator` 本来就是惰性的，中间多做一次 `collect`，往往既浪费内存，也拖性能。

这种问题如果只看几行代码，有时不明显；尤其真实项目里，中间逻辑一拉长，开发者很容易意识不到自己已经无意间把 lazy pipeline 打断了。

所以这类 warning 很有价值，它不是在吹毛求疵，而是在逼你重新理解语言真正依赖的抽象边界。

当然，也不是所有提示都能直接照抄。

有些场景里，`clippy` 会提示你把重复代码提取出来，或者提前合并分支。但如果对应变量已经被 `move` 走了，你按表面提示改，反而会编译不过。

这就很能说明问题：

- `clippy` 很有帮助
- 但它给的是模式建议，不是完整语义证明
- 真正把问题改对，还是得回到所有权、生命周期和执行路径本身

所以我一直觉得，`Rust` 新手到了某个阶段后，如果还只是刷算法题，其实语言训练会很有限。算法题当然能练语法，但场景太干净，碰不到真实项目里那些所有权、迭代器、trait、错误处理交织在一起的问题。

而去开源项目里修 `clippy warning` 就很合适：

- 贡献门槛不算太高
- 项目维护者一般也欢迎
- 每个 warning 都对应一个具体语言场景
- 同时还能顺手熟悉项目源码结构

比起修 typo，这种贡献更有技术含量；比起一上来接复杂 feature，又更适合作为练手入口。

所以如果有人问我 `Rust` 学到中段之后怎么继续进步，我会很倾向推荐这条路：找开源项目，修 warning，用真实代码逼自己理解语言。

<!-- WEIBO_MEDIA_START -->
## 原微博中的媒体

![](./weibo-4684271731608248-1.jpg)

![](./weibo-4684271731608248-2.jpg)

![](./weibo-4684271731608248-3.jpg)

![](./weibo-4684271731608248-4.jpg)

![](./weibo-4684271731608248-5.jpg)
<!-- WEIBO_MEDIA_END -->
