Доклады

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

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

25/02/17
Track B
12:45 - 13:45
Александр Боргардт
Александр Боргардт
Модели акторов в С++ миф или реальность.

В настоящее время многие разрабатываемые решения носят характер сложных или распределенных систем.

Для построения таких систем часто используются Erlang, Elixir или Akka + family language of JVM. Благодаря чему они так хороши?

В Erlang, Elixir и Akkk применяется модель акторов на уровне языка или библиотеки как базовый подход.

Почему же С++ разработчики должны быть обделены?

Рассмотрим применение модели акторов на примере задачи из продакшена.

Поговорим о сложностях, которые встречаются при применении модели акторов.

В процессе обсудим "подводные камни", которые можно встретить в той или иной реализации модели акторов.

25/02/17
Track C
12:45 - 13:45
Алексей Кутумов
Алексей Кутумов
C++ без исключений, часть 3

В своих прошлых докладах (http://cpp-russia.ru/?p=198, и http://cpp-russia.ru/?page_id=1239) я рассказывал о C++ без исключений, как с эти жить, как работать. Этот доклад является продолжением этой серии. Я рекомендую освежить в памяти предыдущие доклады, чтобы наша работа была более продуктивной. Мы обсудим механизмы создания, копирования и перемещения объектов, механизмы аллокации и деаллокации памяти, а также обработку ошибок и исключений. Также мы обсудим проблемы и неудобства, которые испытывает программист, когда пишет код без исключений. В конце, я попытаюсь показать, как можно проектировать структуры данных, контейнеры для удобной работы в средах с исключениями и без исключений.

24/02/17
Track A
12:45 - 13:45
Антон Бикинеев
Антон Бикинеев
Reflection in C++Next

На протяжении всего существования C++ тема компайл-тайм рефлексии поднимается постоянно, но, к сожалению, до сих пор Стандарт языка не дает достаточных возможностей для извлечения и манипулирования компайл-тайм информацией. Большое количество библиотек и препроцессоров было придумано для того, чтобы решить эту проблему, начиная от простых макросов и заканчивая Qt-moc или ODB. В докладе Антон расскажет о том, как на эту проблему смотрит Комитет по Стандартизации: какие решения были предложены, и какое стало доминирующим.

25/02/17
Track B
16:00 - 17:00
Антон Наумович
Антон Наумович
Гарантии качества для крупных С++ проектов

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

25/02/17
Track A
10:00 - 12:00
Полухин Антон
Полухин Антон
Как делать не надо: C++ велосипедостроение для профессионалов

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

  • Copy-On-Write
  • разработке без оглядки на готовые решения и к чему это приводит
  • force inline
  • оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
  • бездумно отключаемых оптимизациях компилятора
  • тонкостях стандартной библиотеки для повседневного использования
  • супер качественном велосипедостроении
24/02/17
Track C
13:45 - 14:45
Денис Кормалев
Денис Кормалев
История одного бага

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

25/02/17
Track A
13:45 - 14:45
Дмитрий Вьюков
Дмитрий Вьюков
Fuzzing: The New Unit Testing

Фаззинг - это тестирование программ на неправильных, неожидаемых или случайных входных данных. В докладе я расскажу о типах фаззеров, о том, как они работают и о существующих реализациях. Мы напишем и запустим настоящий фаззер. Найдем HeartBleed менее, чем за минуту. Так же я расскажу о том, как фаззеры могут угадывать правильные CRC чексуммы во входных данных, помогать с регрессионным тестированием, находить логические ошибки в коде и о том, как мы используем фаззинг в Google.

25/02/17
Track A
16:00 - 17:00
Юрий Ефимочев
Юрий Ефимочев
clang-tidy: путешествие внутрь C++ Abstract Syntax Tree

Семейство библиотек clang предоставляет разработчикам широчайшие возможности по реализации инструментов анализа C++ кода. Одним из таких инструментов является статический анализатор C++ кода clang-tidy. В докладе я расскажу как можно расширить возможности этого анализатора собственным проверками и где все это можно применить в процессе разработки. Попутно будут рассмотрены некоторые занимательные особенностями внутренней механики(абстрактного синтаксического дерева) С++.

25/02/17
Track A
17:00 - 18:00
Евгений Зуев
Евгений Зуев
С++ в России: Стандарт языка и его реализация

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

25/02/17
Track C
17:00 - 18:00
Евгений Крутько
Евгений Крутько
C++17: параллельная версия стандартных алгоритмов

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

25/02/17
Track B
13:45 - 14:45
Евгений Охотников
Евгений Охотников
Для чего мы делали собственный акторный фреймворк и что в итоге получили?

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

24/02/17
Track C
17:00 - 18:00
Григорий Демченко
Григорий Демченко
Универсальный адаптер

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

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

24/02/17
Track B
16:00 - 17:00
Илья Шишков
Илья Шишков
Фитнес для вашего кода: как держать его в форме

Во время моего выступления мы поговорим о принципе "Minimize coupling, maximize cohesion". Обсудим, что это такое и что значат эти непонятные слова. Кроме того на приближенном к реальности примере мы рассмотрим, как, применяя указанный принцип, можно держать ваш код в форме, чтобы он был готов ко всем неожиданностям, которые подстерегают ваш проект в течение его жизни.

24/02/17
Track A
17:00 - 18:00
Ivan Cukic
Ivan Cukic
Going functional

Functional programming is often said to be necessary in multi-threaded environments, but that is only one part of the story. Avoiding mutation helps avoid explicit synchronization of concurrent processes, but it can also be helpful in other circumstances.

In this talk, we are going to cover the basic ideas of functional programming and functional software design. We will focus mainly on how to design stateful software that never mutates any data, and how to do it optimally.

25/02/17
Track C
16:00 - 17:00
Максим Хижинский
Максим Хижинский
Итераторы в lock-free структурах данных

Итераторы и конкурентные map/set - на первый взгляд, несовместимые понятия. В мире lock-free, где содержимое мапы динамично меняется, пройтись по всем элементам контейнера и не упасть, казалось бы, невозможно. Или все же возможно?.. Какими свойствами должен обладать конкурентный контейнер, чтобы быть итерабельным?

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

Для всех, кому интересно, как lock-free выглядит изнутри.

24/02/17
Track B
17:00 - 18:00
Михаил Матросов
Михаил Матросов
Повседневный С++: алгоритмы и итераторы

Я рассмотрю ряд простых прикладных задач и покажу, как их можно эффективно и элегантно решить с помощью стандартных средств современного С++. Доклад включает работу с залом: участники будут предлагать свои улучшения для конкретных примеров кода, а также отвечать на поставленные вопросы (например, найти ошибку в приведённом примере). Самые активные участники получат призы. Доклад рассчитан на базовые знания языка.

25/02/17
Track C
13:45 - 14:45
Evgeniy Muralev, Mark Vince
Evgeniy Muralev, Mark Vince
Working with the compiler, not against it

The talk will look at limitations of compilers when creating fast code and how to make more effective use of both the underlying micro-architecture of modern CPU's  and how algorithmic optimizations may have surprising effects on the generated code. We shall discuss several specific CPU architecture features and their pros and cons in relation to creating fast C++ code. We then expand with several algorithmic techniques, not usually well-documented, for making faster, compiler friendly, C++.

 

Note that we shall not discuss caching and related issues here as they are well documented elsewhere.

24/02/17
Track A
13:45 - 14:45
Rainer Grimm
Rainer Grimm
Programming at compile time

What have classical template metaprograming, the new type-traits library, and the constexpr functions in common? All three will be executed at compile time. Therefore, they combine high performance with enriched functionality.

High performance, because computations can be moved from runtime time to compile time. Enriched functionality, because computation at compile time can modify the resulting C++ source code. But how does the whole magic work? I will give you in my presentation a view under the hood. Therefore, you can better understand und use programming at compile time.

24/02/17
Track C
16:00 - 17:00
Роман Орлов
Роман Орлов
Догнать и перегнать boost::lexical_cast или быстрое преобразование целого числа в строку

Из документации к библиотеке Boost Lexical cast известно, что преобразование целого числа в строку lexical_cast выполняет быстрее других стандартных средств. Можно ли написать более быстрый алгоритм с не меньшей степенью обобщенности?

В докладе будет рассмотрена реализация такого алгоритма, который на синтетических тестах опережает lexical_cast в 2-5 раз в зависимости от компилятора и флагов оптимизации. Особенность реализации состоит в отсутствии циклов и рекурсивных вызовов времени исполнения - только рекурсия на этапе компиляции. Также будут затронуты особенности компиляции предлагаемого решения на Сlang и GCC.

25/02/17
Track B
17:00 - 18:00
Руслан Морозов
Руслан Морозов
Внедрение практик безопасного кодирования

С++ - это мощнейший и очень динамически развивающийся язык программирования, позволяющий строить высокопроизводительные системы любой сложности. Один из главных принципов языка - "You don't pay for what you don't use". Такой подход возглагает большую отвественность на программиста в вопросах организации доступа к системным ресурсам. Из-за большого доверия, оказываемого компилятором программисту, любые ошибки в коде могут приводить к появлению уязвимостей в программной системе.

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

  • примеры типичных ошибок кода, приводящих к уязвимостям
  • существующие стандарты безопасного кодирования и как их внедрять
  • тандем GCC + Clang в контексте поиска проблемного кода и генерации более безопасного кода
  • использование санитайзеров
  • тестовое покрытие кода
  • статические анализаторы и почему их должно быть много
  • регулярное fuzzing тестирование
24/02/17
Track B
12:45 - 13:45
Евгений Рыжков, Андрей Карпов
Евгений Рыжков, Андрей Карпов
Как потратить 10 лет на разработку анализатора кода

Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!

24/02/17
Track A
16:00 - 17:00
Сергей Шамбир
Сергей Шамбир
Адаптация Promise/A+ для взаимодействия между C++ и Javascript

Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:

  • адаптировать Promise/A+ из Javascript для C++
  • автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
  • сделать аналог std::bind для weak_ptr.

Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.

24/02/17
Track C
10:00 - 12:00
Сергей Зубков
Сергей Зубков
C++ Core Guidelines

Эволюция C++ приводит к появлению новых конструкций, приемов и целых направлений программирования, но даже глубокое понимание каждой новой конструкции в отдельности не означает что ee применение, само по себе, сделает программу лучше, проще, эффективнее. Для решения этой проблемы Бъярне Страуструп и Херб Саттер создали C++ Core Guidelines: центральный набор правил и рекомендаций основанных на богатом опыте и принципах написания программ в стиле современного С++. В совокупности с библиотекой GSL и статическими анализаторами, Core Guidelines также ставят целью гарантированную безопасность работы с памятью и типобезопасность без потери приозводительности и выразительной мощи языка. В этом докладе будет рассмотрена история проекта С++ Core Guidelines, динамика его развития до и после выхода в open source, цели, главные правила, спорные правила, "не-правила" (мифы), правила будущего (концепции и контракты), автоматические проверки правил доступные в настоящее время, смысл подхода "подмножество надмножества", и как система типов делает C++ одновременно быстрее и безопаснее.

24/02/17
Track B
13:45 - 14:45
Timur Doumler
Timur Doumler
Readable Modern C++

C++ offers great performance and many powerful features like the standard library, a rich type system, and compile-time programming. However, it often ends up being hard to read. High-level languages like C++ are usually not written to communicate with compilers. They’re usually written to communicate with people. In fact, many developers spend more time reading and understanding other people's code than writing their own.

This talk focuses on how to optimise C++ code for being easily readable by average human developers, ideally being close to plain English. I will revisit best practices on naming, comments, and locality from a modern C++ perspective. Readability also means writing less code and avoiding repetitions and unnecessary noise. I will present practical use cases of modern C++ features that are especially effective to achieve this. I will finish the talk with an overview of new C++17 features aiming at more readable code, such as fold expressions, constexpr-if, and structured bindings.

24/02/17
Track C
12:45 - 13:45
Василий Сорокин
Василий Сорокин
Простой REST сервер на Qt с рефлексией

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

25/02/17
Track A
12:45 - 13:45
Виктор Ястребов
Виктор Ястребов
Повышение качества разработки c использованием юнит-тестов

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

Gold спонсоры

Silver спонсоры

Community спонсоры