How I want to simplify async filesystem APIs... 1/13
-
-
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
Show 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
Show 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
Show 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
Show 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
Show 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
Show 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
Show this thread
End of conversation
New conversation -
-
-
read_at/write_at are Linux only though. Being able to seek asynchronously is essential for anything requiring random-access reads/writes cross-platform. This is common in for example databases. Calling it "vestigial" doesn't sound quite right. https://doc.rust-lang.org/std/fs/struct.File.html?search=read_at …
-
They're not Linux-only - read_at/write_at exist on all Unix systems, including macOS/iOS/Android/etc. And Windows has similar functions called seek_read/seek_write: https://doc.rust-lang.org/std/os/windows/fs/trait.FileExt.html#tymethod.seek_read … https://doc.rust-lang.org/std/os/windows/fs/trait.FileExt.html#tymethod.seek_write …
- 3 more replies
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.