Size: a a a

2020 December 01

A

Anton in Rust Async
Kitsu
А что, он был в планах? Не очень понятно зачем и как это должно работать
не было, но появились же всякие ffi_helpers - макросы генерируют обертки для тасков
источник

A

Anton in Rust Async
иногда хочется в плюсы запихнуть немного асинхронного раста, но эта попопаболь с ручным пуллингом и описанием всех методов...
источник

D

Denis in Rust Async
возможно именно ты станешь тем героем, кто запилит кодогенератор для оборачивания футурок в их плюсовый эквивалент?)
источник

D

Denis in Rust Async
хотя я хз что в плюсах может выступить эквивалентом
источник

A

Anton in Rust Async
Denis
возможно именно ты станешь тем героем, кто запилит кодогенератор для оборачивания футурок в их плюсовый эквивалент?)
Это потому что конец своего пути любой герой — неизбежно дохлый? =)
источник

A

Anton in Rust Async
Denis
хотя я хз что в плюсах может выступить эквивалентом
чтото есть но оно на тредах https://en.cppreference.com/w/cpp/thread/future
источник

D

Denis in Rust Async
Anton
чтото есть но оно на тредах https://en.cppreference.com/w/cpp/thread/future
возможно именно поэтому обёртки и нет )
источник

D

Denis in Rust Async
так-то есть Boost.Asio, но там по-моему интерфейс не оч
источник

m

magras in Rust Async
В 20ых плюсах появились корутины, но они используют continuation, а не pull модель. Некоторое время назад я пробовал в плюсах реализовать растовскую модель, но у меня не получилось.
источник

m

magras in Rust Async
Точнее будет сказать, что в плюсововых корутинах у меня получилось реализовать асинхронную работу только через continuation, но не через poll.
источник

A

Anton in Rust Async
В плюсах неудобные Tagged Union, гипотетически "асинк через ffi"  можно реализовать - полить в отдельном треде, в каком нить Qt оно будет работать, так там есть уже event loop и рассылка сообщений
источник

m

magras in Rust Async
Фактически на сколько я понимаю разница заключается в том, что при resume (повторном вызове poll) в расте управление попадает на тот же await, который вызвал suspend, в то время как в плюсах управление передается следующей инструкции.
источник

A

Anton in Rust Async
magras
Фактически на сколько я понимаю разница заключается в том, что при resume (повторном вызове poll) в расте управление попадает на тот же await, который вызвал suspend, в то время как в плюсах управление передается следующей инструкции.
немного не понял, а если еще не ready? как оно может передать дальше?
источник

m

magras in Rust Async
Anton
немного не понял, а если еще не ready? как оно может передать дальше?
Если оно не ready нельзя вызывать resume.
источник

A

Anton in Rust Async
Ага там можно в другом треде resume сделать, https://en.cppreference.com/w/cpp/language/coroutines
только вот безопастность переноса данных - опять сам контроль
источник

A

Anton in Rust Async
Лучше сделать отдельный тред и поллить в нем, останется решить проблему как рассылать готовые футурки, один фиг придется чтото городить чтото типа
https://docs.rs/ffi_helpers/0.2.0/ffi_helpers/task/index.html#implementing-the-task-api
источник

m

magras in Rust Async
Anton
Ага там можно в другом треде resume сделать, https://en.cppreference.com/w/cpp/language/coroutines
только вот безопастность переноса данных - опять сам контроль
Да. Я думаю раст выбрал такую архитектуру корутин именно из-за borrow checker'а. Получается что при возобновлении работы прерванной корутны в расте виден весь стэк вызова и мы можем контролировать лайфтайм.

В плюсах из-за asymmetric transfer мы можем прыгать из одной корутины в другую. Собственно решение через continuation приводит к тому, что resume вызывается на той корутине, которая вызвала suspend, а не на корневой. Дальше листовая корутина в конце своей работы прыгнет в родительскую корутину и так далее.
источник
2020 December 02

MS

Mikola Summer Duck in Rust Async
magras
Да. Я думаю раст выбрал такую архитектуру корутин именно из-за borrow checker'а. Получается что при возобновлении работы прерванной корутны в расте виден весь стэк вызова и мы можем контролировать лайфтайм.

В плюсах из-за asymmetric transfer мы можем прыгать из одной корутины в другую. Собственно решение через continuation приводит к тому, что resume вызывается на той корутине, которая вызвала suspend, а не на корневой. Дальше листовая корутина в конце своей работы прыгнет в родительскую корутину и так далее.
> В плюсах благодаря asymmetric transfer мы можем прыгать из одной корутины в другую
В смысле горизонтально?
источник

MS

Mikola Summer Duck in Rust Async
Потому что вертикально и раст может.
источник

MS

Mikola Summer Duck in Rust Async
И растовые генераторы тоже асимметричные.
источник