Десятка лучших докладов C++ Russia и плейлист конференции в открытом доступе

Этот хабрапост объединяет десять лучших докладов от таких спикеров, как Nicolai Josuttis, Timur Doumler, Андрей Давыдов и многих других.

C++17/20/23, concepts, immutable data structures, concurrency, parallelism, metaprogramming — всё это темы конференции C++ Russia 2019, прошедшей этой весной в Москве. Более шести сотен участников, известные международные спикеры, глубокие доклады. Обратите внимание — доклады такие, что устареют очень нескоро, а применить полученные знания можно хоть сейчас.

abihegoiqc7l912fnxnmipgjgum.jpeg

Формат таков:


  • Обязательное видео на YouTube
  • Подробное описание доклада на русском языке (со слайдами, если они есть)
  • Краткая биография докладчика

Не стесняйтесь писать комментарии! Кстати, в плейлисте, опубликованном под катом, есть не только топ-10. И мы выключили рекламу на YouTube, так что никто не будет мешать.

Все доклады идут от «младшего» к «старшему» по рейтингу, но различия между местами лучшей десятки минимальны и сильно зависят от методики оценки. Незначительно изменив методику, можно сильно поменять места. Поэтому смотрите все!

Полный плейлист конференции находится по ссылке.

Viktor Kirilov


Слайды

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


  • тулинг и инфраструктура — железо, системы сборки, кэширование, распределенные сборки, диагностика бутылочного горлышка, гигиена кода;
  • техники — unity builds, precompiled headers, static vs shared;
  • изменения в исходниках — идиома PIMPL, более правильное использование шаблонов, аннотации;
  • модули — что это такое, когда появятся в C++, что из-за этого окажется более ненужным.

О докладчике

3e10a91e6e7586dab6b64245e9c05123.jpgШесть лет профессионального опыта в C++ в индустрии игр и VFX. Сейчас Виктор занимается разработкой open source и время от времени — обычной контрактной работой. Из последних интересных задач — реализация горячей подмены кода в рантайме языка Nim. Кроме того, он является автором doctest — «самой быстрой и мощной single-header-библиотеки тестирования для C++». Интересуется разработкой игр и игровых движков, высокопроизводительного кода, криптовалют, оптимизацией рабочего процесса и интеграцией хороших практик разработки, таких как современные инструменты статического анализа и инструментации. Виктор живет в городе София (Болгария), и программирование — одновременно его профессия и хобби. Есть свой сайт: http://onqtam.com/


Сергей Федоров


Слайды

Когда мы работаем с БД, мы зачастую получаем сырые буферы, в то время как хочется получать данные в виде структур, классов и контейнеров C++.

Рассказ о проектировании и реализации драйвера PostgreSQL с человеческим интерфейсом с применением почти всех доступных на данный момент языковых средств C++17.

Описанный в докладе подход можно адаптировать практически к любому протоколу уровня приложений.

О докладчике

9847bedf11e6ab7fd3505278dac7e35a.jpgСергей Федоров — ведущий разработчик в «Яндекс.Такси», занимается разработкой асинхронного фреймворка для бэкенда Такси. Большой любитель метапрограммирования и open source.


Ivan Čukić


RAII отпускает захваченные ресурсы. Но есть ресурс, который не вернуть — это время.

Одна из наиболее затратных по времени ошибок — создание ненужных копий. Move-семантика C++11 сделала шаг в правильном направлении. Она позволяет отдать ненужные данные кому-то еще без штрафа на создание копии и без риска гонок по данным, когда у данных много пользователей.

В этом докладе мы поучаствуем в обсуждении подхода к архитектуре, который разрешает использование только специальных некопируемых перемещаемых типов под названием «линейные типы». Будут обсуждаться возможности C++, которые позволят форсировать использование именно таких типов.

Для этого предлагается использовать концепты из C++20, &&-квалифицированные функции и т.п.

О докладчике

8eac6a16009fbed602542b6fa5c55e28.jpgИван Чукич — автор книги «Functional Programming in C++», опубликованной издательством Manning. Контрибьютит в KDE — один из самых больших свободных опенсорсных проектов. Кроме того, он преподает современные техники программирования в университете, передавая студентам свой 20-летний опыт использования C++. Он занимался исследованиями функционального программирования на C++ во время постдока и до него и использовал эти техники в реальных проектах.


Rainer Grimm


