Описание тега c++-coroutine

Этот тег предназначен для вопросов о предложении Coroutine TS для C++.
1 ответ

C++1z контекст потоковой подпрограммы и планирование сопрограмм

В соответствии с этим последним C++ TS: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4628.pdf и основываясь на понимании языковой поддержки C# async/await, я интересно, что такое "контекст выполнения" (терминология, заимствованная из C#)…
1 ответ

Когда использовать сопрограммы над итераторами?

Допустим, у меня есть данные, которые я хочу предоставить "по одному". Там много данных, поэтому я получаю один кусок только тогда, когда он нужен (для экономии памяти). Так что я не могу хранить все данные внутри std::vector, Сегодня я могу использ…
20 янв '19 в 10:57
1 ответ

Могу ли я вызвать coroutine_handle::resume во время await_suspend?

Рассмотрим следующий код: coroutine_handle<> g_handle; atomic<int> g_ready; void worker_thread() { if (++g_ready == 2) g_handle.resume(); } struct Awaitable { bool await_ready() const { return false; } bool await_suspend(coroutine_handle…
15 авг '17 в 15:17
1 ответ

Что это означает для "сопрограммы без стеков, только подпрограмма верхнего уровня может быть приостановлена".

Я нашел это утверждение отсюда. Сначала я был удивлен, потому что я считаю, что это делает сопрограммы без стеков практически бесполезными (а C + сопрограммы TS без стеков). Итак, я написал демо (в Visual Studio с использованием сопрограммы C++ TS):…
22 окт '18 в 07:36
1 ответ

Почему я должен использовать сопрограмму в C/C++

это изображение происходит из практического использования setjmp и longjmp в C. Насколько я понимаю, coroutine Этот процесс выглядит как параллельный процесс для человека, но фактически выполняет один процесс для компьютера. Но используя setjmp & l…
17 май '18 в 04:48
1 ответ

Таймер boost asio, завернутый в сопрограммы, вызывает SEGFAULT на clang-5.0

Следующий код вызывает SEGFAULT на clang-5.0 с включенной поддержкой сопрограмм. Вы можете запустить код онлайн здесь: wandbox скомпилированный код Я использую параметры компилятора: -stdlib=libc++ -fcoroutines-ts Когда я запускаю его под GDB, это S…
21 ноя '17 в 07:28
3 ответа

co_await кажется неоптимальным?

У меня есть асинхронная функция void async_foo(A& a, B& b, C&c, function<void(X&, Y&)> callback); Я хочу использовать его в сопрограмме без стека, поэтому я пишу auto coro_foo(A& a, B& b, C& c, X& x) /* -&gt…
25 июл '17 в 18:56
1 ответ

Как скомпилировать генератор и сопрограмму, используя C++2a на Mac

Я устанавливаю свой MacBook для C++20 и у меня возникают проблемы при компиляции кода. Я установил последние Xcode, llvm и gcc. Вот код, который я пытаюсь скомпилировать #include <chrono> #include <experimental/coroutine> #include <fu…
22 дек '18 в 21:13
0 ответов

Требуется ли для view::join копируемый внутренний диапазон? Зачем?

Предположим, что у нас есть cppcoro::generator<int> gen_impl(int in) { const auto upper = in + 10; for (; in < upper; ++in) co_yield in; } cppcoro::generator<cppcoro::generator<int>> gen() { for (int n = 1; n < 100; n += 10) …
19 ноя '18 в 10:38
1 ответ

Не пустые сопрограммы без возврата

Я пытаюсь обернуть голову вокруг функции сопрограммы C++. Я прочитал статью Кенни ( C++ - Представляем C++ / WinRT ), а также попытался посмотреть эту презентацию, CppCon 2016: Джеймс МакНеллис "Введение в сопрограммы C++" . Я продолжаю видеть "пуст…
0 ответов

Почему функция destroy() предусмотрена в coroutine_handle в C++ 20?

Выдержка из n4680: Состояние сопрограммы разрушается, когда управление вытекает из конца сопрограммы или вызывается функция уничтожения (18.11.2.4) объекта типа std:: эксперимент::coroutine_handle, связанного с этой сопрограммой. В последнем случае …
09 янв '18 в 07:46
0 ответов

Это ошибка в реализации Coroutines TS, поставляемой с Clang 6.0?

Ниже приведен воспроизводимый пример: AnyFutureWithInnerPromise<void> f() { char arr[16]; // crash here due to segmentation fault co_return; } int main() { f().get(); } GDB говорит мне, аварийная строка: movaps XMMWORD PTR [rcx+0xb8],xmm0 Прич…
21 сен '18 в 12:49
1 ответ

Есть ли хороший пример реального мира для сопрограмм

В настоящее время я много читаю о сопрограммах. Хотя я думаю, что только частично понимаю, что они делают (например, разрешают возвращать и продолжать функцию в определенный момент), я действительно не знаю, почему мне следует их использовать. Я не …
01 дек '17 в 08:45
0 ответов

Почему тип сопрограммы должен быть перемещаемым?

[Это относится к сопрограммам TS, VC++17 и новее. Не дубликат ] Я экспериментирую с экспериментальными сопрограммами. Я определил тип сопрограммы под названием "resumable_thing" (он основан на выступлении Макнеллиса в 2016 году. В настоящее время он…
0 ответов

Может co_yield ничего не вернуть?

Можно ли с помощью новых сопрограмм C++ определить класс сопрограмм, который я могу использовать для получения из функций без возврата значения? Или yield всегда должен что-то возвращать? Я просто заинтересован в урожайности, а не в отдаче. Я хочу э…
03 авг '18 в 22:54
1 ответ

Проблема уничтожения вложенных сопрограмм в C++

Я экспериментирую с clang-5 и его реализацией TS сопрограммы. Я пытаюсь использовать его с boost asio, но сталкиваюсь с проблемами, похоже, мой фрейм стека сопрограмм разрушается дважды, но мне не удается понять, что я делаю неправильно. Это мой упр…
18 сен '17 в 13:29
1 ответ

Возобновление final_suspend вызывает ошибку, а не уничтожает сопрограмму

Джеймс МакНеллис в своей презентации "Введение в сопрограммы C++" ( https://youtu.be/ZTqHjjm86Bw?t=1898) говорит следующее: Сопрограмма уничтожается, когда: final_suspend возобновляется, вызывается coroutine_handle<>::destroy(), что произойдет первы…
28 ноя '16 в 22:04
1 ответ

Сопрограммы VS2015 C++: обещание.get_return_object() тип возврата и тип возврата сопрограммы

У меня вопрос по поводу реализации Coroutines TS в Visual Studio 2015. В рабочем документе P0057r5 говорится, что сопрограмма ведет себя так, как если бы ее тело было: { P p; auto gro = p.get_return_object(); co_await p.initial_suspend(); // initial…
18 окт '16 в 21:08
1 ответ

Как сказать Hello World с сопрограммой C++20?

Просто для учебы я попытался сделать слишком сложную программу "Hello World" с сопрограммами C++20: HelloWorldMessage sayHelloToWorld() { co_yield "Hello"; co_yield " "; co_yield "World"; co_yield "!"; } int main() { for (auto w : sayHelloToWorld())…
17 май '19 в 11:29
1 ответ

Сопрограммы C++20: реализация ожидаемого будущего

Поскольку Coroutines TS был принят в C++20 на совещании ISO в Kona, я начал немного подыгрывать им. Clang уже имеет достойную поддержку сопрограмм, но реализация поддержки библиотеки все еще отсутствует. В частности, ожидаемые типы, такие как std::f…
09 мар '19 в 23:19