That's actually not too bad! If we have the blocking!() macro, we don't really need async versions of any of the standalone functions in the std::fs module. 6/13
-
Show this thread
-
What about the File type, though? In the vast majority of uses, files are only read or only written. Seeking is not a very common operation - in fact, I'd say seeking is a vestigial function that is now superseded by read_at()/write_at() functions. 7/13
2 replies 0 retweets 1 likeShow this thread -
We need an adapter that takes anything implementing Read/Write and converts it into an async type implementing AsyncRead/AsyncWrite. Let's create functions reader()/writer() that look like this. 8/13pic.twitter.com/xY3aMJeyY1
1 reply 0 retweets 0 likesShow this thread -
When reader()/writer() is called, a blocking task gets spawned that reads/writes data from the file and pipes it through an async channel. Here's how we'd convert a file into an async reader. 9/13pic.twitter.com/OvlQ6qZZwk
1 reply 0 retweets 2 likesShow this thread -
Now we don't even need tokio::io::{stdin,stdout,stderr} anymore. Functions reader()/writer() can easily do asynchronous standard input/output. 10/13pic.twitter.com/iubNUkWfTX
1 reply 0 retweets 0 likesShow this thread -
There's just one more async adapter... Similarly to reader()/writer(), let's create iter() that converts any blocking iterator into an async stream. 11/13pic.twitter.com/4rU0eYFAXg
1 reply 0 retweets 1 likeShow this thread -
Function iter() comes in handy when listing files in a directory, for example. This is how we can list files asynchronously using the standard APIs from std::fs. 12/13pic.twitter.com/PN8NDo0KWN
1 reply 0 retweets 3 likesShow this thread -
There you go. If we have blocking!(), reader(), writer(), and iter(), there's really no need to have modules like tokio::fs or even tokio::io. We can just use std::fs and std::io and apply async adapters to them! 13/13pic.twitter.com/Sym6Qbjnlf
2 replies 0 retweets 5 likesShow this thread -
I forgot to mention: The blocking!() macro already exists and was first introduced in Bastion and it's really nice! https://docs.rs/bastion/0.3.5-alpha/bastion/macro.blocking.html …pic.twitter.com/rQjdrwX2ZZ
1 reply 2 retweets 8 likesShow this thread -
Replying to @stjepang
An excellent thread. Would it mean we might have a way to write async runtime agnostic libs ? Runtime Interop is IMO the major struggle right now ^^
1 reply 0 retweets 1 like
Not yet, but this get us one step closer to that goal, I think.
-
-
Replying to @stjepang @o0ignition0o
Is it standalone anywhere? I am extremely interested
1 reply 0 retweets 0 likes -
Or actually I guess I can just do tokio::task::spawn_blocking for my purposes.
0 replies 0 retweets 1 like
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.