Rust 棱镜

主要观点:作者分享了一段困扰自己数周的 Rust 代码片段,一年前虽已用 Rust 编程三年但未接触过这类代码,在 Zed 代码库中看到了真实世界的 Rust 代码,如上述片段展示了多种 Rust 特性,包括defer利用Drop实现延迟执行代码、async函数与tokio::select!宏隐藏的 Future 等待、anyhow::Result等,初看代码普通,细看却发现运作方式不同,作者感慨用 Rust 三年写了 15k 行代码的编译器和多个项目,却从未接触过此类代码,觉得语言很神奇,能在一个角落舒适生活多年而不知其他角落的情况。
关键信息:

  • 代码片段展示了异步函数send_request,包含defertokio::select!等特性。
  • defer通过Drop实现延迟执行代码,Deferred结构体在被丢弃时执行任务。
  • 函数整体为asyncreqwest::get返回的是需要等待的 Future,tokio::select!宏隐藏了这一点。
  • 返回类型中的Result<String>anyhow::Result,可将任何内容映射到其中。
    重要细节:
  • 代码中finish在请求未超时时增加metrics.requests,超时则调用finish.abort()
  • 作者用 Rust 三年,写了 15k 行代码的编译器和多个项目,但未接触过此类代码。
阅读 14
0 条评论