172 похожих чатов

Почему в расте для асинхронности используется пуллинг? Почему нельзя напрямую

по очереди продолжать асинхронные функции, после выполнения вложенных асинхронных функций?

Например в контексте вложенных g(f(x)) при выполнении f(x), делать resume g(f(x))?

18 ответов

20 просмотров

Вроде же реализация экзекутора — это не часть раста, а отдана на откуп библиотекам (tokio, async_std, etc.)?

Потому что так проще сохранять стейт, afaik continuation-based асинк без гц достаточно замороченно делать. Плюс в poll-based можно всё на статических вызовах zero cost сделать, а с continuation тебе так или иначе придётся функции по указателям выполнять.

вафля'
Потому что так проще сохранять стейт, afaik contin...

As a nice side effect: в раст асинке стэк трейс имеет смысл

'xet-void operator--() Автор вопроса
вафля'
Потому что так проще сохранять стейт, afaik contin...

А в каком плане zero cost? я не совсем понимаю

'xet void operator--()
А в каком плане zero cost? я не совсем понимаю

В том плане, что статический вызов очевиден компилятору и он может его оптимизировать как хочет. Например заинлайнить. Ты за него (почти) не платишь. Динамик диспатч относительно сильно более дорогой

Хм а в каких языках сделано иначе и при этом эффективнее?

'xet-void operator--() Автор вопроса
Lite Combo
Хм а в каких языках сделано иначе и при этом эффек...

хз, но теоритически это не будет эффективнее?

Lite Combo
Хм а в каких языках сделано иначе и при этом эффек...

То что там метод называется пулл не значит что там постоянно что-то опрашивает. Там вейкер пробуждает когда задача выполнена

вафля'
Потому что так проще сохранять стейт, afaik contin...

нет, ты на пуш-бейзд футурах же такой же полноценный (растовый) асинк можешь реализовать

'xet void operator--()
А в каком плане zero cost? я не совсем понимаю

В плане что одна футура которая вызывает 10 футур через асинк авейт и другая где все накопипащено в тело дадут один перформанс. Если сравнить в шарповыми футурами или жсовыми промисами то там каждый авейт делается на отдельную футуру которая будет ллоцированна и дергаться отдельно

http://aturon.github.io/tech/2016/09/07/futures-design/

'xet-void operator--() Автор вопроса

возьмем жс: const foo = async () => { await do1(); await do2(): } const bar = async () => { await do3(); await do4(): } const baz = async () => { await foo(); await bar(): } тут футуры foo и bar будут сущестовать реально - они будут аллоцированны, и будут дергать resolve по выполнению. Теперь если мы возьмем раст то async fn foo() { do1().await; do2.await; } async fn bar() { do3().await; do4.await; } async fn baz() { foo().await; bar.await; } Оно вместо того чтобы реально дергать в рантайме как тут написано перепишет в стейтмашину вида async fn baz() { do1().await; do2.await; do3().await; do4.await;} Имеет право оно сделать именно из-за модели поллинга, с комплишном так сделать не получится насколько я помню. В итоге никаких аллокаций и лишних прыжков. Другой плюс это отмена пендинг операций - с комплишном это геморрой с передачей всяких CancellationToken'ов которые нужно мониторить и т.п. В расте эе просто делаешь drop(future) и она автоматом отменится. Ну короч почитай ссылку что я кидал, там все написано

Αλεχ Zhukovsky
http://aturon.github.io/tech/2016/09/07/futures-de...

не очень понятно написано если честно. Опять проблема double linked структур в расте.

Αλεχ Zhukovsky
возьмем жс: const foo = async () => { await do1()...

Как будто в расте канцелоятион токены не нужны

Dmytro Polunin
Как будто в расте канцелоятион токены не нужны

можно просто дроп, если ты эту операцию не в отдельном треде пустил

'xet-void operator--() Автор вопроса
Αλεχ Zhukovsky
возьмем жс: const foo = async () => { await do1()...

Ну ок. А что именно в плане комбинаторов? Они же по идеи будут не очень оптимальны?

'xet void operator--()
Ну ок. А что именно в плане комбинаторов? Они же п...

любая комбинация авейтов любой вложенности по сути с компилируется в единственную стейт машину с одним гигантским свитчем на всё что должно произойти за время выполнения всей футуры

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта