В этой статье вас ждёт десять лучших докладов от Андрея Александреску, Дэвида Вандервурда, Джона Калба и многих других.
Фичи компилятора C++, асинхронность, многопоточность, параллелизм, модель памяти, алгоритмы и STL, метапрограммирование и рефлекшен, огромное множество тем.
Всё это — записи с конференции C++ Russia, самой большой в истории. Восемь сотен участников, немаленький зал, спикеры с мировым именем. Прошёл год, но большинство докладов ничуть не утратило своей актуальности. Впрочем, и неудивительно — именно такие доклады и попадают в топ по оценке участников.
Формат таков:
- Обязательное видео на YouTube
- Слайды, если есть
- Подробное описание доклада на русском языке
- Краткая биография докладчика
Плюс у вас есть комментарии Хабра, чтобы обсудить увиденное. Реклама на ютубе отключена, никто не будет мешать. Есть всё, чтобы начать смотреть прямо сейчас.
10. Memory Management Tips & Tricks
Алексей Салмин
В 2017 году вопрос выбора аллокатора в C++ не теряет актуальности. В стандарт добавили новый способ выбрать локальный аллокатор для контейнеров (std::pmr
), глобальные tcmalloc
и jemalloc
продолжают развиваться, как и интерфейсы ядра, на которые они опираются. Этот доклад посвящен «нижнему этажу» конструкции: особенностям работы mmap
и madvise
в ядре Linux и влиянию этих особенностей на производительность аллокаторов.
О докладчике
Алексей Салмин закончил ММФ НГУ, занимался символьными вычислениями и статическим анализом, работал в Intel в Новосибирске. С 2016 года работает в московском офисе Яндекса, разрабатывает backend realtime-поиска.
9. Best Practices for Concurrency in Modern C++
Rainer Grimm
Стандартизация C++11 дала нам модель памяти и многопоточность. В библиотеке есть такие стандартные штуки вроде атомиков, тредов, тасков, локов, условных переменных. Модель памяти дает гарантии на многопоточное использование этих базовых блоков.
Прошло семь лет, появились практики безопасного применения многопоточности и модели памяти. В этом докладе мы подробно узнаем об этих практиках: об общих правилах многопоточности и специальных правилах как для библиотечных примитивов, так и для модели памяти. Рассматриваемые вопросы затрагивают темы более широкие, чем только язык C++.
О докладчике
Rainer Grimm проработал архитектором, тимлидом и инструктором более 20 лет. В свободное время он любит писать статьи о C++, Python и Haskell и выступать на конференциях. Он ведет блог «Modern C++». Сейчас он докладчик по темам современного C++ и Python. O'Reilly и Leanpub издают несколько его книг: «C++11 fur Programmierer», «C++», «C++ — Standardbiliothek», «The C++ Standard Library».
8. 2020: A void_t odyssey
Ivan Cukic
В C++ всегда присутствовало мощное подмножество языка для метапрограммирования, позволяющее разработчикам выполнять магические приёмы вроде статической интроспекции для обеспечения полиморфного выполнения без наследования. Проблема в том, что синтаксис этот весьма извращенный и излишне многословный — всё это превращает метапрограммирование в довольно устрашающую задачу.
Последние улучшения в стандарте, объединённые с новыми фичами C++20, делают метапрограммирование более простым, а сами метапрограммы — более читаемыми и понятными.
В этом докладе мы посмотрим на современные техники метапрограммирования, фокусируясь на магической метафункции void_t
.
Кстати, на C++ Russia 2019 в Москве Иван выступит с докладом «Move-only C++ design», а также проведет тренинг «Applied functional programming in C++»: далека ли STL от функционального программирования, что такое функциональные объекты, std::invoke и монады, монады, монады. И ещё немного монад. Тренинг Ивана — не для начального уровня, он подойдет мидлам, которые хотят открыть пошире двери восприятия.
О докладчике
Иван работает в департаменте PhD Computer Science факультета математики в Белградском университете, специализируясь на дизайне языков программирования. Давний контрибьютор в KDE, работающий над Plasma и низкоуровневыми фреймворками для анализа и управления действиями пользователя. Мейнтейнер KActivities, Contour и Lancelot.
7. Modern C++ Parallelism from CPU to GPU
Simon Brand
Параллельное программирование можно использовать для извлечения пользы из многоядерных и гетерогенных архитектур, существенно увеличивая производительность софта. Современный C++ прошёл долгий путь по упрощению процесса параллельного программирования благодаря введению как высокоуровневых, так и низкоуровневых абстракций. C++17 продвинулся ещё дальше и дал нам новые высокоуровневые параллельные алгоритмы, и от C++20 ожидается ещё больше. В этом докладе мы поучаствуем в обзоре существующих утилит для организации параллелизма и заглянем в будущее, где GPU и гетерогенные системы получат поддержку новыми фичами стандартной библиотеки, посмотрим на новые стандарты вроде SYCL.
О докладчике
Саймон — разработчик GPGPU-тулчейна с упором на C++. Нездорово любит шаблонное метапрограммирование и самые тёмные стороны языка. Его легко можно встретить в комментариях на StackOverflow, C++ канале в Slack или на митапах сообщества C++ Edinburgh, где он является одним из организаторов. Любит обсуждать вопросы формализмов в языке, хаки на шаблонах, пиво, виски, экспериментальное кино и творчество Carly Rae Jepsen.
6. Память – идеальная абстракция
Фёдор Короткий
int* ptr = new int;
*ptr = 42;
delete ptr;
Что на самом деле происходит, когда выполняются эти 3 строчки кода? Мы заглянем внутрь аллокатора памяти, операционной системы и современного железа, чтобы дать исчерпывающий ответ на этот вопрос.
О докладчике
Фёдор — выпускник Физтеха, занимался High Frequency Trading на московской бирже. Работает в Яндексе, разрабатывает систему хранения и обработки данных YT. Преподаёт С++ на первом курсе школы анализа данных.
5. 105 STL Algorithms in Less Than an Hour
Jonathan Boccara
Все мы знаем, что неплохо бы знать алгоритмы STL. Используя их при построении архитектуры, можно сделать её более выразительной и надежной. Иногда — весьма значительно и эффектно.
А вы уже пришли к осознанию ваших алгоритмов?
В этом докладе вы увидите все 105 алгоритмов, включая те, что добавились в 11 и 17 стандартах. Но это не просто перечисление — суть доклада в том, чтобы показать наличие в этих алгоритмах системы, групп и паттернов, в которые они организуются, и как они относятся друг к другу.
Эта большая картина — лучший способ запомнить их все и осмыслить как полный набор инструментов и способов сделать код более выразительным и более надежным.
О докладчике
Jonathan Boccara обожает C++ и в особенности — вопросы написания понятного выразительного кода. В частности, поэтому он ведёт блог «Fluent C++». А ещё он работает senior developer в компании Murex, где ворочает огромными кодовыми базами на С++, предназначенными для использования в финансах. У них в компании есть интересная практика каждый день делать короткие доклады в формате «dailies», которые он и ведёт.
4. Асинхронность в программировании
Иван Пузыревский
В области разработки высоконагруженных многопоточных или распределенных приложений можно все чаще услышать разговоры об асинхронном коде, в том числе спекуляции о необходимости (отсутствии необходимости) учитывать асинхронность в коде, о понятности (непонятности) асинхронного кода, о его эффективности (неэффективности). В данном докладе мы с вами попробуем более глубоко погрузиться в предметную область: разберем, что такое асинхронность; когда она возникает; как влияет на код, который мы пишем, и на язык программирования, который мы используем. Постараемся разобраться, при чем тут futures & promises, немного поговорим про корутины и акторы. Затронем JavaScript и операционные системы. Цель доклада — сделать более явными компромиссы, возникающие при том или ином подходе к разработке многопоточного или распределенного ПО.
О докладчике
Иван начал работать в Яндексе в 2009 году в отделе лингвистических технологий в Поиске. Сейчас занимается разработкой систем распределённого хранения и обработки данных. Выпускник кафедры математической логики и теории алгоритмов механико-математического факультета МГУ. Преподаватель ШАД.
3. C++ Today: The Beast is Back
Jon Kalb
Это доклад, частично основанный на книге «C++ Today: The Beast is Back» издательства O'Reilly. В этом докладе мы немного поспекулируем, почему инженеры, желающие писать производительный код, выбирают именно C++. Джон представит историческую перспективу фокусировки на C++, расскажет, чем живёт сообщество C++ прямо сейчас и куда направляется язык и его аудитория. В последнее время эффективным кодом заинтересовались все, от производителей мобилок до больших датацентров, поэтому C++ с его опенсорсными библиотеками снова стал горячей темой. Этот доклад четко объясняет, почему большинство инженеров выбирают для всего этого именно C++. Имеется общая зарисовка C++ в масштабе истории с объяснениями точек роста и падения популярности.
О докладчике
Джон кодит на C++ более 20 лет. За это время он успел поучаствовать в C++ проектах компаний Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun, Yahoo! и ещё в парочке компаний, о которых никто всё равно не слышал. Он — председатель Boost Steering Committee, а также занимается программой C++ трека в Silicon Valley Code Camp и является одним из управляющих C++ Now (aka BoostCon). В 2014 году он получил Microsoft Most Valuable Professional.
2. Reflective Metaprogramming in C++
Daveed Vandevoorde
Однажды комитет стандартизации C++ организовал подгруппу «SG-7», занимающуюся изучением возможностей реализовать рефлекшн. Недавно эта группа занялась ещё и метапрограммированием и сделала несколько важных решений относительно того, как будет выглядеть возможное решение. В этом докладе мы посмотрим в прошлое, которое довело нас до жизни такой, и порассуждаем над возможностями нативной поддержки «рефлективного метапрограммирования» в языке C++.
О докладчике
Дэвид — бельгийский учёный, живущий рядом с Принстоном в США. Он является вице-президентом по инженерии в Edison Design Group, где контрибьютит, в основном, в их собственный фронтенд для C++ компилятора. Он активно участвует в комитете по стандартизации C++, где занимается эволюцией ядра языка.
1. Unexpected expected
Andrei Alexandrescu
Написание кода, устойчивого к ошибкам — боль, боль на любом языке. Исключения хоть и являются политкорректным способом сигнализировать об ошибках в C++, но во множестве приложений приходится использовать коды возврата — по причинам, связанным с простотой понимания, простотой локальной обработки, эффективностью сгенерированного кода и так далее.
В этом докладе мы посмотрим, как теорию и практику можно объединить для решения проблем с обработкой ошибок. Обобщенный тип Expected
можно использовать как локально (в стиле кодов возврата), так и централизованно (в стиле исключений), объединяя преимущества обоих подходов.
О докладчике
Румынский разработчик Андрей Александреску является экспертом по широкому набору вопросов, включая архитектуру и реализацию программных систем, дизайн языков программирования, архитектуру библиотек, все аспекты языков C++ и D, машинное обучение и анализ естественных языков. Его креативный подход к решению проблем, широчайшие знания и харизматичность делают Андрея одним из самых популярных докладчиков в мире.
Книги и статьи Андрея повлияли на всю индустрию. Он — автор таких книг-бестселлеров, как «Modern C++ Design», «C++ Coding Standards» (вместе с Herb Sutter), «The D Programming Language», а также статей вроде «Simplify Your Exception-Safe Code — Forever» (написанной вместе с Petru Marginean) и «Mojo: Move of Joint Objects». Полный список его работ можно посмотреть здесь.
Следующая конференция C++ Russia пройдёт 19-20 апреля в Москве, то есть — совсем скоро. Новая программа, новые докладчики, а еще целый день тренингов. Программу можно посмотреть на официальном сайте, там же можно приобрести билеты.
Комментарии (11)
masterspline
04.03.2019 19:14Я просмотрел список и у меня создалось впечатление, что доклады про память и доклад про асинхронность от товарищей из яндекса я уже видел в записях с прошедшего C++Russia (доклады отличные, узнал много полезного). В этих докладах есть что-то новое, имеет ли смысл их пересматривать?
olegchir Автор
04.03.2019 21:44Это и есть доклады с прошлого C++ Russia, за 2018 год. Если уже видели — то только чтобы освежить память.
klirichek
05.03.2019 06:02Ммм… а что за команда дрессированных обезьян испортила все видео? Как теперь до них добраться?
klirichek
05.03.2019 16:09(поутру что-то было с ютубом — и вместо каждого ролика была характерная ошибка 500 в ютубовском стиле.
выглядело это в целом довольно органично и даже тонко; так С++ программистов вряд ли кто догадался бы обзывать)Kobalt_x
05.03.2019 18:15+1казалось бы причем тут C++ если backend youtube это по рассказам Go + Python + Java.
lepota
Спасибо. Очень интересный материал.