Выложил первую лекцию по корутинам на английском языке.
https://youtu.be/wmrW6AkRo3c
В этой лекции мы начинаем с базового вопроса: что вообще такое корутина и чем она отличается от обычной функции или thread routine, а также обсуждаем исторический контекст и классификацию сопрограмм: стековые и встроенные (stackless), асимметричные и симметричные и т.д. Основная часть лекции посвящена внутреннему устройству корутин в C++20/23. Разбираем три ко-оператора, интерфейс promise_type, coroutine_handle, awaiters и их контракт. На протяжении лекции мы будем постепенно строить собственные корутинные абстракции -- несколько наивные, но полезные в образовательных целях. Когда основы станут ясны, мы обсудим более сложные вещи, например то, как через awaiters можно реализовать более сложные механизмы -- подписку на событие и пробуждение нескольких корутин на едином объекте синхронизации. Также мы кратко обсудим оператор co_await и возможности для его перегрузки.
00:00 Introduction. Программы, подпрограммы и thread routines.
10:11 Сопрограммы и их классификация. Stackful- и stackless-сопрограммы в C++.
15:41 Генераторы в Python и C++23.
22:10 Внутреннее устройство и строительные блоки сопрограмм. Ко-операторы.
27:25 Интерфейс promise_type и Hello World.
36:50 Напишем свой простой генератор.
45:00 Range-based-использование и когенерация.
50:40 Детали работы ко-операторов. Awaiters.
56:23 Case study: подписка на результат.
01:05:42 Оператор co_await, завершение и список литературы.
#cpp_postgraduate
Post #369
11.9K