Обзор программы С++ Russia 2019 Piter: асинхронность, модули, библиотеки… и такси

izdkwmldc3lgzaaj8shhgqenvsm.png

Что общего у этих людей, помимо того, что все они известны в мире C++?


  • Sean Parent
  • Eric Niebler
  • Marshall Clow
  • Bryce Adelstein Lelbach
  • Антон Полухин
  • Андрей Давыдов

Ответ: все они приедут на C++ Russia. Теперь, когда лето кончилось и все вернулись из отпусков, пора ждать следующую большую C++-конференцию: C++ Russia 2019 Piter. На ней выступят не только люди из этого списка, но и многие другие международные докладчики. 30 докладов, 2 полных дня с 10 утра до 7 вечера, никаких вводных историй и чтения документации по слогам — сразу сплошной хардкор.

Это оказалась одна из самых быстро и качественно организованных наших конференций, половина программы стала известна уже летом: спикеры чётко знают, какие вещи хотят рассказать на C++ Russia. Сейчас программа почти стабилизировалась, и настало время приоткрыть завесу тайны.

Все доклады мы делим на «категории планирования», которые потом наполняем интересными темами. Вот они:


  • Возможности новых стандартов
  • Практичный C++
  • Инфраструктура
  • Многопоточность
  • Метапрограммирование
  • Функциональное программирование

Категории идут в порядке убывания количества докладов: начиная с девяти докладов про новые фишки стандартов, и заканчивая единственным на данный момент докладом про функциональщину — «Compile-time type tagging» Ивана Чукича. Впрограмме всё ещё есть немного белых пятен, которые заполнятся буквально в ближайшую пару недель. Давайте посмотрим, что же получилось в результате.


Хэдлайнеры

Все докладчики — известные в сообществе деятели, писать о них можно было бы бесконечно. Давайте подробно расскажем хотя бы о тех, кого мы перечислили до ката.

3a404c83316c08e0b2410e64b9e3f349.jpgSean Parent — один из главных исследователей и архитекторов в мобильном подразделении Adobe. У него сложилась яркая карьера в компаниях с мировым именем. В период с 1988–1993 он помогал Apple писать их знаменитые операционки для PowerPC, с 1993 года начал разрабатывать Photoshop, 2009 год провел в Google, разрабатывая ChromeOS, и снова вернулся в Adobe. Что нам может рассказать человек с такой богатой историей? Прямо сейчас можно найти на YouTube множество роликов с его участием, например — серию докладов Better Code, которая говорит сама за себя. Он не в первый раз у нас на C++ Russia: на заре истории конференции, в далеком 2015 году, именно он делал первый открывающий доклад, а в 2017 году мы сделали с ним получасовое интервью. Всё, что рассказывает Sean Parent отличается глубиной и проработкой, это не материал вида «посмотрел и забыл», а нечто такое, что стоит запомнить и возвращаться снова и снова.

Сейчас он прилетает к нам с новым докладом из серии BetterCode: Relationships, и вы точно не хотите это пропустить. Именно поэтому доклад выбран кейноутом конференции — его смогут посмотреть все участники до того, как разойдутся по отдельным залам.

7326531ff83281086121b04ff4c21403.jpgВторой кейноут ведёт Eric Niebler. Тут бы и закончить рассказ, потому что в последнее время его имя более чем на слуху, благодаря Standard Ranges, а ставшие термином ниблоиды (см. разметку на CppReference) названы его именем. Но, вообще говоря, все это просто хайп, а сделал он для C++ очень многое.

Эрик — активный член Комитета по стандартизации C++, старший разработчик в Facebook, и именно в это время он начал заниматься ренжами. В дофейсбучные времена он был консультантом, работал как индивидуально, так и с BoostPro Computing. В бусте он не только написал несколько своих библиотек и выполнял роль релиз-менеджера, но и стал членом управляющего комитета Boost Steering Committee, который (в соответствии с названием) занимается стратегическими вопросами развития. Пунктик Эрика — написание мощного и одновременно элегантного кода, разработка красивых абстракций (что, в общем вы и можете увидеть в ranges… или не увидеть, в зависимости от предпочтений). Что не менее важно, мысли он может доносить не только кодом, но и в виде внятных доходчивых докладов.

