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

Добрый вечер. Кто-нибудь пытался на новых корутинах повторить питоновые генераторы?

co_yield я ещё как-то освоил, интересует возможность илдить что-то с аргументом, полученным через co_await.
иными словами - повторить вот этот питоновый код:
>>> def double_inputs():
... while True:
... x = yield
... yield x * 2
...
>>> gen = double_inputs()
>>> next(gen) # run up to the first yield
>>> gen.send(10) # goes into 'x' variable
20

21 ответов

5 просмотров

https://github.com/lewissbaker/cppcoro

0xBytearray- Автор вопроса
Danya🔥
https://github.com/lewissbaker/cppcoro

видел, но там в async_generator<T> не вполне понятно как что-то слать. показан пример с ожиданием таймера, но это не "принятие аргумента". это потом никак в co_yield не использовать. надо бы что-то вида int i = co_await something; co_yield object(i)

0xBytearray
видел, но там в async_generator<T> не вполне понят...

В примере с питона у тебя нет авэйта

0xBytearray- Автор вопроса
0xBytearray- Автор вопроса
Kirill Bolshakov
Ну, это co_yield

co_yield это на выход из генератора. мне нужен вход

0xBytearray- Автор вопроса
Kirill Bolshakov
Вход в генерато это вызов функции

вот нужна возможность что-то периодически передавать в один и тот же генератор. через awaitable, я так понял

0xBytearray
co_yield это на выход из генератора. мне нужен вхо...

На сколько я понимаю в такой задаче входом будет другой генератор. Для него нужно будет реализовать "концепт" awaitable (на самом деле такого концепта нет, но мне удобнее это так называть). С ходу я не скажу, может в cppcoro генератор уже реализует awaitable и тогда можно все готовое использовать.

0xBytearray- Автор вопроса
magras
На сколько я понимаю в такой задаче входом будет д...

я не против awaitable, знать бы только как из него достать какую-либо передаваемую в генератор переменную

0xBytearray
я не против awaitable, знать бы только как из него...

Очень приблизительно так: class Source { struct promise_type { int value; int yield_value() { return value; } ... }; coroutine_handle m_coro; public: void push(int v) { m_coro.promise().value = v; } }; Скорее всего для того чтобы реализовать awaitable понадобится еще continuation хранить в promise. upd: Код принципиально неправильный и сама идея реализовывать здесь корутину не верна.

magras
Очень приблизительно так: class Source { struct ...

Хотя я туплю. Кажется здесь сама корутина не нужна. Можно просто awaitable реализовать.

magras
Хотя я туплю. Кажется здесь сама корутина не нужна...

Кажется здесь уже без экзекютера не обойтись. Если я правильно понимаю, такой источник данных должен при suspend'е должен сохранить continuation. В методе push он долен зашедулить исполнение в экзекютере. В простейшем случае думаю можно просто продолжить исполнение на текущем трэде. В общем я попробую набросать рабочий пример.

magras
Очень приблизительно так: class Source { struct ...

yield_value разве можно без аргументов? (ну и соответственно co_yield без expression?)

PRoSToC0der
yield_value разве можно без аргументов? (ну и соот...

Действительно нельзя. Да и возвращать yield_value() должен awaitable. Сейчас добавлю апдейт, что этот код - бред.

0xBytearray- Автор вопроса

Проблема решилась на stack overflow, спасибо доброму человеку https://gcc.godbolt.org/z/8aMjej

кажется у тебя баг в питонокоде

0xBytearray- Автор вопроса
0xBytearray
Проблема решилась на stack overflow, спасибо добро...

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

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

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

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
#delphi кто-нибудь встречал официальное описание директивы {$ALIGN ON} (подчеркиваю - официальное, а не левый источник)? какой именно режим выравнивания включится? будут ли в...
Viktor Akselrod
14
что это и почему оно? executor.start_polling(bot, skip_updates=True, on_startup=on_startup, File "/usr/local/lib/python3.10/dist-packages/aiogram/utils/executor.py", line 4...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
2
reply = (struct pam_response *)malloc(sizeof(struct pam_response)); reply[0].resp = strdup(password); Это так можно ображаться к структуре за указателем, помимо (*reply)...
Юлиан🦉 Колессиков ⛵️
13
какой из яву имеет в качестве инлайн асма fasm синтаксис (по сути тот же фасм)?
Aiwan \ (•◡•) / _bot
10
то есть человек, который рассказывал что Native API лучше чем WinAPI потому что меньше тактов тратиться на проверки, теперь рассказывает что все эти лишние оптимизирующие инст...
Aleksandr
12
объясните, я прада не понимаю. зачем в перле нужен аниивент? кому он пригодился в действительно нагруженных проектах?
nerv
30
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
Карта сайта