Я пытался прочитать документацию (cppreference и стандартную документацию по самой функции) о последовательности операций, которые вызываются при вызове, приостановке, возобновлении и прекращении функции сопрограммы. Документация углубленно описывает различные точки расширения, которые позволяют разработчикам библиотек настраивать поведение своих сопрограмм с использованием компонентов библиотеки. На высоком уровне эта языковая особенность, кажется, очень хорошо продумана.
К сожалению, мне очень тяжело следить за механикой выполнения сопрограмм и за то, как я, как разработчик библиотеки, могу использовать различные точки расширения для настройки выполнения упомянутой сопрограммы. Или даже с чего начать.
Следующие функции находятся в наборе новых точек настройки, которые я не совсем понимаю:
initial_suspend()return_void()return_value()await_ready()await_suspend()await_resume()final_suspend()unhandled_exception()
Может кто-нибудь описать в высокоуровневом psuedocode код, который генерирует компилятор при запуске сопрограммы пользователя? На абстрактном уровне я пытаюсь выяснить, когда вызываются такие функции, как await_suspend, await_resume, await_ready, await_transform, return_value и т.д., Для чего они служат и как я могу их использовать для писать сопрограммные библиотеки.
Не уверен, что это не по теме, но некоторые вводные ресурсы здесь будут чрезвычайно полезны для сообщества в целом. Поиск в Google и погружение в реализацию библиотек, как в cppcoro, не помогает мне преодолеть этот первоначальный барьер :(