Хабрахабр

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

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

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

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

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

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

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

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

Viktor Kirilov

Слайды

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

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

О докладчике

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

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

Слайды

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

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

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

О докладчике

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

Ivan Čukić

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

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

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

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

О докладчике

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

Rainer Grimm

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

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

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

О докладчике

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

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

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

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

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

О докладчике

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

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

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

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

О докладчике

Автор нескольких принятых предложений к стандарту языка C++. Представитель России в ISO на международных заседаниях рабочей группы по стандартизации 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). Не верите? Код не просто супер-простой, он еще и обогнал по производительности большинство похожих программ. Откройте доклад и удостоверьтесь сами!

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

О докладчике

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

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

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

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

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

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

О докладчике

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

Timur Doumler

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

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

О докладчике

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

Nicolai Josuttis

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

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

О докладчике

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»