Что общего между тредами, атомиками, мьютексами и условными переменными? Все это — базовые блоки для построения любых многопоточных приложений в C++, и они могут доставить проблем даже опытным разработчикам на C++.

Эта ситуация серьезно поменялась в C++17, и еще больше — в C++20/23. Начиная с C++17, большинство стандартных алгоритмов доступны в последовательной, параллельной и векторизованной форме. В свежих стандартах мы ожидаем executors и transactional memory, можно ожидать больших улучшений в futures и coroutines. Для многопоточности и параллелизма это — только начало. Есть надежда, что в будущем в абстракциях будут использоваться только они (executors, transactional memory, futures, coroutines), а треды, атомики, мьютексы и условные переменные станут всего лишь деталями реализации.

Цель этого доклада — посмотреть, что мы уже получили в C++17 и на что можно надеяться в C++20/23.

О докладчике

ded14eb6614064a6bdbc84576acfde1c.jpgРайнер Гримм работает архитектором, тимлидом и инструктором около 20 лет. В свободное время любит писать статьи о C++, Python и Haskell и выступать на конференциях, часто пишет в свой блог «Modern C++». Сейчас он ведет семинары по современному C++ и Python. Его книги «C++11 für Programmierer», «C++», «C++ Standardbibliothek» и «The C++ Standard Library» публикуются как издательством O’Reilly, так и в Leanpub.


Андрей Давыдов


Любой окунувшийся в мир C++ программист знает, что шаблоны тьюринг-полные, «substitution failure is not an error» и в compile-time можно делать удивительные, а иногда даже полезные вещи. С другой стороны, опытный С++ разработчик понимает, что «можно» не значит «нужно» и что за злоупотребление метапрограммированием приходится платить. Один из основных сдерживающих факторов — время компиляции, поэтому в докладе рассматривается, какие операции/техники наиболее дороги с точки зрения компилятора и как их можно избегать.

В частности, были освещены следующие вопросы:


  • почему SFINAE — это последнее, что нужно использовать;
  • почему std: conditional_t определен неэффективно;
  • в чем разница между реализациями tuple в Microsoft STL и libc++;
  • когда стоит использовать std::{conjunction, disjunction}, а когда — fold expressions;
  • почему не стоит использовать std: void_t;
  • как появляющиеся в C++20 концепты могут помочь.

О докладчике

ea92640ddd4e716ba67055404ebc0685.jpgПоследние 3 года Андрей работает в команде ReSharper C++ в JetBrains. В прошлом занимался промышленным программированием в областях, связанных с ГИС-ами и системами 3D-визуализации.


Антон Полухин


Каждый новомодный язык программирования норовит заявить о том, что он быстрее, надёжнее и вообще по всем параметрам в несколько раз лучше C++.

Давайте разберёмся — где правда, а где вымысел. Да начнётся битва между C++ и Asm/Rust/Go/Java/C#… !

О докладчике

16f00566146a92689a0cff14e4524a28.jpgПредставитель России в 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».


Juan Pedro Bolívar Puente


Элита C++ годами говорит о value semantics, immutability и sharing by communicating. Нас ждет лучший мир без мьютексов, гонок, обсерверов, паттернов «команда» и всего такого прочего. Когда же доходит до практики, есть большие проблемы. Одна из основных проблем — в структурах данных.

Неизменяемые структуры данных не меняют значений, чтобы работать с ними — нужно создавать новые значения. Старые значения остаются лежать как есть, и поэтому с ними можно работать из нескольких потоков без блокировок. Это дает нам структурное разделение ресурсов, потому что новые и старые значения могут пользоваться одними и теми же общими данными — их можно быстро сравнивать и очень компактно хранить undo-history. Именно поэтому их так приятно использовать в многопоточных и интерактивных системах: они упрощают архитектуру десктопного софта и позволяют серверам лучше масштабироваться. Это — секретный ингредиент, определивший успех Clojure и Scala, и даже JavaScript-разработчики любят использовать их с помощью чего-то вроде Immutable.js, разработанного в Facebook.

Juan же представляет Immer, библиотеку для C++, которая реализует современные эффективные неизменяемые структуры данных.

В этом докладе он говорил об архитектурных преимуществах неизменяемости и показал, как чрезвычайно эффективный и мощный персистентный вектор можно построить на основе современных структур данных, доведенных до совершенства (Relaxed Radix Balanced Trees). Посмотрели на программу-пример — текстовый редактор, разработанный в таком архитектурном стиле. Код не просто супер-простой, он еще и обогнал по производительности большинство похожих программ. Не верите? Откройте доклад и удостоверьтесь сами!

