3 min read

Last week, Stjepan Glavina, a Rust programmer at Ferrous Systems, announced that the ‘async-std’ library has now reached its beta phase. This library has the “looks and feels” of Rust’s standard library but replaces its components with their async counterparts.

The current state of asynchronous programming in Rust

Asynchronous code facilitates the execution of multiple tasks concurrently on the same OS thread. It can potentially make your application much faster while using fewer resources as compared to a corresponding threaded implementation. Speaking of Rust’s asynchronous ecosystem, we can say that it is still early days. The standard library’s Future trait was recently stabilized and the async/await feature will soon be landing in a future version.

Why async-std is introduced

Rust’s Future trait is often considered to be difficult to understand, not because it is complex but because it is something that people are not used to. Stating what makes Futures confusing, the book accompanying the ‘async-std’ library states, “Futures have three concepts at their base that seem to be a constant source of confusion: deferred computation, asynchronicity and independence of execution strategy.

The ‘async-std’ library, together with its supporting libraries, aims to make asynchronous programming easier in Rust. It is based on Future and supports a set of traits from the futures library. It is also designed to support the new async programming model that is slated to be stabilized in Rust 1.39.

The async-std library serves as an interface to all important primitives including filesystem operations, network operations and concurrency basics like timers. In addition to the async variations of I/O primitives found in std, it comes with async versions of concurrency primitives like Mutex and RwLock. It also ships with a ‘tasks’ module that performs a single allocation per spawned task and awaits the result of the task without the need of an extra channel.

Speaking about the learning curve of async-std, Glavina said, “By mimicking standard library’s well-understood APIs as closely as possible, we hope users will have an easy time learning how to use async-std and switching from thread-based blocking APIs to asynchronous ones. If you’re familiar with Rust’s standard library, very little should come as a surprise.

The library received a mixed reaction from the community. A user said, “In fact, Rust does have a great solution for non-blocking code: just use threads! Threads work great, they are very fast on Linux, and solutions such as goroutines are just implementations of threads in userland anyway…People tell me that Rust services scale up to thousands of requests per second on Linux by just using 1:1 threads.

A Rust developer on Reddit commented, “Looks good. I’m hoping we can soon see this project, the futures crate, async WGs crates and Tokio converge to build unified async foundations, reduce duplicated efforts (and avoid seeing dependencies explode when using several crates using async together). It’s unclear to me why apparently similar crates are popping up, but I hope this is just temporary explorations of async that will merge together.

Check out the official announcement to know more about the async-std library. Also, check out its book: Async programming in Rust with async-std.

Read Next

Rust 1.37.0 releases with support for profile-guided optimization, built-in cargo vendor, and more

Introducing Abscissa, a security-oriented Rust application framework by iqlusion

Introducing Ballista, a distributed compute platform based on Kubernetes and Rust