Understanding futures
If we use the std::io::Read
and std::io::Write
traits in our code, we will be able to easily read and write data from I/O interfaces, but every time we do it, the thread doing the call will block until the data is received. Luckily, the great crate ecosystem Rust has brings us great opportunities to improve this situation.
In many programming languages, you can find the concept of not yet available data. In JavaScript, for example, they are called promises, and in Rust, we call them futures. A future represents any data that will be available at some point in the future but may not be available yet. You can check whether a future has a value at any time, and get it if it does. If not, you can either perform some computation in the meantime or block the current thread until the value gets there.
Rust futures not only give us this feature, but they even give us tons of helpful APIs that we can use to improve the readability and reduce the amount of code written. The futures...