Используемые технологии:

О докладчике

e2d0482bf72ab93b14bddb8f69484742.jpgJuan — консультант-фрилансер и инженер из Берлина, специализирующийся на value oriented design, интерактивном ПО, современном C++, функциональном программировании и стратегическом использовании open source. До этого он работал в Ableton и занимался различными проектами, связанными с музыкой. Кроме того, он участвовал в проекте GNU и стал сооснователем Hacklab в Гранаде.


Андрей Давыдов


Появляющиеся в C++20 концепты — давно и широко обсуждаемая тема. Несмотря на избыток материала, накопившегося за годы (в т.ч. выступления экспертов мирового уровня), среди прикладных программистов (не засыпающих ежедневно в обнимку со стандартом) все еще остается неразбериха, что же такое С++20-концепты и так ли они нам нужны, если есть проверенный годами enable_if. Частично виной тому то, как концепты эволюционировали за ~15 лет (Concepts Full + Concept Map → Concepts Lite), а частично то, что концепты получились непохожими на аналогичные средства в других языках (Java/С# generic bounds, Rust traits, …).

Доклад начнется с краткого обзора concept-related нововведений C++20, после чего мы посмотрим на реализацию некоторых классов и функций STL, сравнивая C++17 и С++20-решения. К примеру:


  • для реализации std: optional сейчас приходится использовать иерархию наследования глубины 7, в С++20 это будет не нужно;
  • для default-конструктора std: pair сейчас требуется 2 шаблонные функции, в С++20 — 1 нешаблонная;
  • часто шаблонные классы частично специализируются, в случае, когда у шаблонных параметров есть какие-то специальные свойства, c концептами это делать удобнее и правильнее.

От слушателей предполагается общее представление, что такое концепты и SFINAE. Также будет полезно знакомство со стандартной библиотекой C++, знание тонкостей и деталей реализации не требуется.

О докладчике

ea92640ddd4e716ba67055404ebc0685.jpgПоследние 3 года Андрей работает в команде ReSharper C++ в JetBrains. В прошлом занимался промышленным программированием в областях, связанных с ГИС-ами и системами 3D-визуализации.


Timur Doumler


Общеизвестно, что семантика инициализации — одна из наиболее сложных частей C++. Существует множество видов инициализации, описываемых разным синтаксисом, и все они взаимодействуют сложным и вызывающим вопросы способом. C++11 принес концепцию «универсальной инициализации». К сожалению, она привнесла еще более сложные правила, и в свою очередь, их перекрыли в C++14, C++17 и снова поменяют в C++20.

В этом докладе Тимур вначале подвел исторические итоги эволюции инициализации в С++. Он дал системный обзор текущего варианта правила инициализации, типичных проблем и сюрпризов. Представил практичные правила того, как использовать все эти правила эффективно. И наконец, Тимур рассказал о свежих предложениях в стандарт, которые могут сделать семантику инициализации C++20 немного более удобной.

О докладчике

076f66d80baa7ee786b6094876cb5cbf.jpgТимур — С++ разработчик, специализирующийся на звуке и музыке, член комитета ISO C++, программный директор Audio Developer Conference (ADC). Он стремится писать чистый код, разрабатывая хорошие инструменты, продвигая эволюцию языка C++ и выстраивая инклюзивные сообщества.


Nicolai Josuttis


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

В этом докладе Николай разобрал все эти ловушки, обсудил причины лежащих за ними идей и архитектуры, дал указания, как обходить проблемы. В качестве побочного эффекта вы сможете глубже познакомиться с новыми возможностями C++17.

О докладчике

929296158deb3ee24a98aabb78412890.pngНиколай — независимый системный архитектор, технический менеджер, автор и консультант. Он разрабатывает средине и большие программные системы для телекоммуникации, финансов и обрабатывающей промышленности.

Он широко известен в сообществе своими докладами и тем, что пишет книги про C++ (The C++ Standard Library and C++ Templates), рассказывает о новых возможностях языка.

Уже в течение 20 лет он — активный член комитета по стандартизации С++.



Полный плейлист со всеми докладами доступен по ссылке. Напоминаем, что новая C++ Russia уже на подходе и состоится 31 октября — 1 ноября 2019 года в Санкт-Петербурге. Билеты на нее можно приобрести на официальном сайте.

© Habrahabr.ru