Доклады

Лучшие докладчики со всей мира, два насыщенных дня. Если вам тоже есть, о чём рассказать отправляйте заявку. Как обычно, продолжительность доклада не должна превышать 50 минут (с учетом вопросов).

Мы рады докладам о C++(11/14/17), STL, Boost, Qt, любых других библиотеках, тестировании и сборке крупных проектов на С++, асинхронности и конкурентности, etc.

20/04/18
Track C
17:00 - 18:00
Александр Гранин
Александр Гранин
Software Transactional Memory

Параллельное программирование - тема очень многогранная и глубокая. За десятки лет исследований было выработано огромное количество подходов, практик и инструментов, но вряд ли мы можем считать, что язык C++ успевал за этими тенденциями. Начиная со стандарта C++11, были введены такие концепции как std::thread, std::atomic, std::future, std::mutex, а в будущем ожидается, что будут добавлены coroutines - модель асинхронных вычислений. Что ж, это все интересные вещи для изучения, - но речь в докладе пойдет о совершенно ином подходе. Software Transactional Memory (STM) - концепция транзакционно изменяемой модели данных - существует уже давно и имеет ряд реализаций для всех языков. Однако неясными остаются три вопроса: какие есть сценарии использования этой концепции, в чем ее особенности, и что нам может предложить мир С++.

21/04/18
Track B
17:00 - 18:00
Алексей Малов
Алексей Малов
Опыт применения современного C++ в разработке desktop-приложений

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

  • Практика использования паттерна Model-View-Presenter
  • Управление жизненным циклом документа
  • Файловое хранилище на умных указателях
20/04/18
Track D
13:45 - 14:45
Алексей Салмин
Алексей Салмин
Memory Management Tips & Tricks

В 2017 году вопрос выбора аллокатора в C++ не теряет актуальности. В стандарт добавили новый способ выбрать локальный аллокатор для контейнеров (std::pmr), глобальные tcmalloc и jemalloc продолжают развиваться, как и интерфейсы ядра, на которые они опираются. Данный доклад посвящен “нижнему этажу” этой конструкции: особенностям работы mmap и madvise в ядре Linux и влиянию этих особенностей на производительность аллокаторов.

20/04/18
Track B
13:45 - 14:45
Анастасия Казакова
Анастасия Казакова
Отладка кода на C++, без запуска и компиляции

Когда смотришь на шаблоны, рефлексию, генерацию кода на этапе компиляции, метаклассы, возникает ощущение, что C++ поставил себе задачу максимально “спрятать” итоговый код от разработчика. А нетривиальное использование препроцессора (и многочисленные ответвления) может сделать последовательность действий программы очень неочевидной. Конечно, эти подходы избавляют разработчиков от бесконечного copy-paste и повторения похожих частей кодовой базы, но требуют более продвинутой поддержки в инструментах разработки.

Можно ли отлаживать код без непрерывного его перезапуска, без отладчика, да даже без простой компиляции всей кодовой базы? Если ли возможность поиска ошибок в коде, который нельзя собрать или запустить на локальной машине? Есть! Интегрированные среды разработки (IDE) обладают обширными знаниями и пониманием пользовательского кода, и именно они могут предоставить соответствующие инструменты.

В данном докладе будет показано, как можно было бы “отлаживать” макроподстановки, вложенные typedef, понимать типы переменных (которые в современном C++ оказываются зачастую “спрятанными”), отлаживать разные ветки препроцессора или перегрузки операторов, и многое другое с помощью по-настоящему умной IDE. Какие-то из возможностей уже доступны в CLion и ReSharper C++, а какие-то являются просто интересными идеями на будущее, которые было бы интересно обсудить с аудиторией.

20/04/18
Track A
17:00 - 18:00
Andrei Alexandrescu
Andrei Alexandrescu
Fastware

Optimization — making code faster — is an essential ingredient of modern computing. The speed of light is limited, so we're unable to increase computer clock speed anymore; in other news, the matter is composed of discrete atoms so we can't make circuits much smaller than they already are. That means more speed for essential tasks — ranging from speech recognition to self-driving cars to General Artificial Intelligence — is to be found in people's minds.

This talk discusses, with simple examples, a few algorithm design principles that can be applied consistently to improve, or sometimes entirely redesign, algorithms for better performance.

21/04/18
Track B
13:45 - 14:45
Андрей Карпов
Андрей Карпов
Эффективный C++
(Маерс тут ни при чём :)

Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!

20/04/18
Track A
12:45 - 13:45
Arno Schödl
Arno Schödl
From Iterators To Ranges — The Upcoming Evolution Of the Standard Library

Pairs of iterators are ubiquitous throughout the C++ library. It is generally accepted that combining such a pair into a single entity usually termed Range delivers more concise and readable code. Defining the precise semantics of such Range concept proves surprisingly tricky, however. Theoretical considerations conflict with practical ones. Some design goals are mutually incompatible altogether.

21/04/18
Track A
13:45 - 14:45
Dietmar Kühl
Dietmar Kühl
Concept Based Testing

