company_banner

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

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


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



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


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

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


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


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


    10. The hitchhiker's guide to faster builds


    Viktor Kirilov



    Слайды


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


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

    О докладчике


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




    9. Шаблоны C++ и базы данных


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



    Слайды


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


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


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


    О докладчике


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




    8. Move-only C++ design


    Ivan Čukić



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


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


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


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


    О докладчике


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




    7. Concurrency and parallelism in C++17 and C++20/23


    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.


    О докладчике


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




    6. Метапрограммирование, щадящее компилятор


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



    Любой окунувшийся в мир 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 концепты могут помочь.

    О докладчике


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




    5. Незаменимый С++


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



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


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


    О докладчике


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




    4. Postmodern immutable data structures


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


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



    О докладчике


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




    3. Концепты: упрощаем реализацию классов std utility


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



    Появляющиеся в 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++, знание тонкостей и деталей реализации не требуется.


    О докладчике


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




    2. Initialisation in modern C++


    Timur Doumler



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


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


    О докладчике


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




    1. C++17 — the biggest traps


    Nicolai Josuttis



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


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


    О докладчике


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


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


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




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

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое