Я пытался прочитать документацию (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, не помогает мне преодолеть этот первоначальный барьер :(