Эрик приезжает с докладом «A unifying abstraction for async in C++». Коротко о проблеме: асинхронность в C++ сейчас на самом дне, её надо чинить. Стандартные инструменты вроде промисов, фьючерсов, тредов, локов, даже std::async — все они работают или неэффективно, или просто сломаны, или то и другое одновременно. Жуть. Даже хуже, не существует никакого стандартного способа сказать, где именно должна производится работа. А тем не менее, у нас есть куча C++-специфичных задач, которым это нужно: параллельные алгоритмы, гетерогенные вычисления, сеть и IO, реактивные стримы… все критически важные базовые технологии, годами ожидающие стандартной абстракции для отражения идеи асинхронного вычисления. В этом докладе Эрик вместе с нами будет копать исследования Комитета, в которых они определяли базисные операции, лежащие за любыми асинхронными вычислениями. Мы посмотрим, почему фьючеры и промисы так тормозят, что такое executor, что общего между коллбэками и корутинами, и как абстракция «Task» (которую сейчас активно изучают в Facebook R&D) может сделать в асинхронщине ту же революцию, которая произошла с появлением итераторов в обычном синхронном коде.

2f6c8c1123ed483a1e9727a22f4bbbd5.jpg Если Эрик — это крутой инженер и исследователь, который выступает редко да метко, то Marshall Clow — звезда международных конференций. Если зайти на YouTube и вписать в поиск его имя, то ютуб становится его личной домашней страничкой. CppCon, C++Now, ACCU, EuroLLVM — всё, что только можно представить. И теперь вот C++ Russia. Интересно, что при всём этом он не какой-то очередной проходной евангелист, а C++-разработчик с 35-летним стажем, изначальный автор Boost.Algorithm (и вообще контрибьютор буста в течение 15 с лишним лет), глава рабочей группы по библиотекам в Комитете по стандартизации C++ и ведущий разработчик libc++ (стандартная библиотека для LLVM). Живая легенда и человек, который мастерски писал на C++ когда половина из читающих этот текст ещё не родилась.

Маршалл приедет с докладом «Hardening the C++ Standard Template Library», суть такова: поскольку стандартная библиотека используется всеми подряд, она должна быть очень хорошо написана и не ломаться где попало. Доклад посвящен обсуждению приёмов и инструментов, благодаря которым libc++ из LLVM удовлетворяет этим требованиям: отладка, наборы тестов и покрытие, статический и динамический анализ, фаззинг. Конечно, это доклад не только для разработчиков LLVM, каждый может вынести из него свои идеи и сделать свои выводы.

3f451cfb45b330d96fdeabc95b23ce84.jpgBryce Adelstein Lelbach изучал C++ чуть меньше Маршалла, но ему есть, чем удивить. Он — один из глобальных лидеров сообщества C++. Его общественная деятельность заключается в том, что Брайс сейчас программный директор основных C++ конференций — CppCon и С++Now, глава C++ User Group в Сан-Франциско и Кремниевой долине. В Комитете по стандартизации он участвует в JTC1/SC22/WG21, является председателем Tooling Study Group (SG15) и Library Evolution Incubator (SG18), а в C++ 17 занимался длинным списком вещей (parallel algorithms, executors, futures, senders/receivers, multidimensional arrays, modules). Кроме всего прочего, Брайс возглавляет рабочую группу по разработке CUDA в компании NVIDIA, временами помогает LLVMLinux и коммитит в Boost.

Брайс приезжает с докладом «The C++20 synchronization library». С тех пор, как вышел C++ 11 прошло куда больше десятка лет, мир изменился! Во времена C++ 11, многоядерные процессоры уже прочно вошли в обиход, но нормальным количеством ядер было штуки две или четыре. Всё, что больше десяти, как у древних людей, обозначалось словом «много». «Два», «четыре» и «много». Сейчас нормально иметь десятки голов и мириться с задержками синхронизации длиной в целые миллисекунды. Обычным делом стало иметь десятки и сотни тредов, а слово «много» теперь обозначает «сотни тысяч». Десять лет назад вряд ли кто-то мог чётко представить современные проблемы многопоточности. Используя традиционные инструменты сегодня, мы сталкиваемся или с неприемлемо высокой латентностью, или с неприемлемым контеншеном на синхронизации потоков. Библиотека C++ 20 предлагает новые решения — легковесные примитивы, которые могут работать с сотнями тысяч потоков.std::atomic::wait, std::atomic::notify_*, std::atomic_ref, std::counting_semaphore, std::latch, std::barrier… Этот доклад построен как последовательность примеров, на которых мы будем учиться использованию всех этих инструментов для того, чтобы построить современное приложение, которое может параллельно исполняться на почти любом железе, от эмбеддеда и серверных CPU до новых GPU.

