来,过路人,请坐到我身边来,听老衲讲一讲我对 Rust 过分要求的故事。介绍想象一下,你打算用Rust创建一个新库。这个库的唯一功能就是封装一个你需要的公共API, 比如Spotify API或者ArangoDB之类的数据库。这并不是造火箭,你也不是在发明什么新东西或者处理复杂的算法,所以你认为这应该相对简单直接。你决定用异步方式实现这个库。你的库中大部分工作都涉及执行HTTP请求,主要是I/O操作,所以使用异步是有道理的(而且,这也是Rust圈里现在的潮流)。你开始编码,几天后就准备好了v0.1.0版本。当cargo publish成功完成并将你的作品上传到crates.io时,你暗自得意地想: "不错嘛"。几天过去了,你在GitHub上收到了一个新通知。有人提了一个问题:我如何同步使用这个库?我的项目不使用异步,因为对我的需求来说太复杂了。我想尝试你的新库,但不确定怎么轻松地使用它。我不想在代码中到处使用block_on(endpoint())。。我见过像reqwest这样的 crate导出一个blocking模块,提供完全相同的功能,你能不能也这么做?从底层来看,这听起来是个很复杂的任务。为异步代码(需要像tokio这样的运行时、awaiting future、pinning等)和普通的同步代码提供一个通用接口?好吧,既然他们提出请求的态度很好,也许我们可以试试。毕竟,代码中
...
继续阅读
(103)