我最惯用的方法是如何在Rust中为非标准平台编写异步IO库?

我最惯用的方法是如何在Rust中为非标准平台编写异步IO库?,io,rust,embedded,rust-no-std,Io,Rust,Embedded,Rust No Std,我正在构建一个用于no_std平台的库,该平台允许您执行一些常见的网络相关IO,例如进行HTTP请求或从WebSocket读取/写入 现在,我希望这个库是一个行为良好的公民,这样它就可以轻松地包含在其他no_std应用程序中。因此,我希望通过实现合理的特性等来打包库。库将允许我不必使用alloc,因此支持非allocno\u std将是理想的选择 以下是我看过的选项: embedded_-hal和nb:这些板条箱的级别非常低(没有像读和写或任何更高级别的通用特性),异步模型似乎与异步/等待不兼

我正在构建一个用于
no_std
平台的库,该平台允许您执行一些常见的网络相关IO,例如进行HTTP请求或从WebSocket读取/写入

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

以下是我看过的选项:

  • embedded_-hal
    nb
    :这些板条箱的级别非常低(没有像
    或任何更高级别的通用特性),异步模型似乎与
    异步/等待
    不兼容
  • genio
    /
    核心io
    /…:它们根本不支持异步io
  • embrio
    :似乎很有趣,但使用它似乎会将我与一个特定的环境联系在一起,从而降低库的可移植性
  • tokio
    v0.2.x:我很想使用它,但根本没有
    no_std
    支持
  • futures::io
    v0.3.x:同样,我很想使用它,但没有
    no_std
    支持

在无std环境中应该使用哪个异步IO抽象?如果现在没有好的选择,我应该赌哪一个呢?

Async需要某种运行时。在std环境中,可以使用std库“轻松”创建该运行时。然而,no_std并不像它所指的所有不同的微控制器、微处理器、操作系统以及webassembly那样统一。因此,这实际上取决于您实际想要支持的内容。@Geoxion我假设应该可以实现某种类型的
AsyncWrite
API,而不绑定到特定的执行器。对于执行者来说,似乎已经有一些很好的例子(例如cortex-m、droneos和embrio)cortex-m并不是真正的执行者。。。但我明白你的意思。你能做的就是利用未来的特质。然后,任何支持async await的执行器都将与它兼容。标准的未来特质也适用于libcore@Geoxion这是我上面列出的选项之一,
futures::io
实际上在
no\u std
上不可用。是的,
core::future
futures
通常是可用的,但不是特定于IO的位。