With concepts being added to the next revision of C++ it is expected that new concepts get defined. Each concept defines a set of operations used by generic code. One such use could be a generic test verifying that all parts of a concept are defined and checking generic interactions between a concept’s operations. Ideally, such a test even works with classes only partially modelling a concept to guide the implementation of classes.

This presentation doesn’t use the actual concept extensions but shows how generic tests can be created using features of C++17. For the generic tests the detection idiom and constexpr if are used to determine availability of required operations and gracefully dealing with the abseence of operations. The generic tests should be able to cover basics of classes modelling a concept. Obviously, specific behaviour for classes will still require corresponding tests.

Attendees are expected to be familiar basic C++. However, deep knowledge of template meta programming is not needed.

21/04/18
Track C
16:00 - 17:00
Дмитрий Кожевников
Дмитрий Кожевников
Подводные камни CMake и где они обитают

Система сборки CMake постепенно становится стандартом де-факто для кроссплатформенного программирования на C++. Однако часто она подвергается справедливой критике, в том числе за неудобный скриптовый язык, устаревшую документацию и за то, что одни и те же задачи в ней можно выполнять разными способами, при этом понять, какой из них более правильный в конкретной ситуации, бывает довольно сложно. Я расскажу:

  • частые популярные анти-паттерны и чем они плохи,
  • на каких уровнях абстрации работает CMake, и когда они "протекают",
  • что такое "Modern CMake" и в чем его преимущества,
  • как локализовывать и отлаживать проблемы в CMake-скриптах (в том числе довольно экзотическими средствами).
20/04/18
Track C
12:45 - 13:45
Дмитрий Банщиков
Дмитрий Банщиков
Разделяемые библиотеки без внешних зависимостей

Я расскажу о своём опыте разработки антивирусного движка на C++ в виде разделяемой библиотеки. Уникальной особенностью является отсутствие каких-либо внешних зависимостей (runtime C++ или C). Вся эта связка построена вокруг использования кастомного toolchain'а на GCC для специального таргета, которым собирается libc newlib для этого же таргета, поверх которого собирается libstdc++. Соответственно, разделяемая библиотека собирается через кастомный тулчейн с кастомными libgcc_s, libc, libcstdc++ (изменения только в сборке). Все взаимодействие со средой выполнения осуществляется через ABI разделяемой библиотеки.

Таким образом, внутри библиотеки сохраняется возможность использовать полноценный современный С++ без ограничений (RTTI, exceptions, iostream, etc), что уходит в libstdc++->libc (newlib)| l ibgcc->ABI.

Подобный подход проверялся на тулчейнах GCC/newlib/libstdc++ для Linux, и clang/newlib/libc++ для MacOS.

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

20/04/18
Track D
12:45 - 13:45
Фёдор Короткий
Фёдор Короткий
Память – идеальная абстракция
int* ptr = new int;
*ptr = 42;
delete ptr;

Что на самом деле происходит, когда выполняются эти 3 строчки кода? Мы заглянем внутрь аллокатора памяти, операционной системы и современного железа чтобы дать исчерпывающий ответ на этот вопрос.

20/04/18
Track A
16:00 - 17:00
Herb Sutter
Herb Sutter
New in C++20: The spaceship operator (operator<=>)

The new operator<=> was recently adopted as a language feature for C++20. In this talk, the designer and author of the <=> proposal gives an overview of the feature, discusses its motivation and design, and walks through examples of how to use it. We give particular emphasis to how the feature makes C++ code cleaner to write and read, faster by avoiding redundant work, and more robust by avoiding several important but subtle pitfalls in the more brittle code we previously had to write by hand without this feature.

21/04/18
Track C
13:45 - 14:45
Илья Шишков
Илья Шишков
Как научить языку C++: опыт создания курсов на Coursera

В своём докладе я хочу рассказать:

  • с какими проблемами мы столкнулись в работе над курсами (например, через 3 месяца работы мы выбросили все материалы и начали заново)
  • как мы формируем программу курсов и почему именно так (например, почему слово "указатель" не прозвучало в двух наших первых курсах ни разу)
  • что мы узнали нового, работая над курсами и общаясь со слушателями
  • байки, курьёзы и интересные факты
21/04/18
Track A
12:45 - 13:45
Ivan Čukić
Ivan Čukić
2020: A void_t odyssey

C++ has always had a powerful meta-programming sub-language which allowed library developers to perform magical feats like static introspection to achieve polymorhpic execution without inheritance. The problem was that the syntax was awkward and unnecessarily verbose which made learning meta-programming a daunting task.

With the recent improvements to the standard, and with the features planned for C++20, meta-programming has become much easier, and meta-programs became easier to understand and reason about.

In this talk, we will present a few modern techniques of meta-programming, with main focus on the magical void_t meta-function.

20/04/18
Track B
12:45 - 13:45
Иван Пономарёв
Иван Пономарёв
Crash репорты Android NDK

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

В первой части доклада будут кратко рассмотрены уже имеющиеся наработки: как работает встроенный отладчик Android, какие решения уже существуют. Вторая часть посвящена рассказу о том, как это работает «под капотом»: как получить состояние процессора на момент ошибки, как раскрутить стек вызовов, как узнать номера строк в исходном коде. Будет дан обзор таких библиотек для раскрутки стека, как libcorkscrew, libunwind, libunwindstack.

