L>>-Они stackless. Значит, yield'ануть из глубин вложенных вызовов функций не выйдет.
R>получиться, если есть хендл на корутину на которую нужно перейти(выпрыгнуть)
не получится
void someNestedFunction(coro someCoro)
{
int a = soSomething();
if (nothing())
{
someCoro.yield();
use(a); // упс.
}
}
этот упс не соберется в С++
по стандарту С++, функция считается корутиной если в ней присутствует одно из ключевых слов co_*
а в вашем примере хз что такое yield
а вот co_return из текущей корутины, запросто выпрыгнет в любую другую корутину если переопределен await_suspend и есть хендл той корутины куда прыгать
Да, здесь уже был. По описанию на этой странице я и пробовал разобраться. Конкретно здесь непонятно, как действовать, если корутина
должна вернуть какой-то результат, например int. Откуда его забирать? Глядя на код не ясно, как между собой взаимодействуют
классы promise_type, task и awaitable.
В других сэмплах (там же) они в get_return_object возвращают std::coroutine_handle<promise_type>::from_promise(*this) — для
человека, который первый раз смотрит на такое, это как минимум не очевидно...
Здравствуйте, reversecode, Вы писали:
R>офф дока стандарта вам не зашла R>ок R>если и ссылка на разжевывание с картинками и стрелочками на русском вам не зашла R>значит это или такой троллинг или корутины не для вас
За ссылку спасибо, но "разжевывание" не отвечает на вопросы. Например, что такое симметричная корутина или noop-корутина.
считайте нооп как нуллптр и относится как раз к симетричным корутинам
о которых сейчас с блиновым выше дискутируем
когда выход "yield" выпрыгивает не из текущей корутины
а переходит в какую то другую корутину
а не симметричная это обычное поведение когда выходит(выпрыгивает) с текущей
Здравствуйте, reversecode, Вы писали:
R>этот упс не соберется в С++ R>по стандарту С++, функция считается корутиной если в ней присутствует одно из ключевых слов co_*
Вот в случае со stackful корутинами такого ограничения нет. Функции в дереве вызовов вообще могут не знать, что они выполняются в контексте корутины.
R>а в вашем примере хз что такое yield
Отчего эта корявая калька так расплодилась в народе? Есть же (еще с середины прошлого века) отличный термин — сопрограммы. Прям тест на знание истории программирования.
Здравствуйте, bnk, Вы писали:
bnk>Я правильно понимаю, что это просто async/await наконец сделали в С++? Или это что-то большее?
Простые async/await ещё в C++11 доступны были
Здравствуйте, Евгений Музыченко, Вы писали:
O>>корутины.
ЕМ>Отчего эта корявая калька так расплодилась в народе? Есть же (еще с середины прошлого века) отличный термин — сопрограммы. Прям тест на знание истории программирования.
Странно, что тебя совершенно не смущает, что слово калька также является заимствованным из иностранного языка. Как и слово "программа", кстати.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Странно, что тебя совершенно не смущает, что слово калька также является заимствованным из иностранного языка. Как и слово "программа", кстати.
Совершенно не смущает. Эти слова, как и "экран", "процессор" и прочие, обозначают понятия, для которых в русском языке на момент заимствования не было собственных слов. Это естественный процесс развития любого языка.
А "корутина" — столь же тупое передирание иностранного слова в кириллицу, сколь и "менеджмент", "супервайзинг" и подобное. В оборот их вводят те, кто толком не знает родного языка, а распространяют те, кто этого языка не уважает.
Здравствуйте, Евгений Музыченко, Вы писали:
R>>Странно, что тебя совершенно не смущает, что слово калька также является заимствованным из иностранного языка. Как и слово "программа", кстати.
ЕМ>Совершенно не смущает. Эти слова, как и "экран", "процессор" и прочие, обозначают понятия, для которых в русском языке на момент заимствования не было собственных слов. Это естественный процесс развития любого языка.
ЕМ>А "корутина" — столь же тупое передирание иностранного слова в кириллицу, сколь и "менеджмент", "супервайзинг" и подобное. В оборот их вводят те, кто толком не знает родного языка, а распространяют те, кто этого языка не уважает.
Так как "программа" тоже заимствовано, но чуть раньше — это напоминает реплику одного деятеля из 90-х, который жаловался на заимствование слова "файрволл", когда уже в языке было "исконно русское" "брандмауэр" (заимствованное на пару лет раньше)
Мне к тому же не нравится, что "сопрограмма" может иметь смысл "работающий рядом процесс", в отличие от "корутина". Хотя "подпрограмма" прижилось, а "субрутина" — нет. Видимо, слишком сильна была ассоциация с "рутина".
Здравствуйте, Евгений Музыченко, Вы писали:
R>>Странно, что тебя совершенно не смущает, что слово калька также является заимствованным из иностранного языка. Как и слово "программа", кстати.
ЕМ>Совершенно не смущает. Эти слова, как и "экран", "процессор" и прочие, обозначают понятия, для которых в русском языке на момент заимствования не было собственных слов. Это естественный процесс развития любого языка.
Это для слова калька-то не было собственного слова?? Чего только не выдумают люди...
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, netch80, Вы писали:
N>напоминает реплику одного деятеля из 90-х, который жаловался на заимствование слова "файрволл", когда уже в языке было "исконно русское" "брандмауэр" (заимствованное на пару лет раньше)
Слово "брандмауэр" было заимствовано лет двести назад, если не раньше. В значении "сетевой экран", насколько я помню, его впервые использовали в XP (2001-й), куда он был встроен, а "файрвол" вроде как начал входить в употребление еще в конце 90-х, когда появилось само понятие.
N>Мне к тому же не нравится, что "сопрограмма" может иметь смысл "работающий рядом процесс"
Не может, если знать уже сложившуюся терминологию. Слово "сопрограмма" нередко упоминалось в литературе 60-80-х в совершенно конкретном смысла. А потом в перестройку поперли кривые переводы с английского, и половина терминов была забыта.
Здравствуйте, rg45, Вы писали:
R>>>Это для слова калька-то не было собственного слова?? ЕМ>>Ну так откройте его, не томите. R>Выбирай: Синонимы к слову «калька»
Там интересные примеры:
В послевоенные годы множество калек нуждались в помощи пластических хирургов.