Re[9]: Вопрос по корутинам
От: rg45 СССР  
Дата: 26.08.25 13:35
Оценка: +1
Здравствуйте, kov_serg, Вы писали:

_>Дело как раз не в этом. То что вы показали это просто генераторы, итераторы. У них точка итерирования явная. Коротины же используются для описания асинхронных операций. Более того способ передачи им управления обычно скрыт.

_>Они могут вызываться внешним циклом планировщика, callback-ами (причем не факт что из основного потока).

Нет, то, что я показал — это как раз пример использования корутин. Использование ключевого слова co_yield не оставляет возможности думать по-другому. А использованный в примерах std::generator — это просто стандартная обёртка, облегчающая работу с корутинами:

A std::generator generates a sequence of elements by repeatedly resuming the coroutine from which it was returned.


Само по себе использование корутин вовсе не означает обязательного использования асинхронных операций. Не нужно путать тёплое с мягким.

P.S. Возможно, в следующим примере использование корутин будет лучше заметно

http://coliru.stacked-crooked.com/a/f2b1f65cf422bead

#include <generator>
#include <iostream>

std::generator<char> coroutine() {
    co_yield 'C';
    co_yield 'O';
    co_yield 'R';
    co_yield 'O';
    co_yield 'U';
    co_yield 'T';
    co_yield 'I';
    co_yield 'N';
    co_yield 'E';
}
 
int main()
{
    std::cout << std::string(std::from_range, coroutine()) << std::endl; // -> COROUTINE
}

COROUTINE
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 26.08.2025 15:04 rg45 . Предыдущая версия . Еще …
Отредактировано 26.08.2025 15:03 rg45 . Предыдущая версия .
Отредактировано 26.08.2025 15:00 rg45 . Предыдущая версия .
Отредактировано 26.08.2025 13:52 rg45 . Предыдущая версия .
Отредактировано 26.08.2025 13:50 rg45 . Предыдущая версия .
Отредактировано 26.08.2025 13:37 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.