- PVSM.RU - https://www.pvsm.ru -
Этот хабрапост объединяет десять лучших докладов от таких спикеров, как Nicolai Josuttis, Timur Doumler, Андрей Давыдов и многих других.
C++17/20/23, concepts, immutable data structures, concurrency, parallelism, metaprogramming — всё это темы конференции C++ Russia 2019, прошедшей этой весной в Москве. Более шести сотен участников, известные международные спикеры, глубокие доклады. Обратите внимание — доклады такие, что устареют очень нескоро, а применить полученные знания можно хоть сейчас.

Формат таков:
Не стесняйтесь писать комментарии! Кстати, в плейлисте, опубликованном под катом, есть не только топ-10. И мы выключили рекламу на YouTube, так что никто не будет мешать.
Все доклады идут от «младшего» к «старшему» по рейтингу, но различия между местами лучшей десятки минимальны и сильно зависят от методики оценки. Незначительно изменив методику, можно сильно поменять места. Поэтому смотрите все!
Полный плейлист конференции находится по ссылке [1].
Viktor Kirilov
Слайды [3]
C++ известен за свою производительность, быстродействие, отсутствие стандартной системы сборки и менеджера пакетов, сложность и продолжительность компиляции. Невозможность быстрой итеративной разработки — один из величайших убийц продуктивности разработчика. Этот доклад предназначен для всех, кто хочет улучшить последние три пункта: вначале некоторые идеи, почему компиляция и линковка занимают столько времени, потом — список техник и инструментов для решения проблемы, например:
О докладчике
Шесть лет профессионального опыта в C++ в индустрии игр и VFX. Сейчас Виктор занимается разработкой open source и время от времени — обычной контрактной работой. Из последних интересных задач — реализация горячей подмены кода в рантайме языка Nim. Кроме того, он является автором doctest — «самой быстрой и мощной single-header-библиотеки тестирования для C++». Интересуется разработкой игр и игровых движков, высокопроизводительного кода, криптовалют, оптимизацией рабочего процесса и интеграцией хороших практик разработки, таких как современные инструменты статического анализа и инструментации. Виктор живет в городе София (Болгария), и программирование — одновременно его профессия и хобби. Есть свой сайт: http://onqtam.com/ [4]
Сергей Федоров
Слайды [6]
Когда мы работаем с БД, мы зачастую получаем сырые буферы, в то время как хочется получать данные в виде структур, классов и контейнеров C++.
Рассказ о проектировании и реализации драйвера PostgreSQL с человеческим интерфейсом с применением почти всех доступных на данный момент языковых средств C++17.
Описанный в докладе подход можно адаптировать практически к любому протоколу уровня приложений.
О докладчике
Сергей Федоров — ведущий разработчик в «Яндекс.Такси», занимается разработкой асинхронного фреймворка для бэкенда Такси. Большой любитель метапрограммирования и open source.
Ivan Čukić
RAII отпускает захваченные ресурсы. Но есть ресурс, который не вернуть — это время.
Одна из наиболее затратных по времени ошибок — создание ненужных копий. Move-семантика C++11 сделала шаг в правильном направлении. Она позволяет отдать ненужные данные кому-то еще без штрафа на создание копии и без риска гонок по данным, когда у данных много пользователей.
В этом докладе мы поучаствуем в обсуждении подхода к архитектуре, который разрешает использование только специальных некопируемых перемещаемых типов под названием «линейные типы». Будут обсуждаться возможности C++, которые позволят форсировать использование именно таких типов.
Для этого предлагается использовать концепты из C++20, &&-квалифицированные функции и т.п.
О докладчике
Иван Чукич — автор книги «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.
О докладчике
Райнер Гримм работает архитектором, тимлидом и инструктором около 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 можно делать удивительные, а иногда даже полезные вещи. С другой стороны, опытный С++ разработчик понимает, что «можно» не значит «нужно» и что за злоупотребление метапрограммированием приходится платить. Один из основных сдерживающих факторов — время компиляции, поэтому в докладе рассматривается, какие операции/техники наиболее дороги с точки зрения компилятора и как их можно избегать.
В частности, были освещены следующие вопросы:
О докладчике
Последние 3 года Андрей работает в команде ReSharper C++ в JetBrains. В прошлом занимался промышленным программированием в областях, связанных с ГИС-ами и системами 3D-визуализации.
Антон Полухин
Каждый новомодный язык программирования норовит заявить о том, что он быстрее, надёжнее и вообще по всем параметрам в несколько раз лучше 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».
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 в Гранаде.
Андрей Давыдов
Появляющиеся в 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-решения. К примеру:
От слушателей предполагается общее представление, что такое концепты и SFINAE. Также будет полезно знакомство со стандартной библиотекой C++, знание тонкостей и деталей реализации не требуется.
О докладчике
Последние 3 года Андрей работает в команде ReSharper C++ в JetBrains. В прошлом занимался промышленным программированием в областях, связанных с ГИС-ами и системами 3D-визуализации.
Timur Doumler
Общеизвестно, что семантика инициализации — одна из наиболее сложных частей C++. Существует множество видов инициализации, описываемых разным синтаксисом, и все они взаимодействуют сложным и вызывающим вопросы способом. C++11 принес концепцию «универсальной инициализации». К сожалению, она привнесла еще более сложные правила, и в свою очередь, их перекрыли в C++14, C++17 и снова поменяют в C++20.
В этом докладе Тимур вначале подвел исторические итоги эволюции инициализации в С++. Он дал системный обзор текущего варианта правила инициализации, типичных проблем и сюрпризов. Представил практичные правила того, как использовать все эти правила эффективно. И наконец, Тимур рассказал о свежих предложениях в стандарт, которые могут сделать семантику инициализации C++20 немного более удобной.
О докладчике
Тимур — С++ разработчик, специализирующийся на звуке и музыке, член комитета ISO C++, программный директор Audio Developer Conference (ADC). Он стремится писать чистый код, разрабатывая хорошие инструменты, продвигая эволюцию языка C++ и выстраивая инклюзивные сообщества.
Nicolai Josuttis
C++17 — это огромная комбинация небольших новых возможностей, как в языке, так и в библиотеке. Эти возможности не только позволяют делать вам больше нового, но и предоставляют новые способы стрелять по ногам — куда чаще, чем вы ожидали. Это не теория. Это происходит в реальной жизни, здесь и сейчас.
В этом докладе Николай разобрал все эти ловушки, обсудил причины лежащих за ними идей и архитектуры, дал указания, как обходить проблемы. В качестве побочного эффекта вы сможете глубже познакомиться с новыми возможностями C++17.
О докладчике
Николай — независимый системный архитектор, технический менеджер, автор и консультант. Он разрабатывает средине и большие программные системы для телекоммуникации, финансов и обрабатывающей промышленности.
Он широко известен в сообществе своими докладами и тем, что пишет книги про C++ (The C++ Standard Library [18] and C++ Templates [19]), рассказывает о новых возможностях языка.
Уже в течение 20 лет он — активный член комитета по стандартизации С++.
Полный плейлист со всеми докладами доступен по ссылке [1]. Напоминаем, что новая C++ Russia [20] уже на подходе и состоится 31 октября – 1 ноября 2019 года в Санкт-Петербурге. Билеты на нее можно приобрести на официальном сайте [21].
Автор: Олег Чирухин
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/326418
Ссылки в тексте:
[1] находится по ссылке: https://www.youtube.com/playlist?list=PLZN9ZGiWZoZo3hYXXOn6NZAi3YzUETzy2
[2] The hitchhiker's guide to faster builds: https://2019.cppconf-moscow.ru/talks/4hyczllx72s6gqq2isucy0/
[3] Слайды: https://slides.com/onqtam/faster_builds
[4] http://onqtam.com/: http://onqtam.com/
[5] Шаблоны C++ и базы данных: https://2019.cppconf-moscow.ru/talks/3zbzmnvl2qqmyfx61jlrql/
[6] Слайды: https://assets.ctfassets.net/oxjq45e8ilak/4YubsfskRBgTNq4s6Wx6h7/6adf149eb7094db068228d5dd91f5ca0/Sergey_Fedorov_Shablony_C_i_bazy_dannykh.pdf
[7] Move-only C++ design: https://2019.cppconf-moscow.ru/talks/11auqe0dbeawgemasoqws2/
[8] Concurrency and parallelism in C++17 and C++20/23: https://2019.cppconf-moscow.ru/talks/6hdip4v8eo46ii6eeoiw2a/
[9] Метапрограммирование, щадящее компилятор: https://2019.cppconf-moscow.ru/talks/6lf5gnsfecyae8ek0u2ymy/
[10] Незаменимый С++: https://2019.cppconf-moscow.ru/talks/6m9dubhdowimis6g8womwe/
[11] Postmodern immutable data structures: https://2019.cppconf-moscow.ru/talks/6mfmvol8iguwd8p4exulld/
[12] https://github.com/arximboldi/immer: https://github.com/arximboldi/immer
[13] https://github.com/arximboldi/ewig: https://github.com/arximboldi/ewig
[14] https://github.com/arximboldi/lager: https://github.com/arximboldi/lager
[15] Концепты: упрощаем реализацию классов std utility: https://2019.cppconf-moscow.ru/talks/571hb6uadyeikamsm2kusa/
[16] Initialisation in modern C++: https://2019.cppconf-moscow.ru/talks/6agyo6ro5ebrb45kagrw1i/
[17] C++17 — the biggest traps: https://2019.cppconf-moscow.ru/talks/75xt7yxs4phphnnxq0rygs/
[18] The C++ Standard Library: http://www.cppstdlib.com/
[19] C++ Templates: http://www.tmplbook.com/
[20] C++ Russia: https://cppconf.ru/?utm_source=habr&utm_medium=462939
[21] приобрести на официальном сайте: https://cppconf-piter.ru/registration/?utm_source=habr&utm_medium=462939
[22] Источник: https://habr.com/ru/post/462939/?utm_source=habrahabr&utm_medium=rss&utm_campaign=462939
Нажмите здесь для печати.