Size: a a a

2020 September 27

AF

Aidar Fattakhov in pro.cxx
придется каждую строчку вызывать еще и next
источник

AF

Aidar Fattakhov in pro.cxx
в любом случае await должен чтото ждать, а сейчас он ничего не ждёт
источник

ДС

Дмитрий Салов... in pro.cxx
Привет всем
источник

m

magras in pro.cxx
Aidar Fattakhov
придется каждую строчку вызывать еще и next
next() может и void возвращать. Ну и мне ленивое поведение корутин кажется более естественным.
источник

AF

Aidar Fattakhov in pro.cxx
поэтому в стандарте и обобщили настолько
источник

AF

Aidar Fattakhov in pro.cxx
потомучто всем как-то кажется
источник

B

Bytearray in pro.cxx
magras
эх. Не успел. =(

Единственное что я бы хранил значение снаружи в generator_input и передавал бы ссылку на него в лямбду при конструировании. Но это мелочи если считать это просто демострационным кодом.
а зачем?
источник

m

magras in pro.cxx
Aidar Fattakhov
потомучто всем как-то кажется
Просто чтобы корутина была не ленивой у нее должен быть немного другой механизм. Растовские корутины можно исполнять при помощи условного while (coro.poll());. Они фактически неявно создают цикл вокруг каждого await. Плюсовые работают на continuation'ах, поэтому их нельзя resum'ить до того, как она не готова к продолжению работы.

Поэтому чтобы корутина стала жадно исполнятся, согласно моим представлениям, уже нужен полноценный экзекютер и awaitable должен иметь возможность зашедулить остановленную корутину на исполнение.
источник

AF

Aidar Fattakhov in pro.cxx
>до того, как она не готова к продолжению работы
в send достатончо доьбавить next, осталось научить ждать awaitable
источник

m

magras in pro.cxx
Собственно для меня проблема здесь в том, что для меня генератор - это простая конструкция которая не требует экзекютера. Поэтому мне сложно представить генератор который может жадно консьюмить данные.
источник

AF

Aidar Fattakhov in pro.cxx
а awaitable и нужен чтобы ждать корутины цепочечно
источник

AF

Aidar Fattakhov in pro.cxx
magras
Собственно для меня проблема здесь в том, что для меня генератор - это простая конструкция которая не требует экзекютера. Поэтому мне сложно представить генератор который может жадно консьюмить данные.
генератор который awaitит генератор
источник

AF

Aidar Fattakhov in pro.cxx
await должен быть похож на
while(child.next())
yield child.value()
источник

m

magras in pro.cxx
Aidar Fattakhov
>до того, как она не готова к продолжению работы
в send достатончо доьбавить next, осталось научить ждать awaitable
Но это же практически ни чем не отличается от того, примера кода который я написал. Объединить push и next в функции и все. Для меня это чисто косметическое изменение.
источник

AF

Aidar Fattakhov in pro.cxx
magras
Но это же практически ни чем не отличается от того, примера кода который я написал. Объединить push и next в функции и все. Для меня это чисто косметическое изменение.
толкьо там await ничего не ждёт(
источник

m

magras in pro.cxx
Aidar Fattakhov
толкьо там await ничего не ждёт(
А что он должен ждать? Если в публичном интерфейсе есть только метод, который одновременно пушит новое значение и пулит результат, код не может встать на await. Исходный код написан на том же предположении.
источник

m

magras in pro.cxx
Если использовать низкоуровневый интерфейс с раздельным пушем и пулом, да, нужно будет еще как-то обрабатывать ситуацию когда пулят раньше пуша. Но sleep здесь вряд ли является возможным решением. Я вижу два пути: terminate и возвращать что-нибудь вроде variant<EOF, Pending, Value<T>>.
источник
2020 September 28

m

magras in pro.cxx
magras
Если использовать низкоуровневый интерфейс с раздельным пушем и пулом, да, нужно будет еще как-то обрабатывать ситуацию когда пулят раньше пуша. Но sleep здесь вряд ли является возможным решением. Я вижу два пути: terminate и возвращать что-нибудь вроде variant<EOF, Pending, Value<T>>.
Но во варианте с Pending, кажется, придется заворачивать каждый await в цикл. То есть оно выглядело бы как-то так:
T t;
while (true) {
 t = co_await src;
 if (t == Pending)
   co_yield Pending;
 else
   break;
}

Другими словами видимо так делать не надо. =(
источник

AF

Aidar Fattakhov in pro.cxx
источник

P

PRoSToC0der in pro.cxx
а зачем такое может пригодиться?
источник