When one async fn calls another, Rust builds nested state machines to manage suspension and resumption. The outer future holds the inner one in its environment, and each .await becomes a state transition in a generated jump table.
The article below provides a detailed walkthrough of this transformation, illustrating how high-level async code compiles into low-level control flow and data structures. It covers:
- How each
async fnbecomes aFuturewith explicit states and a poll loop - How nested awaits create layered state machines with captured environments
- How loops translate into back-edges in the generated jump table
- What the resulting assembly looks like, with comments on how the executor interacts with it