coasync++

Автор | 05.04.2026
coasync++

Всіх вітаю.

Нещодавно опановував функціональне програмування на C++, в результаті чого виникло розуміння, що по-хорошому треба занурюватися в co_routine — фічу, яка з’явилася у C++20.

В результаті написав свою лібу: coasync++, яка спрощує роботу з короутінами.

Як один із варіантів використання, вона дозволяє змінювати “лапшеобразний” код, який достатньо складно читабельний.

C++
int main(int argc, char* arg[])
{
  // Read some entity
  ioReadTask(int id, [](SomeEntity &entity)
  {
    // Some business logic
    // ...
    // Write result back
    ioWriteTask(entity, [](WriteResult &result)
    {
      // Some result processing
      ioWriteAnotherTask(result, [](AnotherWriteResult &result)
      {
        //...
        //...
        //...
        log();
      });
    });
  });
}

На щось більше зручне.

C++
auto process(int entityId) -> asyc<void>
{
  auto entity = co_await ioReadTask(entutyId);
  auto result = co_await ioWriteTask(entity);
  log(result);
}

Це аналог async/await патерна із C#, але в C++20 дали не сам патерн, а структури, за допомогою яких можливо реалізувати свій async/await і не тільки. Тому і з’явилася ця ліба, яка завершує цей ланцюг і дає кінцевому девелоперу готовий інструмент.

Поки доступна альфа-версія ліби, яку я по можливості тестую та вдосконалюю, але зараз вже можна користуватися.

Видається під ліцензією MIT, тобто open source.

Тому якщо є потреба, користуйтеся.

Всім дякую за увагу.