experimental

C++ coroutines: Short-circuiting suspension, part 1--Raymond Chen

The series continue.

C++ coroutines: Short-circuiting suspension, part 1

by Raymond Chen

From the article:

At the start of this series, I gave the basic idea for how the compiler generates code for co_await, but I left out some details for expository simplicity. There are some mysterious steps called “We’re not ready to talk about this step yet.”

Now it’s time to talk about one of those steps...

C++ coroutines: Constructible awaitable or function returning awaitable?--Raymond Chen

The series continue.

C++ coroutines: Constructible awaitable or function returning awaitable?

By Raymond Chen

From the article:

Last time, we learned how to create simple awaitable objects by creating a structure that implements the await_suspend method (and relies on suspend_always to do the coroutine paperwork for us). We can then construct the awaitable object and then co_await on it...

Generators and the Sweet Syntactic Sugar of Coroutines--Adi Shavit

A very detailed and interesting article, a must read!

Generators and the Sweet Syntactic Sugar of Coroutines

by Adi Shavit

From the article:

“Coroutines make it trivial to define your own ranges.”
— Eric Niebler, Lead author of the C++ Ranges proposal (edited for drama)

Hmmm… is that so?
But wait, what are coroutines?

From Boost.Coroutine2: A coroutine (coined by Melvin Conway in 1958!) is a function that can suspend execution to be resumed later. It allows suspending and resuming execution at certain locations and preserves the local state of execution and allows re-entering the subroutine more than once. In contrast to threads, which are pre-emptive, coroutine switches are cooperative: the programmer controls when a switch will happen. The kernel is not involved in the coroutine switches.

This sounds just like what we want!

C++ coroutines: Getting started with awaitable objects--Raymond Chen

So many possibilities!

C++ coroutines: Getting started with awaitable objects

by Raymond Chen

From the article:

Coroutines were added to C++20, and Lewis Baker has a nice introduction to them.

  • Coroutine theory.
  • Understanding operator co_await.
  • Understanding the promise type.

But I’m going to write another one, taking a more practical approach: The least you need to know to accomplish various coroutine tasks...