主要观点:作者分享了一段困扰自己数周的 Rust 代码片段,一年前虽已用 Rust 编程三年但未接触过这类代码,在 Zed 代码库中看到了真实世界的 Rust 代码,如上述片段展示了多种 Rust 特性,包括defer
利用Drop
实现延迟执行代码、async
函数与tokio::select!
宏隐藏的 Future 等待、anyhow::Result
等,初看代码普通,细看却发现运作方式不同,作者感慨用 Rust 三年写了 15k 行代码的编译器和多个项目,却从未接触过此类代码,觉得语言很神奇,能在一个角落舒适生活多年而不知其他角落的情况。
关键信息:
- 代码片段展示了异步函数
send_request
,包含defer
、tokio::select!
等特性。 defer
通过Drop
实现延迟执行代码,Deferred
结构体在被丢弃时执行任务。- 函数整体为
async
,reqwest::get
返回的是需要等待的 Future,tokio::select!
宏隐藏了这一点。 - 返回类型中的
Result<String>
是anyhow::Result
,可将任何内容映射到其中。
重要细节: - 代码中
finish
在请求未超时时增加metrics.requests
,超时则调用finish.abort()
。 - 作者用 Rust 三年,写了 15k 行代码的编译器和多个项目,但未接触过此类代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。