перейти к содержанию

Coroutines & C++ ABI

Фото Anastasia Kazakova
Hosted By
Anastasia K.
Coroutines & C++ ABI

Сведения

I. Coroutines TS: что это такое и как этим пользоваться, Андрей Давыдов

Coroutines (async/await и generators, 2 наиболее часто встречающихся частных случая) – горячая тема в языках программирования уже несколько лет. За последний год в экспериментальном статусе эта фича появилась в Rust, Kotlin и, конечно, С++ (Coroutines TS). За несколько лет существования proposal'а накопилось некоторое количество материала о том, что такое корутины и зачем они нужны в C++, прежде всего выступления автора proposal'а, Гора Нишанова. Но при этом с момента своей презентации фича успела сильно эволюционировать, превратившись из кальки C#-го async/await, в нечто более фундаментальное и мощное, но не пригодное для использования "из коробки". Т.е., в отличие от, скажем, C#, имея в распоряжении только компилятор и стандартную библиотеку не получится воспроизвести красивые примеры использования корутин, которыми изобилуют презентации им посвященные.

Мы постараемся выяснить:

  • что именно вошло в Coroutines TS;
  • как compiler frontend читает/понимает тела корутин;
  • как писать корутины – начиная с простейших (`co_return 42;`), затем генераторы, и дальше, как пойдет, вплоть до асинхронного echo-сервера;
  • как отстрелить себе ногу по-модному с корутинами, используя ленивые и асинхронные вычисления.
    Предел мечтаний докладчика, успеть рассмотреть как подружить Networking TS (aka [Boost.]Asio) c корутинами (по мотивам CppCon 2017: Gor Nishanov “Naked coroutines live (with networking)”) в общем случае, т.е. не оборачиваю каждую функцию из `std::experimental::net`.

В докладе не будет:

  • заветного рецепта как писать асинхронный код просто и без разного рода race'ов;
  • обсуждения, что лучше stackless или stackfull coroutines (aka suspend up/suspend down model);
  • выяснения, как правильно переводить на русский "coroutine";

Если ваше знакомство с coroutines ограничивается просмотром выступлений Гора Нишанова и/или чтением обзорных статей, постов про ожидаемые фичи новых стандартов C++ и т.д., рассказ рассчитан ровно на Вас. Если же вы уже используете C++ coroutines в production'е, то вероятно знаете по теме больше докладчика, и, наверное, заскучаете на встрече.

О докладчике:
Меня зовут Андрей Давыдов, последние 2 года я работаю в команде ReSharper C++ (JetBrains). Являюсь эталонным дураком, идеально подходящим для проверки новых языковых фич и того, насколько они защищены от. Все возможные ошибки новичка пробующего C++ coroutines я совершил, поэтому могу рассказать то, чего нет в выступлениях Гора Нишанова и прочих гуру С++ и асинхронного программирования.

II. C++ ABI или почему мы предпочитаем OpenSource, Иван Мурашко

По роду своей деятельности мы часто сталкиваемся с библиотеками сторонних разработчиков которые предоставляются нам в бинарной форме, например Oracle OCCI. Вместе с тем в разработке мы используем разные версии компиляторов gcc, которые не всегда совместимы по умолчанию с Oracle OCCI. В данном докладе детально описываются соответствующие проблемы и способы их решения.

Photo of St. Petersburg C++ User Group group
St. Petersburg C++ User Group
Показать еще мероприятия