Сообщение Re[5]: Вопрос по корутинам от 26.08.2025 9:26
Изменено 26.08.2025 9:34 rg45
Re[5]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:
R>>Так корутины (сопрограммы) именно такими и являются — последовательно исполняемыми. Никаких разных тредов и вызовов где попало здесь нет. Пока одна сопрограмма выполняется, другая ожидает (suspended). Отличие лишь в количестве "квантов".
_>Дело не в названии а в принипе работы. Кто определяет когда функция продолжит исполнение, кто следит за ресурсами, которые функции использует, какие гарантии, какие инварианты необходимо соблюдать для таких открытых функций?
_>Где это описано для корутин? Обычно нигде.
И я что-то не очень понимаю, о каких гарантиях ты говоришь.
Например, каких гарантий тебе не хватает в примере ниже?
http://coliru.stacked-crooked.com/a/efdfae5790ff2b9e
R>>Так корутины (сопрограммы) именно такими и являются — последовательно исполняемыми. Никаких разных тредов и вызовов где попало здесь нет. Пока одна сопрограмма выполняется, другая ожидает (suspended). Отличие лишь в количестве "квантов".
_>Дело не в названии а в принипе работы. Кто определяет когда функция продолжит исполнение, кто следит за ресурсами, которые функции использует, какие гарантии, какие инварианты необходимо соблюдать для таких открытых функций?
_>Где это описано для корутин? Обычно нигде.
И я что-то не очень понимаю, о каких гарантиях ты говоришь.
Например, каких гарантий тебе не хватает в примере ниже?
http://coliru.stacked-crooked.com/a/efdfae5790ff2b9e
#include <concepts>
#include <generator>
#include <iostream>
template <std::incrementable T>
std::generator<const T&> lazy_sequence(T t, size_t count) {
for (size_t i = 0; i < count; ++i)
co_yield t++;
}
int main()
{
for (auto t : lazy_sequence('A', 26)) // -> A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
std::cout << t << ' ';
}
Re[5]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:
R>>Так корутины (сопрограммы) именно такими и являются — последовательно исполняемыми. Никаких разных тредов и вызовов где попало здесь нет. Пока одна сопрограмма выполняется, другая ожидает (suspended). Отличие лишь в количестве "квантов".
_>Дело не в названии а в принипе работы. Кто определяет когда функция продолжит исполнение, кто следит за ресурсами, которые функции использует, какие гарантии, какие инварианты необходимо соблюдать для таких открытых функций?
_>Где это описано для корутин? Обычно нигде.
И я что-то не очень понимаю, о каких гарантиях ты говоришь.
Например, каких гарантий тебе не хватает в примере ниже?
http://coliru.stacked-crooked.com/a/8c7737e8d549bffb
R>>Так корутины (сопрограммы) именно такими и являются — последовательно исполняемыми. Никаких разных тредов и вызовов где попало здесь нет. Пока одна сопрограмма выполняется, другая ожидает (suspended). Отличие лишь в количестве "квантов".
_>Дело не в названии а в принипе работы. Кто определяет когда функция продолжит исполнение, кто следит за ресурсами, которые функции использует, какие гарантии, какие инварианты необходимо соблюдать для таких открытых функций?
_>Где это описано для корутин? Обычно нигде.
И я что-то не очень понимаю, о каких гарантиях ты говоришь.
Например, каких гарантий тебе не хватает в примере ниже?
http://coliru.stacked-crooked.com/a/8c7737e8d549bffb
#include <concepts>
#include <generator>
#include <iostream>
template <std::incrementable T>
std::generator<const T&> lazy_sequence(T t, size_t count) {
for (size_t i = 0; i < count; ++i)
co_yield t++;
}
int main()
{
for (auto t : lazy_sequence(1, 10)) // -> 1 2 3 4 5 6 7 8 9 10
std::cout << t << ' ';
std::cout << std::endl;
for (auto t : lazy_sequence('A', 26)) // -> A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
std::cout << t << ' ';
}