Конференция C++ Russia — пока что самая суровая и одновременно ламповая конференция за последнее время. Она проходила в Конгресс-парке гостиницы «Украина» в Москве и собрала аудиторию более чем в шесть сотен человек.
Как сказал один из товарищей на афтепати: «Я со школы пытаюсь изучить C++, но постоянно натыкаюсь на что-то новое». Здесь почти каждый доклад рассказывал о чём-то новом. Иногда — о чём-то совершенно мозговзрывающем, что навсегда останется с тобой.
C++ Russia всегда отличалась наличием особенных спикеров и особенных докладов, и этот раз не стал исключением. Давайте немного оглянемся на то, что происходило в эти два насыщенных дня.
Видеозаписи и фотографии
Многие заходят в такие статьи для того, чтобы задать два классических вопроса: «Когда будут видеозаписи?» и «Когда будут фотографии?»
Записи докладов становятся доступны всем участникам сразу после заполнения формы обратной связи. Через где-то месяц по той же самой ссылке все видео перезальются, но уже в лучшем качестве. То качество, которое есть сейчас — хорошее, но можно ещё лучше.
Возможность заполнить фидбэк закроется в эту субботу в 23:59. Нужно успеть!
А вот те, кто так и не побывал на конференции, будут ждать записи докладов куда дольше. Скорей всего, мы опубликуем их ближе к дате проведения следующей C++ Russia.
Фотографии участников уже лежат во ВКонтакте. Список фотографий тоже будет пополняться, поэтому лучше всего подписаться на всю группу сразу.
Область определения
Как мы и ожидали когда-то, все доклады можно условно поделить на категории:
- Современные и новые возможности языка C++;
- Функциональное программирование;
- Метапрограммирование;
- Многопоточность, параллелизм, асинхронность и все-все-все;
- Как жить с имеющимися инструментами.
Составляя свой путь по конференции, каждому приходится устроить некую числодробилку и вычислить, в чём ты хочешь поучаствовать вживую, а что — посмотреть в записи.
Существует несколько подходов к путешествию по программе. В одном ты выбираешь между интересными темами. В другом — идёшь на конкретных знакомых тебе докладчиков, которые гарантированно рассказывают интересные темы. Реже бывает так, что люди ходят слушать представителей каких-то конкретных компаний.
У меня была очень простая стратегия: выбираем темы про компиляторы, метапрограммирование и игры, а внутри них — идем на известных докладчиков. Внутри такой стратегии выбирать оказалось легко.
Для пересматривающих в записи, вся программа не только осталась на сайте, но и дополнилась слайдами. Можно снова пройтись по программе, теперь выбрав доклады по какому-нибудь другому принципу, и устроить себе как бы вторую конференцию.
Плюрализм мнений и BOF
Ясно, что не всех интересует всё одновременно. Иногда это видно особенно ярко. Например, на BOF-сессии по теме «C++ против всех», один из участников предложил обсудить C++ Enterprise Edition, и часть аудитории его поняла далеко не сразу. Мне же наоборот было весьма странно слышать мечты о том, как в других технологиях (Golang, JS и Java, в которой я, на минуточку, кое-что понимаю) всё радужно — это ведь не совсем так!
Интересно, что мы приходим на доклады утром (очевидно), но до конца понять позицию соучастников можно только ближе к вечеру.
Кстати, о BOF-сессиях: они получились особенно хороши. Для тех, кто вдруг забыл, BOF — что-то вроде вечернего «круглого стола», но без стола и докладчиков — только модераторы и участники. Несмотря на изначально холиворную тему «C++ против всех», мы умудрились не только не передраться между собой, а продолжали ещё долго общаться после официального завершения. Если точней, вплоть до закрытия площадки, когда за нами пришла администрация и попросила перенести дискуссию в другое место (кое-кто так и сделал, продолжив уже в соседнем баре).
На втором BOF-е я, конечно, не был — но судя по тому, как аудитории объединились, там тоже всё оказалось хорошо. Как-то так, неортодоксально что ли, только посмотрите на эту фотографию.
Оговорка про докладчиков, спонсоров и всех остальных
Проблема в написании хабрапоста о конференции — было очень много всего. Если начать перечислять всех докладчиков, всех спонсоров, приводить фотографию каждой крутой штуки на каждом из стендов — этот пост не закончится никогда. Все, кто здесь упомянут — попали сюда по воле случая, а не исходя из какого-то справедливого принципа.
Открытие
Как ведущий онлайн-трансляции, я ни разу не смог посмотреть весь доклад целиком, с начала и до конца. Тем не менее, это же дало возможность побывать на более чем одном докладе внутри слота, что довольно специфично. То же самое у всех, кто делает вам праздник — например, у стендистов на стендах компаний.
Но есть несколько моментов, когда все участники собираются одновременно, и никакого выбора нет — кейноуты, открытие и закрытие.
На открытии порадовало, что на одной сцене оказались и Сергей Платонов sermp, и Андрей Дмитриев real_ales от JUG.ru Group. Теперь конференция в руках у множества людей, и Сергей взял на себя в этом процессе гордую и важнейшую роль программного директора. Король жив, да здравствует король! :-)
Открывающий кейноут
Ещё один момент, который все мы видели и о котором можно порассуждать. Его провёл Nicolai Josuttis — автор книг «The C++ Standard Library» и «C++ Templates».
Для кого-то такие книги воспринимаются как священный текст и данное свыше знание. Кто-то напротив скептически предполагает, что старые добрые времена, когда писались книги и не было cppreference — были не такими уж и старыми, не такими уж и добрыми, а к их авторам в 2019 году нужно относиться с подозрением.
И вот перед нами Николай с очередной нетленкой про «современный C++» — и кажется, это один из самых толковых докладов по теме. Наверное, как-то сказывается, что он — член комитета стандартизации в течение почти двадцати лет. В течение года мы иногда делаем текстовые резюме и расшифровки докладов для Хабра, и кажется, это самый первый кандидат на детальный разбор.
Олег Фатхиев, «Эволюция метапрограммирования»
Это доклад, оставивший меня с (приятной?) пустотой в душе. Дело в том, что если я вижу какой-то C++ код, то обычно это нечто на C++ 98 в стиле «си с классами», и написано хоть и крайне отвратительно на вид, но максимально просто и топорно. Доклад Олега не таков. В этом докладе Олег касается вопроса, как писать код для работы со списками типов, похожий на Boost.Hana.
Насколько далеко ты готов зайти, чтобы написать хороший код — хороший благодаря использованию метапрограммирования? И что случится с этим кодом в будущем, действительно ли создатели стандарта думают и заботятся о твоих способах использования? Столько вопросов.
Антон Дунчев, «Метапрограммирование для игрового движка»
На этот доклад я заглянул просто потому, что он про игровой движок и Wargaming. Думаю, многие разработчики пошли в программирование именно потому, что играли в детстве в игры и хотели делать так же. А тут у нас живой разработчик клиентской части World of Tanks — то есть, как раз той части, где всё самое интересное вроде геометрии. Это ещё один доклад о метапрограммировании, на этот раз о рефлексии нативных функций в Python и о том, почему Boost.Python не нужен.
Вообще, написание программы сразу на нескольких языках — очень интересный теоретический и практический вопрос, который можно рассматривать под совершенно разными углами. Каждый раз ты осознаёшь всё более извращённые методы, позволяющие делать всё более изощрённые вещи. Например, моя последняя любовь — GraalVM, такая полиглотная виртуалка, которая позволяет писать на C++ со вставками на Python или на Python со вставками на C++, и неудивительно, что меня приклеило к этому докладу как будто литром клея «Момент».
Главный вопрос для разработчика не end user софта, а библиотеки — «зачем». Зачем пользователям использовать то, что ты придумал. В данном случае Антон даёт хорошее объяснение: почти любой игровой движок построен на интерпретации игрового контента и рефлексии внутренних структур для того, чтобы организовать обратную связь для игровых объектов и игровой логики, и нам нужен Python, и вот тут можно развернуться в полный рост!
Михаил Матросов, Александр Воронков, «Как мы апгрейдили компилятор и поддерживали кроссплатформенность»
Конкурентами у доклада были реактивщина и инициализация. Один товарищ сказал, что у него нет выбора в этом слоте — надо идти на реактивщину. У меня точно так же не было выбора — нужно идти на компиляторы.
Помните предыдущую реплику про вопрос «зачем»? Например, вот ты пилишь наикрутейшую систему совместимости с апгрейдами тулчейна, и тут начальство спрашивает — а зачем? Конечно же вот поэтому!
Обоснование ценности работы для руководства, использование Conan (мы на BOF-е выяснили, что кто-то вообще не знает о его существовании!), апгрейды Visual Studio и вопросы воспроизводимости, обновление на С++17 — множество лайфхаков на тропе внедрения крутых фичей.
И ещё, в общем, интересно — как два человека одновременно смогут провести хороший доклад. Это очень непопулярный формат, потому что безумно усложняет докладчикам подготовку — издержки на протокол и синхронизацию. Отлично получается.
Ivan Čukić, «Move-only C++ design»
Всю жизнь я использовал KDE (кроме редких случаев, когда нужно было пропустить Xfce поверх freeNX). Помню, как Плазма падала, а потом перестала. Иногда ты долгими вечерами ведёшь беседу с воображаемыми разработчиками KDE, пытаясь сделать что-нибудь нестандартное. Я не жалуюсь на KDE, наоборот — столько сил в него ушло именно потому, что я его очень люблю. И вот на конференцию приезжает человек, который вложил в него ещё больше сил, чем ты. В основном, потому что он не пользователь, а разработчик Plasma и Activities.
Ах да, о докладе. Это ещё один доклад из разряда «нужно знать всем», как у Nicolai Josuttis. У него в последний момент поменялось название. Изначально там было просто «Move-only C++ design», а стало — «Move-only C++ design — Part I». Это потому, что тема, о которой идёт речь — очень большая и продолжает разрастаться. Иван подчеркнул, что плохо называть доклады «Part I», потому что «Part II» обычно никогда не случается. Но тут очевидно, что информации легко наберётся ещё на парочку частей. Иван не ограничился только описанием языковых фичей (вроде концептов и т.п. — ну, вы понимаете), но в какой-то момент засучил рукава, углубился в вопросы производительности, и вся оставшая часть доклада прошла в Годболте с ассемблерными листингами на пол-экрана. Пятнадцать минут, отводимых после доклада на вопросы, были израсходованы полностью. В общем, кажется, это очень горячая тема.
Александр Гранин, «Монадические парсеры»
Вообще, с функциональным программированием как-то печально. Недавно думал, какую бы статью на Хабр перевести, читал рандомные блоги с Hackernews, плакал. Есть группа деятелей, которая вообще ничего не понимает в ФП, но отчаянно пытается сделать вид, что понимает, комбинируя редкие умные слова в разном порядке, в надежде что кто-то купится. Они иногда обнаруживают себя, когда копируют слова из Википедии в неправильном порядке. Есть группа, которая наоборот — разбирается, но уже обожглась на предыдущем опыте попыток объяснения, и поэтому отделывается общими словами и рисует красивые презентации. Отделить одних от других сложно, особенно когда ты сам не разбираешься. И то, и то другое по форме изложения напоминает редкостную фигню, из которой непонятно, сможет ли автор написать хотя бы Todo-List с веб-инетрфейсом.
На фоне этого «Монадические парсеры» Александра — глоток воздуха. Во-первых, докладчик умеет программировать на Haskell и профессионально делает это. Во-вторых, это стройное повествование с чистыми, красивыми слайдами, наполненными не мемасиками из интернета, а кодом. В третьих, там всё понятно, что дорогого стоит.
В докладе рассматривались монадические парсеры: чем этот подход отличается от других видов парсинга (комбинаторные парсеры а-ля Boost::Spirit, парсер-генераторы, ad hoc-решения вроде парсящих конечных автоматов и т. д.), какие у него преимущества и недостатки и в чем здесь проявляются такие важные концепции функционального программирования, как функтор, аппликативный функтор и монада. В общем, всё что вы хотели (и не хотели) знать по теме там есть.
Viktor Kirilov, «The hitchhiker's guide to faster builds»
Когда ты приходишь (или даже краем глаза заглядываешь) в C++ после опыта с другими технологиями, становится немного жутко из-за скорости сборки. Когда-то я писал на Хабр статью, как я отлаживал браузер Chromium, и моя основная проблема была не в сложности задачи (задача весьма простая), а в том, что Chromium может собираться часами. Если ты привык в JavaScript или Java, после изменения пары букв в коде, сразу перезапускать тесты — то для кода Chromium у меня неприятные новости, возможно результаты ты увидишь только к утру. Это больно, так больно.
В этом докладе Виктор решил облегчить нам страдания, рассказав об основных способах оптимизации сборки. Точней, наверняка всё это известно множеству умудрённых опытом разработчиков, но для новичка — неоценимо.
Доклад оставил на душе какое-то неоднозначное впечатление. Ну то есть, вначале ты изучаешь множество способов сэкономить на мелочах, а потом тебе объясняют, что всё это не нужно, потому что скоро будут модули. Но прямо сейчас модулей нет, и тебе нужно всё равно использовать все эти старые ухищрения, а потом всю эту работу придётся выбросить!
А ещё, модули (и корутины) частично есть только в Clang, а концепты — только в GCC. И что теперь делать? Больно, как больно. Но после доклада стало немного лучше.
Дискуссионные зоны
Отличительная черта конференций JUG.ru Group — наличие обязательных дискуссионых зон. Докладчик не убегает неизвестно куда сразу после доклада, а продолжает общение на специально выделенной для этого площадке. К сожалению или к счастью, никто не записывает обсуждения в дискуссионных зонах на видео. К счастью — потому что это способ обсудить очень щекотливые вещи и наконец-то признаться в том, что кое в чём не разбираешься :-)
Оставшиеся доклады
Докладов было намного больше. Сейчас я остановился где-то на середине второго дня. Рассказывать о них можно бесконечно, поэтому стоит перенести это обсуждение в наши будущие посты на Хабре. Выпустить расшифровки текстом, сделать подробный разбор тезисов и так далее. Подписывайтесь на блог компании JUG.ru Group и ждите новостей!
Участники конференции (включая тех, кто смотрел прямую трансляцию), смогут посмотреть все доклады в записи. Записи у вас уже должны быть, если вы заполнили фидбэк — проверьте почту. Всем остальным же придётся ждать довольно приличное время.
В качестве завершения описания докладов вот вам фоточка незаменимого Антона Полухина с закрывающего кейноута! Антон очень крут. Есть, правда, некая боязнь, что его настолько часто спрашивают про работу над Стандартом и про Boost, что он когда-нибудь просто перестанет отвечать… но пока что у нас есть шанс узнать всё, что нужно!
Выставка
В центре площадки располагалась большая выставка. Множество компаний съехалось со всей России, чтобы устроить нам настоящий праздник. Можно было погонять в настольный футбол, поучаствовать в розыгрышах и так далее. Всё, что вы можете ожидать от выставочной зоны конференции.
Приехали не только из России — например, был стенд комьюнити CoreHard из Беларуси, которые тоже делают свою конференцию в Минске.
Между делом можно было прикупить книжку в импровизированном книжном магазине.
Кроме того, теперь у нас всегда имеется так называемый Demo Stage. Это такая площадка, на которой либо идут живые доклады, либо транслируется видеозапись со сцены одного из залов.
Временами там разыгрываются всяческие призы. Например, Денис Каланов рассказал, почему спортивные турниры — это уже давно намного больше, чем «просто корпоративный досуг» и подвел итоги двухдневного турнира по кикеру.
Афтепати и «Что? Где? Когда?»
В конце первого дня можно было не только сходить на бофы, но и поучаствовать в сессии спортивного «Что? Где? Когда?» (победила, как вы помните, дружба) и отлично закончить день огненным афтепати.
Что дальше? Следующая C++ Russia 2019 Piter
Как вы догадываетесь, после такого успеха C++ Russia никак не может остановиться на достигнутом. Следущая конференция пройдёт уже этой осенью — c 31 октября по 1 ноября в Санкт-Петербурге. Место проведения всё ещё уточняется — нужно подобрать самую правильную площадку для такого количества людей.
Если вы готовы сделать собственный доклад — то самое время заняться этим. Нужно пройти по ссылке и аккуратно сделать всё, что там написано.
Сейчас уже известно несколько докладчиков.
Во-первых, это сам Эрик Ниблер — человек, которого теперь известен практически всем благодаря его деятельности на ниве разработки Ranges в C++20 и библиотеки ranges-v3. А ещё он Senior Developer в Facebook, активный участник комитета по стандартизации, автор нескольких библиотек в Boost и член Boost Steering Committee. По сути, один из самых востребованных спикеров на C++ конференции.
Второй известный разработчик — это Sean Parent, principal scientist и архитектор в Adobe, с 1993-его года работавший над Photoshop, а до этого — в Apple над переходом на PowerPC. Ещё он год проработал в Google над ChromeOS, но вернулся назад в Adobe. Apple, Google, Adobe — в разные времена эти компании называли «компаниями мечты», а он побывал в них всех. С ним точно так же можно будет пообщаться в дискуссионной зоне и задать какие-нибудь интересные и неудобные вопросы (вроде вопросов о необходимости интеграции JavaScript-движка в C++ инфраструктуру Photoshop, или что ещё вы хотели бы узнать от одного из лучших разработчиков Adobe).
Конечно же, с нами продолжает оставаться Антон Полухин из Яндекс.Такси. Антон — представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++. Автор нескольких принятых предложений к стандарту языка C++. Aвтор Boost-библиотек TypeIndex, DLL, Stacktrace и активный maintainer Any, Conversion, LexicalCast, Variant. Автор книг «Boost C++ Application Development Cookbook» и «Boost C++ Application Development Cookbook, Second Edition».
И наконец, Александр Бычук из Лаборатории Касперского. С 2007 года Александр занимался разработкой middleware и системы электронного документооборота. Все это писалось на C и C++, так что C++ Enterprise Edition для Александра не выдумка, а ежедневная работа. Одним из важных компонентов любой корпоративной системы является транспорт, если быть точнее — брокеры сообщений, именно о них Александр и расскажет. Он поговорит о текущей обстановке в мире MQ-Brokers и, конечно же, о собственном брокере и особенностях его написания.
Подробности о питерской C++ Russia 2019 мы продолжим публиковать на Хабре, но информацию можно и самостоятельно прочитать на официальном сайте.
Внимание приобретающим билеты! Как обычно, на старте продаж их можно купить по особой ранней цене (так называемые Early Bird-билеты). Для осенней конференции время действия этой специальной скидки расширено вплоть до первого июня. Приятных майских праздников, и встретимся на следующей C++ Russia 2019 в Питере!
Автор: Олег Чирухин