Хабрахабр

Десятка лучших докладов 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 года в Санкт-Петербурге. Полный плейлист со всеми докладами доступен по ссылке. Билеты на нее можно приобрести на официальном сайте.

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть