chabapok ([personal profile] chabapok) wrote2025-02-23 09:36 pm

Корутины C++

В С++20 появились корутины

task<int> foo(){ ... }

int t = co_await foo();


Штука удобная, а стандарт написан так, что реализацию можно подставить какую хочешь. Это удобно. Но основная проблема - говорят, что человек может одновременно держать в голове 5..6 сущностей, программист - 7..8. Для реализации движка корутин нужно около 12.

Так с наскоку разобраться, как оно там под капотом работает, тяжело. Вроде все понятно, начинаешь делать - начинаются странности. При помощи ютуб - более-мене реально, но тоже сложно.

Я попытался сделать asyc/await движок с qt-шной очередью событий. (знаю про qcoro, но мне хочется понять, как оно сделано. А еще в qcoro нет await_all/await_first, и некоторые другие вещи не поддержаны). За 1 вечер нормально движок не сделать.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2025-02-24 01:47 pm (UTC)(link)
Ну, так-то всё норм; "скачать" не собирается разговаривать с тем процессом, который её позвал, пиная там что-нибудь, что он знает, что надо пинать. Я вижу тут иерархию; ну распаралеллена, и чо. Нормально.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2025-02-24 02:53 pm (UTC)(link)
С генераторами понятно; в любом случае вызванный процесс сохраняет состояние, для данного клиента, ну и. Kind of against the restful ideology, but it's ok.

Still, it's all pretty innocent. Not the kind of coroutines I knew, where entities call each other with no control regarding who can call whom (and why).