Telegram Group & Telegram Channel
#story

Корутины для чайников (таких как я) 🫖

Когда я пытался постигнуть, как работают добавленные в C++20 корутины, я лицезрел невеликое количество понятных объяснений в интернете.
Авторы начинают вспоминать, в каком году впервые появился термин, или впутывать в дело goroutines (из языка Go), или Boost.Fiber, или подсчитывать во сколько квинтиллионов раз корутины быстрее потоков... 😑

Базовую понятную теорию о корутинах я нашел тут: Coroutine Theory. С первой строки понятно, что корутина - это функция, которая может приостанавливать и продолжать (с момента остановки) свое выполнение пример на godbolt:
TGenerator<int> fibonacci() {
int a = 0, b = 1;
while (true) {
co_yield a;
a = std::exchange(b, a + b);
}
}
Место для переменных a и b не возникнет из ниоткуда (а стек использовать нельзя), поэтому память под локальные переменные должна аллоцироваться в куче (компилятор должен это поддержать). После этой теории два главных факта:
✍️ Корутины - синтаксический сахар (по типу лямбд), который иногда может упрощать код. Аналог фибоначчи без корутины.
✍️ Корутины как "функции с состояниями" перпендикулярны многопоточности, они никак ее не заменяют и никак ей не мешают.

Теперь настало время узнать задачи, которые решаются корутинами лучше чем другими средствами. Можно приводить в пример http-серверы, но это слишком неочевидный пример.
На мой взгляд, один из лучших постов: How to implement action sequences and cutscenes про сложную логику в играх.
Это не на C++, а на простом скриптовом языке Lua, но не меняет концепции (и корутины там легче выглядят).

C++ как обычно пошел хардкорно-укуренным путем 🚬 Он определяет только интерфейсы для корутин, а программист должен абсолютно сам писать event loop-ы и классы для awaiter/promise.
По этой ссылке есть игрушечный event loop для задач. Без специализации в этой области ловить нечего - нужно использовать уже готовые библиотеки, например lewissbaker/cppcoro или YACLib.

Корутины - вещь неплохая, но подход к реализации в C++ (с поощрением радикального велосипедизма) меня удивил. Общее впечатление (с опытом корутин в Lua/Python) совпало с этим комментарием на Хабре.
Please open Telegram to view this post
VIEW IN TELEGRAM



group-telegram.com/cxx95/57
Create:
Last Update:

#story

Корутины для чайников (таких как я) 🫖

Когда я пытался постигнуть, как работают добавленные в C++20 корутины, я лицезрел невеликое количество понятных объяснений в интернете.
Авторы начинают вспоминать, в каком году впервые появился термин, или впутывать в дело goroutines (из языка Go), или Boost.Fiber, или подсчитывать во сколько квинтиллионов раз корутины быстрее потоков... 😑

Базовую понятную теорию о корутинах я нашел тут: Coroutine Theory. С первой строки понятно, что корутина - это функция, которая может приостанавливать и продолжать (с момента остановки) свое выполнение пример на godbolt:

TGenerator<int> fibonacci() {
int a = 0, b = 1;
while (true) {
co_yield a;
a = std::exchange(b, a + b);
}
}
Место для переменных a и b не возникнет из ниоткуда (а стек использовать нельзя), поэтому память под локальные переменные должна аллоцироваться в куче (компилятор должен это поддержать). После этой теории два главных факта:
✍️ Корутины - синтаксический сахар (по типу лямбд), который иногда может упрощать код. Аналог фибоначчи без корутины.
✍️ Корутины как "функции с состояниями" перпендикулярны многопоточности, они никак ее не заменяют и никак ей не мешают.

Теперь настало время узнать задачи, которые решаются корутинами лучше чем другими средствами. Можно приводить в пример http-серверы, но это слишком неочевидный пример.
На мой взгляд, один из лучших постов: How to implement action sequences and cutscenes про сложную логику в играх.
Это не на C++, а на простом скриптовом языке Lua, но не меняет концепции (и корутины там легче выглядят).

C++ как обычно пошел хардкорно-укуренным путем 🚬 Он определяет только интерфейсы для корутин, а программист должен абсолютно сам писать event loop-ы и классы для awaiter/promise.
По этой ссылке есть игрушечный event loop для задач. Без специализации в этой области ловить нечего - нужно использовать уже готовые библиотеки, например lewissbaker/cppcoro или YACLib.

Корутины - вещь неплохая, но подход к реализации в C++ (с поощрением радикального велосипедизма) меня удивил. Общее впечатление (с опытом корутин в Lua/Python) совпало с этим комментарием на Хабре.

BY C++95


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/cxx95/57

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Sebi said data, emails and other documents are being retrieved from the seized devices and detailed investigation is in progress. At the start of 2018, the company attempted to launch an Initial Coin Offering (ICO) which would enable it to enable payments (and earn the cash that comes from doing so). The initial signals were promising, especially given Telegram’s user base is already fairly crypto-savvy. It raised an initial tranche of cash – worth more than a billion dollars – to help develop the coin before opening sales to the public. Unfortunately, third-party sales of coins bought in those initial fundraising rounds raised the ire of the SEC, which brought the hammer down on the whole operation. In 2020, officials ordered Telegram to pay a fine of $18.5 million and hand back much of the cash that it had raised. The S&P 500 fell 1.3% to 4,204.36, and the Dow Jones Industrial Average was down 0.7% to 32,943.33. The Dow posted a fifth straight weekly loss — its longest losing streak since 2019. The Nasdaq Composite tumbled 2.2% to 12,843.81. Though all three indexes opened in the green, stocks took a turn after a new report showed U.S. consumer sentiment deteriorated more than expected in early March as consumers' inflation expectations soared to the highest since 1981. At its heart, Telegram is little more than a messaging app like WhatsApp or Signal. But it also offers open channels that enable a single user, or a group of users, to communicate with large numbers in a method similar to a Twitter account. This has proven to be both a blessing and a curse for Telegram and its users, since these channels can be used for both good and ill. Right now, as Wired reports, the app is a key way for Ukrainians to receive updates from the government during the invasion. Elsewhere, version 8.6 of Telegram integrates the in-app camera option into the gallery, while a new navigation bar gives quick access to photos, files, location sharing, and more.
from us


Telegram C++95
FROM American