jindudpg3cncgtgx2vu2ytty30s.pngСледующий докладчик — известный российский разработчик Антон Полухин. Известен докладами о сферах, где C++ считается незаменимым и дополнительных вещах, которые неплохо бы иметь в C++. Представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++, автор нескольких принятых предложений к стандарту языка C++. В ходе подготовки предыдущей конференции, мы опубликовали интервью с ним на Хабре. Вообще, тема участия россиян в Комитете уже довольно широко обсуждалась и на Хабре, и везде (глядите, Яндекс даже в VK написал про это пост), и давайте сейчас не вскрывать эту тему. Можно сходить stdcpp.ru и увидеть список представителей, сейчас это: Антон Полухин, Антон Бикинеев и Александр Фокин. Антон также является автором нескольких библиотек Boost: TypeIndex, DLL, Stacktrace, активно занимается поддержкой Any, Conversion, LexicalCast, Variant. Он написал книги «Boost C++ Application Development Cookbook» и «Boost C++ Application Development Cookbook, Second Edition».

В этот раз Антон приезжает с докладом «C++ трюки из Такси» (доклад так называется, очевидно, потому что Антон работает в Яндекс.Такси). Суть трюков в том, как красиво и более эффективно писать казалось бы всем известные решения — например, из Pimpl можно выбросить динамическую аллокацию и прикрутить кэш.

ea92640ddd4e716ba67055404ebc0685.jpgДавайте разбавим наш список кем-то, кто не работает в Комитете. Поприветствуйте Андрея Давыдова из JetBrains — он уже три года работает в команде ReSharper C++, и многие из нас каждый день пользуются результатами его работы. В докладе Андрей собирается рассказать о том, как появление модулей повлияет на ядро языка C++: если раньше компилятор работал с единицами трансляции по одной, то с появлением модулей правила игры поменялись. Будут обсуждаться следующиетемы:


  • что такое reachable entity и чем это отличается от visible;
  • как модули влияют на ADL;
  • могут ли entities с internal linkage протечь в другой модуль;
  • может ли импортировать класс одновременно как complete, и как incomplete;
  • что будет с inline-функциями в модульном мире.

Заметьте, что это не вводный доклад в модули для начинающих. От слушателей ожидается общее знакомство с принципами работы модулей и понимание, зачем модули вообще нужны. Хорошая новость в том, что, во-первых, разобраться в этом довольно просто (достаточно нагуглить какую-нибудь хорошую статью), а во-вторых, на этой C++ Russia будет ещё один парный вводный доклад про модули от Дмитрия Кожевникова (он тоже работает в JetBrains).


Вся остальная программа

Совершенно очевидно, что как следует рассказать о 30 людях и их 30 докладах в коротком посте-анонсе на Хабре невозможно. Поэтому более подробно всё это описано на официальном сайте конференции. Важно отметить, что программа продолжает изменяться: например, поскольку докладчики с помощью Программного комитета продолжают совершенствовать свои доклады, их описания тоже обновляются. Так что ближе к 31 октября всё будет выглядеть немного по-другому, но общий смысл останется тот же.


Доклады — это ещё не всё!

Конечно, конференция — это не только доклады, но и море общения. Этим живое присутствие отличается от онлайн-трансляции, которую мы тоже планируем сделать. Поглядите на список выше — с большей частью этих людей хотелось бы встретиться и обсудить что-то важное. Такая возможность у нас есть: после окончания доклада все направляются в дискуссионную зону и общаются там столько, на сколько хватит времени. В конце дня организуются так называемые BOF-сессии (что-то вроде круглого стола, но только участвуют все).

