В 20ых плюсах появились корутины, но они используют continuation, а не pull модель. Некоторое время назад я пробовал в плюсах реализовать растовскую модель, но у меня не получилось.
В плюсах неудобные Tagged Union, гипотетически "асинк через ffi" можно реализовать - полить в отдельном треде, в каком нить Qt оно будет работать, так там есть уже event loop и рассылка сообщений
Фактически на сколько я понимаю разница заключается в том, что при resume (повторном вызове poll) в расте управление попадает на тот же await, который вызвал suspend, в то время как в плюсах управление передается следующей инструкции.
Фактически на сколько я понимаю разница заключается в том, что при resume (повторном вызове poll) в расте управление попадает на тот же await, который вызвал suspend, в то время как в плюсах управление передается следующей инструкции.
немного не понял, а если еще не ready? как оно может передать дальше?
Да. Я думаю раст выбрал такую архитектуру корутин именно из-за borrow checker'а. Получается что при возобновлении работы прерванной корутны в расте виден весь стэк вызова и мы можем контролировать лайфтайм.
В плюсах из-за asymmetric transfer мы можем прыгать из одной корутины в другую. Собственно решение через continuation приводит к тому, что resume вызывается на той корутине, которая вызвала suspend, а не на корневой. Дальше листовая корутина в конце своей работы прыгнет в родительскую корутину и так далее.
Да. Я думаю раст выбрал такую архитектуру корутин именно из-за borrow checker'а. Получается что при возобновлении работы прерванной корутны в расте виден весь стэк вызова и мы можем контролировать лайфтайм.
В плюсах из-за asymmetric transfer мы можем прыгать из одной корутины в другую. Собственно решение через continuation приводит к тому, что resume вызывается на той корутине, которая вызвала suspend, а не на корневой. Дальше листовая корутина в конце своей работы прыгнет в родительскую корутину и так далее.
> В плюсах благодаря asymmetric transfer мы можем прыгать из одной корутины в другую В смысле горизонтально?