Информация об изменениях

Сообщение Re[8]: C++20 coroutines (co_await) от 09.01.2021 16:10

Изменено 09.01.2021 16:11 Evgeny.Panasyuk

Re[8]: C++20 coroutines (co_await)
Здравствуйте, reversecode, Вы писали:

R>а как бы вы сделали симметричные стеклесс корутины без аллокации фрейма ?


Сабжевые ассиметричные.

Stackless корутины есть в Boost.Asio — https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/reference/coroutine.html
Локальное состояние и номер состояния преобразуется в поля класса, просыпание в нужное состояние происодит свитчем. Конкретный экземпляр корутины это объект этого класса у которго есть operator(). Всё состояине известно на этапе компиляции, также как и лямбды-замыкания, поэтому аллокация не нужна.
Более того, такая конструкция не только позвоялет избавится от аллокации, но также и копировать корутины — что по сути является fork'ом. Ещё круче, что их можно сериализировать.

Автор Asio даже предлагал свой вариант в стандарт, без аллокаций — http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4244.pdf
Но Microsoft видимо продавили свою версию, так как у них уже была своя реализация Они её ещё иногда называют "negative overhead abstraction", с аллокациями ага, негатив блин
Re[8]: C++20 coroutines (co_await)
Здравствуйте, reversecode, Вы писали:

R>а как бы вы сделали симметричные стеклесс корутины без аллокации фрейма ?


Сабжевые ассиметричные.

Stackless корутины есть в Boost.Asio — https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/reference/coroutine.html
Локальное состояние и номер состояния преобразуется в поля класса, просыпание в нужное состояние происодит свитчем. Конкретный экземпляр корутины это объект этого класса у которго есть operator(). Всё состояине известно на этапе компиляции, также как и у лямбды-замыкания, поэтому аллокация не нужна.
Более того, такая конструкция не только позвоялет избавится от аллокации, но также и копировать корутины — что по сути является fork'ом. Ещё круче, что их можно сериализировать.

Автор Asio даже предлагал свой вариант в стандарт, без аллокаций — http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4244.pdf
Но Microsoft видимо продавили свою версию, так как у них уже была своя реализация Они её ещё иногда называют "negative overhead abstraction", с аллокациями ага, негатив блин