Можно просто встретиться с интересными людьми из сообщества, которые тоже пришли, но без доклада. Можно найти интересующие компании, что-нибудь узнать у их представителей и поучаствовать в конкурсах. Будут разные побочные активности, которые мы сейчас продумываем. Словом, всё что можно представить о большой конференции.


Мастер-классы

Помимо основной программы конференции, будут ещё и мастер-классы (участие в них оформляется отдельно). Они будут проводиться за день до конференции и, в отличие от докладов, будут занимать не менее нескольких часов каждый. С подробными описаниями и условиями участия в мастер-классах можно будет ознакомиться на официальном сайте чуть позже, когда они там появятся.


Антон Полухин — «Шустрый и современный C++»

Антон — известный российский разработчик, о котором мы говорили чуть выше в этой статье. Его опыт как автора библиотек Boost, участника и Комитета по стандартизации, а также большая практика, позволяют писать ему грамотный шустрый код на C++ и обучать этому других.

В любой большой кодовой базе можно встретить куски абсолютно непонятного кода. Как правило, такой код пишется, чтобы немного выиграть в производительности приложения… и, как правило, такой код не нужен в принципе, так как оптимизирует не то, что нужно, не в том месте, где это нужно, и не так, как надо.

Мастер-класс начнётся с небольшого примера, где встретятся все частые ошибки преждевременной оптимизации. После чего пойдёт с основ и рассмотрит такие вещи, как алгоритмы и контейнеры стандартной библиотеки (и не только стандартной), move-семантику и её неожиданное поведение, многопоточность. Это совершенно практический мастер-класс с использованием Google Benchmark и заданиями, которые выглядят как задачи на оптимизацию конкретного кода.


Rainer Grimm — «Embedded Programming with Modern C++»

Rainer Grimm — опытный тренер по программированию на С++, Python и разработчик софта из Германии. Embedded — один из основных областей применения современного C++. C++ позволяет напрямую общаться с железом и предоставляет абстракции для построения сложных систем. В современном C++ появилось множество вещей, помогающих в embedded. Это такие штуки, как move-семантика и constexpr-функции (для повышения производительности), user-defined literals и type-traits (для систем, для которых критична максимальная безопасность), smart pointers и std::array (чтобы меньше возиться с ресурсами).

Этот мастер-класс учит, как более грамотно пользоваться возможностями C++ применительно к embedded. В частности, дает ответы на широкий спектр вопросов про уникальные ограничения таких систем. Этот мастер-класс ведется на английском языке.


Павел Филонов — «Continuous Integration для C++-разработчика»

Павел Филонов считает, что процесс разработки не должен заканчиваться после коммита, поэтому представит мастер-класс по Continuous Integration. Цель мастер-класса — сделать следующий шаг навстречу непрерывной интеграции (CI, англ. Continuous Integration) и автоматизировать разрешение зависимостей, сборку и модульное тестирование под все целевые платформы. В итоге участники полностью самостоятельно смогут развернуть всю необходимую для CI инфраструктуру и подготовить проект на C++ для автоматической сборки и модульного тестирования.


Что дальше?

А дальше нужно приходить на C++ Russia 2019 Piter! Конференция пройдёт 31 октября — 1 ноября в Санкт-Петербурге. Билеты можно приобрести на официальном сайте. Там же можно подробно ознакомиться с актуальной версией программы (напоминаю, что она продолжает изменяться).

Важное замечание про цены и скидки. Система покупки билетов умеет выдавать билеты четырех типов: Academic, Personal, Standard и Online. Почему это важно: если вы покупаете билеты себе сами, то это будет стоить сильно дешевле, чем билет для компании. А если вы студент, аспирант или преподаватель (и имеется соответствующий документ для подтверждения), то скидка получается особенно внушительной. Подробные условия, конечно, нужно читать на сайте — всё выше написанное было только для ознакомления.

В ожидании C++ Russia 2019 Piter можно посмотреть записи с двух предыдущих конференций, которые прошли этой весной в Москве и в Новосибирске.Вообще все записи за прошлые годы аккуратно лежат на нашем YouTube-канале. Таким образом вы можете наглядно оценить качество докладов.

Встретимся на C++ Russia 2019 Piter!

© Habrahabr.ru