Доклад будет интересен как Android-разработчикам, в чьих приложениях используется NDK, так и всем остальным для расширения кругозора.

21/04/18
Track C
12:45 - 13:45
Иван Пузыревский
Иван Пузыревский
Асинхронность в программировании

В области разработки высоконагруженных многопоточных или распределенных приложений можно все чаще услышать разговоры об асинхронном коде, в том числе спекуляции о необходимости (отсутствии необходимости) учитывать асинхронность в коде, о понятности (непонятности) асинхронного кода, о его эффективности (неэффективности). В данном докладе мы с вами попробуем более глубоко погрузиться в предметную область: разберем, что такое асинхронность; когда она возникает; как влияет на код, который мы пишем, и на язык программирования, который мы используем. Постараемся разобраться, при чем тут futures & promises, немного поговорим про корутины и акторы. Затронем JavaScript и операционные системы. Цель доклада — сделать более явными компромиссы, возникающие при том или ином подходе к разработке многопоточного или распределенного ПО.

20/04/18
Track A
10:00 - 12:00
Jon Kalb
Jon Kalb
C++ Today: The Beast is Back

This talk will cover why engineers looking for performance choose C++. Jon will present an historical perspective of C++ focusing on what's going on in the C++ community right now and where the language and its user base is heading. With a renewed interest in performance for both data centers and mobile devices, and the success of open source software libraries, C++ is back and it is hot. This talk will explain why C++ is most software engineers' go-to language for performance. You will receive a rough historical sketch that puts C++ in perspective and covers its popularity ups and downs.

This talk is based, in part, on the book "C++ Today: The Beast is Back" published by O'Reilly.

20/04/18
Track A
13:45 - 14:45
Jonathan Boccara
Jonathan Boccara
105 STL Algorithms in Less Than an Hour

We are all aware that we should know the STL algorithms. Including them in our designs allows us to make our code more expressive and more robust. And sometimes, in a spectacular way.

But do you know your STL algorithms?

In this talk, you'll see the 105 algorithms that the STL currently has, including those added in C++11 and C++17. But more than just a listing, the point of this talk is to present the different groups of algorithms, the patterns they form in the STL, and how the algorithms relate together.

This kind of big picture is the best way I know to actually remember them all, and constitute a toolbox chock-full of ways to make our code more expressive and more robust.

21/04/18
Track A
16:00 - 17:00
Rainer Grimm
Rainer Grimm
Best Practices for Concurrency in Modern C++

With the standardisation of C++11, we got in C++ a multithreading library and a memory model. The library has the basic building blocks such as atomics, threads, tasks, locks, and condition variables. The memory model provides guarantees for the thread-safe usage of this basic building blocks.

Seven years later, we have a lot of best practices to apply multithreading and the memory model in a safe way. My talk will be precisely about these best practices to general rules for concurrency, special rules for the multithreading library, and special rules for the memory model. The focus of this best practices will be far beyond C++.

20/04/18
Track B
16:00 - 17:00
Сергей Шамбир
Сергей Шамбир
Когда хорош процедурный C++

Этот доклад будет идти по следам докладов о повседневном C++ от Михаила Матросова, развивая ещё одно правило: изолировать код в стиле C. Рассмотрим, чем хороши библиотеки на C (такие как SQLite, OpenGL, OpenSSL, libclang) и почему без них нельзя жить. Потом разберёмся чем плохи объектно-ориентированные библиотеки категории “C++ wrapper for X” Такие как curlcpp. Затем посмотрим, как можно на процедурном подмножестве C++ сделать хороший “C++ wrapper for X”

20/04/18
Track C
13:45 - 14:45
Сергей Васильев
Сергей Васильев
Статический анализ: ищем ошибки... и уязвимости?

Новости об очередной найденной уязвимости регулярно всплывают то тут, то там. Сопутствующие потери $, как правило, колоссальны. Поэтому вместо исправления уязвимостей, следует не допускать их появления.

Один из способов борьбы с ошибками в коде – использование статического анализа. Но насколько он подходит для поиска уязвимостей? И так ли велика разница между простыми ошибками и уязвимостями с точки зрения кода?

Эти вопросы мы и обсудим в ходе доклада, а заодно поговорим о том, каким образом использовать статический анализ так, чтобы извлечь из него максимум пользы.

21/04/18
Track A
17:00 - 18:00
Simon Brand
Simon Brand
Modern C++ Parallelism from CPU to GPU

Parallel programming can be used to take advantage of multi-core and heterogeneous architectures and can significantly increase the performance of software. Modern C++ has gone a long way to making parallel programming easier and more accessible; providing both high-level and low-level abstractions. C++17 takes this further by providing high level parallel algorithms, and much more is expected in C++20. This talk will give an overview of the current parallelism utilities available, and look to the future of how GPUs and heterogeneous systems can be supported through new standard library features and other standards like SYCL.

Platinum спонсор

Gold спонсоры

Silver спонсоры

Community спонсоры