Open Timmmm opened 7 months ago
I suppose they probably work with #6510.
But it sounds like we could have a different implementation of this for wasm.
@Timmmm Are you asking about this in terms of getting tokio
to support wasip2
down the road where a Pollable
could be used by the tokio guest to recognize when data was available on stdin? Or do the semantics of wasip1
already provide a way to create a Future
that is tied to the state of the stdin being ready to read?
Tokio's Stdin has to support the AsyncRead
trait and I don't see how that would be done given just the original WASI definition which is now called WASI Preview 1. But I'm no expert and almost asked about this on the ByteAlliance Zulip channel but thought I would ask here first.
Ah, yes, please be aware that we only support preview 1 right now. So if this is a feature for some newer version of wasm, then this cannot happen until after #6323.
Ah yeah I didn't notice this is only in preview 2. Guess it will have to wait!
Yes, I'm eagerly watching how pollables are added to tokio for Preview 2 myself. I think a lot of the current-thread runtime can be made to work within a Wasm Component environment.
The
wasm32-wasi
target does support stdio, however Tokio implements stdin/stdout by spawning a new thread and using blocking IO:I did try patching Tokio to allow
io-std
anyway, and as you would expect you get this error:It doesn't give a useful backtrace, but I don't think we need one. WebAssembly doesn't support threads yet so this clearly isn't going to work.
However if you look at the WASI spec, stdin/stdout are
streams
which can return apollable
object which I think means they can work natively with Rust's async support (though I'm a Rust async neophyte so I may be wrong).