Лучшие доклады с C++ Russia 2019

Нашли для вас плейлист-подборку лучших докладов с конференции C++ Russia 2019, проведённой JUG Ru Group. Рассказывают про многопоточность, метапрограммирование, улучшение производительности, указатели и многое другое.

1 — Know your hardware: CPU memory hierarchy

Alexander Titov (Intel)

Обзор структуры и алгоритмов иерархии памяти в современном процессоре. Темы включают в себя организацию кэша, принцип локальности и организацию данных, удобную для кэширования. Также даются некоторые практические советы, как избежать распространённых ловушек производительности.

2 — На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки

Андрей Карпов (PVS-Studio)

В докладе даётся ряд советов, на что разработчикам библиотек стоит дополнительно обращать внимание на code review.

3 — Эволюция метапрограммирования: как правильно работать со списками типов

Олег Фахтиев (Яндекс)

Рассказ о метапрограммировании в ретроспективе. В докладе обсуждаются общие подходы в метапрограммировании, а также списки типов. По ходу доклада автор напишет небольшую библиотеку для работы со списками типов, похожую на Boost.Hana.

4 — C++17 — the biggest traps

Nicolai Josuttis

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

5 — Как апгрейдили компилятор и поддерживали кроссплатформенность

Михаил Матросов, Александр Воронков (Align Technology)

Case study переноса кодовый базы в 2 миллиона строк с зависимостью от 80 сторонних библиотек с C++11 на C++17 и GCC 7.3.

6 — Initialisation in modern C++

Timur Doumler

Доклад об инициализации в C++. Сначала речь пойдёт об истории инициализации в C++. Затем автор расскажет о текущих правилах инициализации и распространённых ошибках и сюрпризах. Также разговор затронет свежие предложения по упрощению инициализации в C++20.

7 — ABI compatibility is not a MAJOR problem

Javier García Sogo (JFrog/Conan)

В этом докладе речь идёт об ABI-совместимости, её важности для разработчиков библиотек, а также приводятся примеры вещей, которые влияют на ABI, и методы для уменьшения головной боли. В последней части доклада автор расскажет о Conan — инструменте, который может помочь решить проблемы ABI-совместимости.

8 — Concurrency and parallelism in C++17 and C++20/23

Rainer Grimm (Modernes C++)

Рассказ о том, что принёс в мир конкурентности и параллелизма C++17, и каких улучшений в этой области ожидать от C++20/23.

9 — Метаклассы в C++17: фантастика? Реальность!

Сергей Садовников (Лаборатория Касперского)

Доклад посвящён одному из подходов реализации метаклассов для тех версий компиляторов, которые не поддерживают ни статической рефлексии, ни собственно метаклассов из коробки. В докладе будет рассказано, как именно поддержку метаклассов можно реализовать в виде сторонней утилиты и что можно/нужно сделать для того, чтобы интегрировать результаты работы этой утилиты в собственный код.

10 — Язык программирования Rust — обзор экосистемы

Илья Богданов (Exonum, the Bitfury)

В докладе будет выполнен краткий обзор экосистемы, сложившейся вокруг языка Rust к настоящему времени. Будут рассмотрены нововведения, которые были внесены Rust-сообществом в современную разработку программного обеспечения, а также способы их использования программистами на других языках, включая С++.

11 — Незаменимый С++

Антон Полухин (Яндекс.Такси)

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

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

Андрей Давыдов (JetBrains)

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

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

Андрей Давыдов (JetBrains)

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

14 — Higher-order functions and function_ref

Vittorio Romeo (Bloomberg L.P.)

В этом докладе рассматривается, как функции высшего порядка можно использовать на практике для улучшения качества кода и продуктивности разработчиков.

15 — The hitchhiker’s guide to faster builds

Viktor Kirilov

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

16 — Postmodern immutable data structures

Juan Pedro Bolívar Puente

В этом докладе речь пойдёт об архитектурных преимуществах неизменяемости. Автор покажет, как можно написать очень эффективный неизменяемый векторный тип с помощью современных структур (Relaxed Radix Balanced Trees), а также покажет пример приложения, написанного с применением приведённого в докладе архитектурного стиля.

17 — Шаблоны C++ и базы данных

Сергей Федоров (Яндекс.Такси)

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

18 — Modern C++ allocators

Руслан Арутюнян (Intel)

Автор познакомит слушателей с аллокаторами в целом, расскажет про современные тенденции, какие виды аллокаторов в каких случаях использовать, объяснит, как работает модель пропагации аллокаторов для вложенных контейнеров, и расскажет, что может ждать разработчиков библиотек при поддержке аллокаторов.

19 — Асинхронная разработка на C++

Павел Новиков (Align Technology)

Начиная с C++11 в стандарте появились примитивы для асинхронного выполнения задач. Автор доклада расскажет, какие возможности предоставляет стандартная библиотека сейчас и какие планируется добавить в будущем. Также он расскажет о concurrency::task из PPL и о том, как облегчает написание и понимание написанного кода использование корутин.

20 — Оптимизации времени компиляции. Даём больше информации компилятору

Кирилл Тихонов (DINS)

В докладе будут рассмотрены способы передачи компилятору информации об используемых данных и действиях над ними: от single compilation unit, link time optimization и static initialization до consteval и шаблонного метапрограммирования.

21 — Не слишком глупые указатели в ClickHouse

Алексей Миловидов (Яндекс)

В докладе будет описана механика реализации собственных указателей для ClickHouse, детали их использования для сложных структур данных, примеры современных возможностей C++, необходимых для реализации. Также будет рассказано про несколько возможностей, которых не хватает в стандарте C++, чтобы сделать реализацию более простой.

22 — Рецепты использования умных указателей

Алексей Малов (iSpring)

В стандарт C++11 были введены умные указатели unique_ptr, shared_ptr и weak_ptr, которые кроме упрощения управления динамической памятью могут выступать в виде строительных блоков для создания более сложных конструкций. Из этого доклада вы узнаете ряд полезных приёмов использования как стандартных, так и пользовательских умных указателей.

23 — Монадические парсеры

Александр Гранин

В докладе будут рассмотрены монадические парсеры: чем этот подход отличается от других видов парсинга, какие у него преимущества и недостатки и в чём здесь проявляются такие важные концепции функционального программирования, как функтор, аппликативный функтор и монада.

24 — Move only C++ design

Ivan Čukić (KDE e.V.)

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