Coroutines, Self-Referential Structs, and Pinning 214 Pinning in Rust Improving our example 4-pinning to the rescue Technical requirements The examples in this chapter will build on the code from the previous chapter, so the requirements are the same. The examples will all be cross-platform and work on all platforms that Rust ( https:// doc. rust-lang. org/stable/rustc/platform-support. html ) and mio (https:// github. com/tokio-rs/mio#platforms ) support. The only thing you need is Rust installed and this book's Git Hub repository downloaded locally. All the code in this chapter can be found in the ch09 folder. To follow the examples step by step, you'll also need corofy installed on your machine. If you didn't install it in Chapter 7, install it now by going into the ch07/corofy folder in the repository and running the following: cargo install--force--path. We'll also use delayserver in this example, so you need to open a separate terminal, enter the delayserver folder at the root of the repository, and write cargo run so that it's ready and available for the examples going forward. Remember to change the port number in the code if you have to change what port delayserver listens on. Improving our example 1-variables So, let's recap what we have at this point by continuing where we left off in the previous chapter. We have the following: A Future trait A coroutine implementation using coroutine/await syntax and a preprocessor A reactor based on mio::Poll An executor that allows us to spawn as many top-level tasks as we want and schedules the ones that are ready to run An HTTP client that only makes HTTP GET requests to our local delayserver instance It's not that bad-we might argue that our HTTP client is a little bit limited, but that's not the focus of this book, so we can live with that. Our coroutine implementation, however, is severely limited. Let's take a look at how we can make our coroutines slightly more useful. The biggest downside with our current implementation is that nothing-and I mean nothing-can live across wait points. It makes sense to tackle this problem first.