х2019 Autumn2019 Spring2018 Autumn2018 Spring2017 Autumn2017 Spring2017 Winter2016 Autumn2016 Summer20162015

C++ CoreHard Autumn 2019 Conference

C++ CoreHard Autumn 2019 – очередная конференция для C++ разработчиков.

Организаторами выступает сообщество CoreHard.by , объединяющее не только С++ разработчиков, но и тех, кто интересуется С, ассемблером, промышленными контроллерами и высоконагруженными серверными решениями.

Конференция пройдет в 2 дня: 29 ноября - день мастер-классов, 30 ноября - день докладов

Официальные языки конференции: русский, английский

Билеты
Дата Мастер-класс (29.11) Конференция (30.11)
01.10.2019 - 31.10.2019 390 BYN 240 BYN
01.11.2019 - 30.11.2019 440 BYN 290 BYN

Хотите выступить с докладом? Оставляйте заявку


#CoreHardBy

Мы следуем Берлинскому кодексу поведения

Выступают

Мастер-классы, 29 ноября

  • 9:30 - 10:00

    Регистрация на мастер-классы

  • 10:00 - 14:00

    Шустрый и современный C++

    Антон Полухин

    В любой большой кодовой базе можно встретить куски абсолютно непонятного кода. Как правило такой код пишется чтобы немного выиграть в производительности приложения... и как правило такой код не нужен в принципе, так как оптимизирует не то что нужно, не в том месте где это нужно и не так как надо.
    В ходе мастер класса мы натолкнёмся на особенности аллокаторов, оптимизаторов и имплементаций контейнеров; посмотрим на ассемблерный код; научимся правильно и понятно писать быстрые однопоточные и многопоточные приложения.
    Для курса понадобится всего лишь базовые знания C++ и компилятор с поддержкой C++11 (как минимум Visual Studio 2013, или Clang-3.3, или GCC-4.8).

  • 14:00 - 15:00

    Обед

  • 15:00 - 19:00

    Шустрый и современный C++

    Антон Полухин

    В любой большой кодовой базе можно встретить куски абсолютно непонятного кода. Как правило такой код пишется чтобы немного выиграть в производительности приложения... и как правило такой код не нужен в принципе, так как оптимизирует не то что нужно, не в том месте где это нужно и не так как надо.
    В ходе мастер класса мы натолкнёмся на особенности аллокаторов, оптимизаторов и имплементаций контейнеров; посмотрим на ассемблерный код; научимся правильно и понятно писать быстрые однопоточные и многопоточные приложения.
    Для курса понадобится всего лишь базовые знания C++ и компилятор с поддержкой C++11 (как минимум Visual Studio 2013, или Clang-3.3, или GCC-4.8).

  • 9:30 - 10:00

    Регистрация на мастер-классы

  • 10:00 - 14:00

    Modern C++ idioms [English]

    Mateusz Pusz

    C++ is no longer C with classes and it never was only an Object Oriented language. C++ is a general-purpose programming language. It has imperative, object-oriented and generic programming features, while also providing facilities for low-level memory manipulation. If used correctly, it provides hard to beat performance. Such usage requires a good knowledge of C++ templates and Modern C++ Idioms which are much different from commonly known design patterns popularized by GoF book and invented to handle common use cases in pure OO languages like Java or C#.

    What you will learn: During the workshop, we will refresh and broaden our knowledge about C++ templates and will learn Modern C++ Idioms. Crafting those skills will allow us to build powerful tools that are useful in the everyday work of every C++ developer.

    Experience required: In order to be able to follow the workshop, you should be current with C++ and have some recent experience with writing simple C++ templates. C++11/14 knowledge is suggested but not mandatory.

    Environment: A laptop with a relatively new C++ compiler. It is recommended to have the latest version of one of the compilers (Visual Studio, gcc or clang).

    Language: English.

    Idioms to be covered (plan):
    - Non-Copyable
    - RAII
    - Copy-and-swap
    - Smart Pointer
    - Type Traits
    - Tag dispatch
    - Policy-based design
    - EBO
    - Type Erasure
    - SOO
    - Copy-on-write
    - CRTP
    - Singleton

  • 14:00 - 15:00

    Обед

  • 15:00 - 19:00

    Modern C++ idioms [English]

    Mateusz Pusz

    C++ is no longer C with classes and it never was only an Object Oriented language. C++ is a general-purpose programming language. It has imperative, object-oriented and generic programming features, while also providing facilities for low-level memory manipulation. If used correctly, it provides hard to beat performance. Such usage requires a good knowledge of C++ templates and Modern C++ Idioms which are much different from commonly known design patterns popularized by GoF book and invented to handle common use cases in pure OO languages like Java or C#.

    What you will learn: During the workshop, we will refresh and broaden our knowledge about C++ templates and will learn Modern C++ Idioms. Crafting those skills will allow us to build powerful tools that are useful in the everyday work of every C++ developer.

    Experience required: In order to be able to follow the workshop, you should be current with C++ and have some recent experience with writing simple C++ templates. C++11/14 knowledge is suggested but not mandatory.

    Environment: A laptop with a relatively new C++ compiler. It is recommended to have the latest version of one of the compilers (Visual Studio, gcc or clang).

    Language: English.

    Idioms to be covered (plan):
    - Non-Copyable
    - RAII
    - Copy-and-swap
    - Smart Pointer
    - Type Traits
    - Tag dispatch
    - Policy-based design
    - EBO
    - Type Erasure
    - SOO
    - Copy-on-write
    - CRTP
    - Singleton

  • 9:30 - 10:00

    Регистрация на мастер-классы

  • 10:00 - 14:00

    Continuous integration для C++ разработчика

    Павел Филонов

    А мы построим свой CI с conan и travis
    Вводная
    В головах разработчиков бытует мнение, что их работа заканчивается после того, как они закомитили код, а весь остальной процесс их вовсе не касается. В ответ на этот тезис хорошо подходит цитата Роберта Хайнлайна:
    Любой человек должен уметь менять пеленки, планировать вторжения, резать свиней, конструировать здания, управлять кораблями, писать сонеты, вести бухгалтерию, возводить стены, вправлять кости, облегчать смерть, исполнять приказы, отдавать приказы, сотрудничать, действовать самостоятельно, решать уравнения, анализировать новые проблемы, побросать навоз, программировать компьютеры, вкусно готовить, хорошо сражаться, достойно умирать.

    Специализация — это удел насекомых.

    И взамен упомянутого выше устаревшего мнения мы выдвинем свой тезис - тот факт, что код сбирается на машине разработчика не интересует никого! Наша цель - сделать следующий шаг навстречу непрерывной интеграции (CI, англ. Continuous integration) и автоматизировать разрешение зависимостей, сборку и модульное тестирование под все целевые платформы.

    Непрерывная интеграция
    Непрерывной интеграцией называют практику, по которой разработчики периодически (читай ежедневно) вливают результаты своей работы в основную ветку кода. Впервые данная практика была предложена в методе Буча. Позднее в методологии экстремального программирования она обросла автоматическим прогоном модульных тестов. Свой дальнейшее развитие данная практика получила в виде непрерывной доставки (CD, англ. Continuous delivery) - процесс, в ходе которого после прохождения приёмочных тестов автоматически собирается дистрибутив, готовый к отгрузке заказчику. И уже в самом конце можно говорить об непрерывном развертывании (CD, англ. Continuous deployment) в ходе которого, все изменения прошедшие тестирование, автоматически отправляются в продакшн. Если Вы уже запутались, то можете представить себе следующую последовательность:
    1. Continuous integration
    2. Continuous delivery
    3. Continuous deployment
    В рамках данного мастер-класса мы будет говорить об CI применительно к разработке на C++.

    Предварительные требования
    От Вас нужно:
    - умение программировать на C++ (спасибо, Кэп!)
    - laptop c любой ОС
    - один из компиляторов (Visual Studio >= 2015 / g++ >= 5.4 / clang++ >= 3.9 / Xcode >= 8.0)
    - cmake >= 3.6 (нужно понимать синтаксис CMakeLists.txt)
    - git >= 2.10
    - python >= 3.5
    - pip3 >= 9.0
    - учетная запись на github.com
    - учетная запись на travis-ci.org (привязанная к github)
    - учетная запись на appveyor.com (привязанная к github)
    - учетная запись на conan.io
    - учетная запись на digitalocean.com

    Часть первая - github
    В первой части будем предполагать, что вы пишете домашний проект, работаете над Open Source или можете хранить исходные коды на стороннем ресурсе и готовы за это заплатить. Какие задачи Вы научитесь решать:
    - как автоматизировать сборку под Linux и Mac OS с помощью travis-ci
    - как автоматизировать сборку под Windows с помощью appveyor
    - как управлять зависимостями с помощью conan
    - как автоматизировать запуск модульных тестов под все платформы
    - как автоматически собирать с разными конфигурациями и версиями компиляторов
    - как создавать собственные пакеты для conan (первый шаг к CD)

    Часть вторая - self hosted gitlab
    Во второй части мы рассмотрим ситуацию, когда у Вас рабочий проект с закрытым исходным кодом и вы не хотите сильно зависеть от неподконтрольной инфраструктуры (vendor lock). Какие задачи Вы научитесь решать: как быстро развернуть gitlab на digitalocean (DO) как настроить gitlab CI для вашего проекта

    Заключение

  • 14:00 - 15:00

    Обед

  • 15:00 - 19:00

    Continuous integration для C++ разработчика

    Павел Филонов

    А мы построим свой CI с conan и travis
    Вводная
    В головах разработчиков бытует мнение, что их работа заканчивается после того, как они закомитили код, а весь остальной процесс их вовсе не касается. В ответ на этот тезис хорошо подходит цитата Роберта Хайнлайна:
    Любой человек должен уметь менять пеленки, планировать вторжения, резать свиней, конструировать здания, управлять кораблями, писать сонеты, вести бухгалтерию, возводить стены, вправлять кости, облегчать смерть, исполнять приказы, отдавать приказы, сотрудничать, действовать самостоятельно, решать уравнения, анализировать новые проблемы, побросать навоз, программировать компьютеры, вкусно готовить, хорошо сражаться, достойно умирать.

    Специализация — это удел насекомых.

    И взамен упомянутого выше устаревшего мнения мы выдвинем свой тезис - тот факт, что код сбирается на машине разработчика не интересует никого! Наша цель - сделать следующий шаг навстречу непрерывной интеграции (CI, англ. Continuous integration) и автоматизировать разрешение зависимостей, сборку и модульное тестирование под все целевые платформы.

    Непрерывная интеграция
    Непрерывной интеграцией называют практику, по которой разработчики периодически (читай ежедневно) вливают результаты своей работы в основную ветку кода. Впервые данная практика была предложена в методе Буча. Позднее в методологии экстремального программирования она обросла автоматическим прогоном модульных тестов. Свой дальнейшее развитие данная практика получила в виде непрерывной доставки (CD, англ. Continuous delivery) - процесс, в ходе которого после прохождения приёмочных тестов автоматически собирается дистрибутив, готовый к отгрузке заказчику. И уже в самом конце можно говорить об непрерывном развертывании (CD, англ. Continuous deployment) в ходе которого, все изменения прошедшие тестирование, автоматически отправляются в продакшн. Если Вы уже запутались, то можете представить себе следующую последовательность:
    1. Continuous integration
    2. Continuous delivery
    3. Continuous deployment
    В рамках данного мастер-класса мы будет говорить об CI применительно к разработке на C++.

    Предварительные требования
    От Вас нужно:
    - умение программировать на C++ (спасибо, Кэп!)
    - laptop c любой ОС
    - один из компиляторов (Visual Studio >= 2015 / g++ >= 5.4 / clang++ >= 3.9 / Xcode >= 8.0)
    - cmake >= 3.6 (нужно понимать синтаксис CMakeLists.txt)
    - git >= 2.10
    - python >= 3.5
    - pip3 >= 9.0
    - учетная запись на github.com
    - учетная запись на travis-ci.org (привязанная к github)
    - учетная запись на appveyor.com (привязанная к github)
    - учетная запись на conan.io
    - учетная запись на digitalocean.com

    Часть первая - github
    В первой части будем предполагать, что вы пишете домашний проект, работаете над Open Source или можете хранить исходные коды на стороннем ресурсе и готовы за это заплатить. Какие задачи Вы научитесь решать:
    - как автоматизировать сборку под Linux и Mac OS с помощью travis-ci
    - как автоматизировать сборку под Windows с помощью appveyor
    - как управлять зависимостями с помощью conan
    - как автоматизировать запуск модульных тестов под все платформы
    - как автоматически собирать с разными конфигурациями и версиями компиляторов
    - как создавать собственные пакеты для conan (первый шаг к CD)

    Часть вторая - self hosted gitlab
    Во второй части мы рассмотрим ситуацию, когда у Вас рабочий проект с закрытым исходным кодом и вы не хотите сильно зависеть от неподконтрольной инфраструктуры (vendor lock). Какие задачи Вы научитесь решать: как быстро развернуть gitlab на digitalocean (DO) как настроить gitlab CI для вашего проекта

    Заключение

