Программирование

C++ Russia

Конференция «C++ Russia» с блинами и матрёшками! Как всегда, лучшие докладчики со всей страны на два дня. Конференция ориентирована на опытных разработчиков, никаких вводных лекций!

В течении года сообщество проводит встречи в разных городах России: Москве, Санкт-Петербурге, Новосибирске, Екатеринбурге, Нижнем Новгороде, Саратове.
На встречах выступают докладчики из разных городов и стран.

Дата мероприятия: 24 февраля — 25 февраля 2017 года

Открывать конференцию будет Neil MacIntsoh: principal software engineer в Microsoft, мейнтенер реализации Guideline Support Library от Microsoft.

Ключевые темы мероприятия

    Модели акторов в С++ миф или реальность.

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

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

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

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

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

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

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

    C++Next by examples

На этот раз в докладе Антон не только расскажет о грядущих мажорных изменениях языка, в настоящее время пребывающих в виде Technical Specifications, но и покажет, как они работают в свежайших транках gcc и clang. Плавно следуя из фич C++17 мы перейдем в таинственные дебри транзакционной памяти, концептов и рефлексии.

     Гарантии качества для крупных С++ проектов

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

    Как делать не надо: C++ велосипедостроение для профессионалов

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

  • Copy-On-Write
  • разработке без оглядки на готовые решения и к чему это приводит
  • force inline
  • оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
  • бездумно отключаемых оптимизациях компилятора
  • тонкостях стандартной библиотеки для повседневного использования
  • супер качественном велосипедостроении
     История одного бага

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

     Fuzzing: The New Unit Testing

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

    clang-tidy: путешествие внутрь C++ Abstract Syntax Tree

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

     С++ в России: Стандарт языка и его реализация

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

    C++17: параллельная версия стандартных алгоритмов

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

    Для чего мы делали собственный акторный фреймворк и что в итоге получили?

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

     Универсальный адаптер

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

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

    Пишем код большого проекта: быстро, надёжно, удобно

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

     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.

    Итераторы в lock-free структурах данных

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

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

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

    Повседневный С++: алгоритмы и утилитарные типы

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

     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++.

     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.

     Догнать и перегнать boost::lexical_cast или быстрое преобразование целого числа в строку

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

     Как потратить 10 лет на разработку анализатора кода

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

     C++ Core Guidelines

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

     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.

     Простой REST сервер на Qt с рефлексией

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

     Повышение качества разработки c использованием юнит-тестов

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

Как принять участие

Мероприятие платное. Стоимость билетов варьируется от 2000 руб до 9500 руб

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

Как добраться

Гостиница Бородино

Москва, ул. Русаковская, дом 13, строение 5


Источник материала: