如何最惯用地在 Rust 中为 no_std 平台编写异步 IO 库?

dfl*_*str 5 embedded io rust rust-no-std

我正在构建一个在平台上使用的库,no_std该库允许您执行一些常见的与网络相关的 IO,例如发出 HTTP 请求或读取/写入 Websockets。

现在,我希望这个库成为一个行为良好的公民,以便它可以轻松地包含在其他no_std应用程序中。因此,我想通过实现合理的特征等来打包该库。该库将允许我不必使用alloc,因此支持 non-alloc no_std将是理想的选择。

这些是我看过的选项:

  • embedded_haland nb:这些板条箱的级别确实很低(没有像ReadWrite或任何更高级别的通用特征)并且异步模型似乎与async/await
  • genio// core_io...:这些根本不支持异步IO。
  • embrio:看起来很有趣,但似乎使用它会将我束缚在一个特定的环境中,从而使该库的可移植性较差。
  • tokiov0.2.x:我很想使用它,但no_std根本不支持。
  • futures::iov0.3.x:同样,很想使用它,但没有no_std支持。

我应该在 no_std 环境中使用哪种异步 IO 抽象?如果现在没有好的选择,我应该为未来下注/提供帮助?

sil*_*asp 1

看看embassy-rs。有一个非常活跃的社区。目前,embassy-rs 支持;

  • 硬件抽象层
  • 时间
  • 联网
  • 蓝牙
  • 劳拉
  • USB
  • 糖尿病足

全部建立在 Rust 异步之上。还有一些非常好的宏可以为任务生成静态缓冲区,因此您不需要分配。