Конференция, 30 ноября

  • 9:30 - 10:00

    Регистрация

  • 10:00 - 10:10

    Открытие

  • 10:10 - 11:10

    C++20: The small things [English]

    Тимур Думлер

    C++20 comes with some big new language features: modules, coroutines, concepts, spaceship, and many new libraries. But apart from all those, C++20 also offers many small language improvements, making C++ more powerful and expressive, but also safer and more consistent. This talk is an overview over all those smaller additions to the core language that will make your life easier. We will discuss much-needed improvements to existing facilities such as lambdas, CTAD, structured bindings, and initialisation, as well as brand-new language utilities that you may not yet have heard about!

  • 11:30 - 12:30

    C++ трюки из Такси

    Антон Полухин

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

  • 12:30 - 12:50

    Кофе-пауза

  • 12:50 - 13:50

    Generators, Coroutines and Other Brain Unrolling Sweetness [English]

    Adi Shavit

    C++20 brings us coroutines and with them the power to create generators, iterables and ranges. We'll see how coroutines allow for cleaner, more readable, code, easier abstraction and genericity, composition and avoiding callbacks and inversion of control. We'll discuss the pains of writing iterator types with distributed internal state and old-school co-routines. Then we'll look at C++20 coroutines and how easy they are to write clean linear code. Coroutines prevent inversion of control and reduce callback hell. We'll see how they compose and play with Ranges with examples from math, filtering, rasterization. The talk will focus more on co_yield and less on co_await and async related usages.

  • 14:00 - 15:00

    Обед

  • 15:00 - 16:00

    Защищая С++

    Павел Филонов

    В статье https://imgur.com/gallery/huZRM автор размышляет на тему сравнения языков программирования с различными видами оружия. С++ предлагается сравнять с нунчаками: в умелых руках - это эффективный инструмент, а в руках новичка - опасность для собственного здоровья. Это сравнение очевидно навеяно мнением об С++ как небезопасном языке программирования. Некоторые новые языки даже используют это мнение для собственного продвижения. Но какие конкретно опасности скрываются за термином «небезопасный»? Развёрнутый ответ очевидно поднимет несколько направлений, одним из которых будет кибербезопасность. В докладе я хочу показать простые примеры эксплуатации уязвимостей C/C++ кода: * выполнение shell-кода на стеке * Возврат в libc * Переписывание vptr * Переполнение кучи Но главный упор сделать на средства защиты от подобных атак: * канарейка на стеке * ASLR * Неисполнимые области * Тестирование и санитайзеры * Fuzzing * SDL процессы

  • 16:20 - 17:20

    The C++ rvalue lifetime disaster [English]

    Arno Schödl

    Rvalue references have been with us since C++11. They have originally been introduced to make moving objects more efficient: the object an rvalue reference references is assumed to go out of scope soon and thus may have its resources scavenged without harm. The C++ standard library, for example std::cref or std::ranges, makes use of yet another aspect of rvalue references: since they go out of scope soon, it is assumed unsafe to hold on to them beyond the scope of the current function, while lvalue references are considered safe. We, too, found this assumption to be very useful for smart memory management, in particular in generic code. Unfortunately, the C++ language itself violates this assumption in at least two places. First, rvalues bind to const&. This means that innocent-looking functions taking a parameter by const& and passing it through in some way silently convert rvalues to lvalue references, hiding any lifetime limitation of the rvalues. std::min/max are two such examples. Worse still, every accessor member function returning a const& to a member suffers from this problem. Second, temporary lifetime extension is meant to make binding a temporary to a reference safe by extending the lifetime of the temporary. But this only works as long as the temporary is still a prvalue. If the temporary has been passed through a function, even it has been correctly passed through by rvalue reference, lifetime extension will no longer be invoked and we get a dangling reference. These problems are not merely theoretical. We have had hard-to-find memory corruption in our code because of these problems. In this talk, I will describe the problems in detail, present our library-only approach to mitigate the problems, and finally, make an impossible-to-ever-get-into-the-standard proposal of how to put things right.

  • 17:20 - 17:40

    Кофе-пауза

  • 17:40 - 19:10

    Striving for ultimate low latency [English]

    Mateusz Pusz

    That talk will present the C++ world seen from Low Latency domain. The world where no dynamic allocations are welcomed, C++ exceptions are nearly not used, where STL containers are often not enough, and where developers often need to go deep down to assembly level to verify if the code really does its best.

  • 19:10 - 19:20

    Закрытие

  • 19:20 - 21:00

    Вечеринка

  • 9:30 - 10:00

    Регистрация

  • 10:00 - 10:10

    Открытие

  • 10:10 - 11:10

    C++20: The small things [English]

    Тимур Думлер

    C++20 comes with some big new language features: modules, coroutines, concepts, spaceship, and many new libraries. But apart from all those, C++20 also offers many small language improvements, making C++ more powerful and expressive, but also safer and more consistent. This talk is an overview over all those smaller additions to the core language that will make your life easier. We will discuss much-needed improvements to existing facilities such as lambdas, CTAD, structured bindings, and initialisation, as well as brand-new language utilities that you may not yet have heard about!

  • 11:30 - 12:30

    Исключительная модель памяти

    Алексей Ткаченко

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

  • 12:30 - 12:50

    Кофе-пауза

  • 12:50 - 13:50

    Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединение ожидающих запросов

    Вадим Винник

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

  • 14:00 - 15:00

    Обед

  • 15:00 - 16:00

    Метапрограммирование: строим конечный автомат

    Сергей Федоров

    Разбор некоторых приёмов метапрограммирования на примере написания библиотеки конечного автомата

  • 16:20 - 17:20

    Как работает LLVM бэкенд в C#

    Егор Богатов

    LLVM содержит огромное количество оптимизаций и подходит в качестве бэкенда для многих языков программирования. Но все немного усложняется для Managed языков и JIT сценариев. В этом докладе Егор расскажет о трудностях, с которыми столкнулись в C# при реализации LLVM бэкенда.

  • 17:20 - 17:40

    Кофе-пауза

  • 17:40 - 19:10

    Striving for ultimate low latency [English]

    Mateusz Pusz

    That talk will present the C++ world seen from Low Latency domain. The world where no dynamic allocations are welcomed, C++ exceptions are nearly not used, where STL containers are often not enough, and where developers often need to go deep down to assembly level to verify if the code really does its best.

  • 19:10 - 19:20

    Закрытие

  • 19:20 - 21:00

    Вечеринка

  • 9:30 - 10:00

    Регистрация

  • 10:00 - 10:10

    Открытие

  • 10:10 - 11:10
  • 11:30 - 12:30

    Как не подавиться большим старым проектом

    Юрий Минаев

    Мир изменился. То, что работало раньше, не то чтобы перестало работать, но стало недостаточным. Парное программирование, обзоры кода, юнит-тесты по-прежнему важны и необходимы, но они уже не могут обеспечить должного уровня качества и надёжности С++ проектов. Многие проекты выросли в сотни раз. Рост происходил постепенно, и еще не все поняли, что произошло. Любой большой старый проект состоит из разнородных слоёв (геологических отложений) и, самое главное, уже никто не знает, как это всё работает. Пришло время инструментов и методологий, помогающих сохранять качество и целостность кода: DevSecOps, статический анализ, динамический анализ, платформы измерения качества.

  • 12:30 - 12:50

    Кофе-пауза

  • 12:50 - 13:50

    Статичный SQL в С++14

    Евгений Захаров

    Xочу рассказать про разработку библиотеки ORM для SQLite3 на С++14 https://github.com/fnc12/sqlite_orm . В докладе хочется поделиться своим опытом в попытке создать ORM с которой можно забыть про текстовые запросы и как это адаптируется в С++ при помощи шаблонов

  • 14:00 - 15:00

    Обед

  • 15:00 - 16:00
  • 16:20 - 17:20

    Вы ещё пишете код руками? Тогда мы идём к вам!

    Сергей Садовников

    В мире разработки на C++ есть множество задач, при которых приходится писать большое количество boilerplate-кода: сериализация, RPC, ORM, биндинги к скриптовым языкам и т. п. И, раузмеется, существуют множество подходов, упрощающих написание такого кода для, скажем, для сериализации: писать всё руками, положить всё в макросы, притащить шаблоны во главе с Hana, комбинировать одно с другим. Но есть один подход, который в конечном должен заменить все остальные: кодогенерация. json, bson, xml, yaml, protobuf - вариантов форматов, в которых можно сохранять данные, великое множество. Для каждого формата есть свои библиотеки, и не одна. Библиотеки настойчиво предлагают свой собственный способ описания данных, а некоторые - так и целую инфраструктуру, под которую надо подстраиваться самому, подстраивать код. А это - не всегда удобно, так как хочется свободы. Хочется, чтобы исходный текст как можно меньше зависел от того, каким образом сериализуются данные. И современные средства кодогенерации могут предоставить эту свободу, надо лишь знать, как правильно их применить.

  • 17:20 - 17:40

    Кофе-пауза

  • 17:40 - 19:10

    Striving for ultimate low latency [English]

    Mateusz Pusz

    That talk will present the C++ world seen from Low Latency domain. The world where no dynamic allocations are welcomed, C++ exceptions are nearly not used, where STL containers are often not enough, and where developers often need to go deep down to assembly level to verify if the code really does its best.

  • 19:10 - 19:20

    Закрытие

  • 19:20 - 21:00

    Вечеринка

Организаторы

  • CoreHard

Партнеры

  • Solarwinds
  • PVS-Studio
  • DPI Solutions

Сообщества-партнеры

  • C++ Russia
  • CppCon Conference
  • Core C++ Conference

Инфопартнеры

  • Wargaming
  • Kaspersky Lab
  • IT-academy
  • Forte Group
  • dev.by
  • Imaguru
  • IBA
  • comaqa.by
  • DPI Metallic
  • Epam
  • itstep.by
  • javaday.by
  • conf.cocoaheads.by
  • ITVDN
  • HotWork
  • avradays.com
  • vse-kursy.by
  • Аргументы и Факты
  • БГУИР
  • afisha.tut.by
  • Relax.by
  • DMK press
  • Luxoft