std::execution from the metal up

Speaker: Paul Bendixen

Audience level: [ Intermediate | Advanced ]

Asynchrony is a very important part of modern computing, from handling interrupts to reading from disks and networking.

Networking in C++ has been held up for some time due to executors, they weren't just right yet.
Shortly before deadline for the C++23 standard a new contender on the block for executors saw the light of day: sender/receiver (P2300).

By guaranteeing no dynamic allocations as well as maintaining the zero-overhead principle by only pulling in exceptions if they are used, the sender/receiver executor proposal makes itself interesting to the most constrained of devices, without sacrificing the ease of use and overview, that handling asynchronous operations demand, in order to be understandable.

This talk will work through how to use sender/receiver to represent a serial port on a microcontroller, a domain usually not connected to the newest additions to the standard and also not with desktop level asynchronous programming.

A case study will be shown following how to implement an executor for a microcontroller UART, but the principles and methods to develop and test the system will be equally usable in other domains utilizing asynchronous programming.

After this talk you should have a better understanding of how sender/receivers work; how they can be used, even in very constrained environments and how to create your own senders, receivers and algorithms.