х2018 Autumn2018 Spring2017 Autumn2017 Spring2017 Winter2016 Autumn2016 Summer20162015

C++ CoreHard Autumn 2018 Conference

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

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

На этот раз конференция пройдет в 2 дня: 2 ноября - день мастер-классов, 3 ноября - день докладов

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

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


#CoreHardBy
Билеты
Дата Мастер-класс (день 1) Конференция (день 2) Онлайн-трансляция (день 2)
13.10.2018 - 02.11.2018 350 BYN 220 BYN 50 BYN

Отель «Виктория СПА» предлагает специальные тарифы для размещения участников нашей конференции

Выступают

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

  • 9:30 - 10:00

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

  • 10:00 - 19:00

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

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

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

  • 9:30 - 10:00

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

  • 10:00 - 19:00

    Multithreading with modern C++ [English]

    Rainer Grimm

    Abstract
    This class gives you a detailed insight into the multithreading facilities of C++11 and C++14, and the parallel algorithms which we got with C++17. If possible, we will have a more in-depth look into the C++ memory model consisting of the atomics and the various memory models in C++. This insight will provide you with a better understanding of the general concurrency features of C++.
    Prerequisite
    Participants should have a basic knowledge of the C++ language and the fundamentals of multithreading. In the class, I will give you a concise introduction to the topic. This introduction provides the starting point for the exercises; therefore, you should bring your laptop with you including a C++11 or C++14 compiler. You will get in return the training material consisting of the presentation, the exercises, and the solutions to the exercises.
    Agenda:
    Multithreading
    Threads
    Shared Data
    Mutexes and Locks
    Thread-safe Initialisation
    Thread-Local Data
    Condition Variables
    Tasks (Promises and Futures)
    The Memory Model
    The Contract
    Atomics
    The Synchronisation and Ordering Constraints -- Sequential Consistency -- Acquire-Release Semantic -- Relaxed Semantic
    Parallel Algorithms of the Standard Template Library (C++17) Execution Policies
    Algorithms -- The New Algorithms

  • 9:30 - 10:00

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

  • 10:00 - 19:00

    Advanced C++ techniques and functional programming idioms [English]

    Ivan Čukić

    - Algorithms in the standard library
    - Function objects in C++, callables and std::invoke
    - Lazy evaluation, lazy algorithms and ranges
    - Creating new language constructs on the library level
    - Removing invalid program states with sum types and std::variant
    - Generic programming and template constraints using void_t
    - Handling errors with optional<T> and expected<T, E>
    - Monad composition

  • 9:30 - 10:00

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

  • 10: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 для вашего проекта

    Заключение

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

  • 10:30 - 11:00

    Регистрация

  • 11:00 - 11:10

    Открытие

  • 11:10 - 12:00

    Text Formatting For a Future Range-Based Standard Library [English]

    Arno Schödl

    Text formatting has been a favorite problem of C++ library authors for a long time. The standard C++ iostreams have been criticized for being difficult to use due to their statefulness and slow due to runtime polymorphism. Despite its age, printf is still popular because of simplicity and speed. The Boost library offers two more alternatives, Boost.Format and Boost.LexicalCast. And finally, the P0645 standard proposal sponsored by Facebook is currently finding its way through the C++ committee. All these approaches are still firmly based on standard containers and iterators. But the Standard Library is changing radically with the advent of ranges, range adaptors and functional style programming in C++. Generating optimized code with metaprogramming is becoming standard fare. In this talk, I want to convince you that the combination of ranges with a bit of metaprogramming makes for a very elegant solution to the text formatting problem. We introduce a form of ranges with internal iteration, which are generating their elements one by one rather than exposing external iterators. We can use these generator ranges to represent the values to be formatted, conceptually turning them into lazily evaluated strings. These can be used just like regular strings are used today: in function returns; as standard algorithm input; embedded into other, equally lazily evaluated strings; and so on, before they are finally expanded for display. By choosing the right interfaces, we can optimize this expansion at compile-time, making it no less pretty to write, but more efficient to expand than any text formatting approaches that rely on format strings that must be parsed at runtime. I believe that this approach is the natural extension of a range-based future standard library to text formatting.

  • 12:10 - 13:00

    Полезный constexpr

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

    В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.

  • 13:00 - 14:00

    Обед

  • 14:10 - 15:00

    Debug C++ Without Running [English]

    Анастасия Казакова

    Macros, templates, compile-time evaluation and code generation, reflection and metaclasses – C++ tends to hide the final code passed to the compiler under the tons of various names and aliases. Add here the preprocessor that shadows the actual running curve of your program with dozens of alternatives mixed in a non-trivial way. While this allows to avoid boilerplate code and reduce copy-paste and other errors, such an approach demands better tooling support to make the debugging process easier. To find an error in such a code, one has to continuously read-fix-run it and compare the results with some etalon, or to debug in order to find actual substitutions. But should you really wait until your code is run or even compiled to debug it? Or how to deal with the situations when the code can’t be run on the local machine? A text editor with code completion won’t help, while a smart IDE that “gets” your code can do a better job. In this talk we’ll see interesting approaches to solving cases like macro and typedef ‘debug’, understanding types when auto/decltype hide them, dealing with different code branches depending on the preprocessor’s pass-through, and other ideas. Some suggestions are already implemented as ready-to-use features in CLion and ReSharper C++, tools for C++ from JetBrains (that means I can show it in action), others are planned for the future. The aim of this talk is to share the workflows supported by the tools that can help C++ developers create better modern C++ code.

  • 15:10 - 16:00

    Asynchronous programming with ranges [English]

    Ivan Čukić

    This talk will be about the design and implementation of a reactive programming model inspired by ranges that allows easy implementation of asynchronous and distributed software systems by writing code that looks like a sequence of ordinary range transformations like filter, transform, etc. This programming model will be demonstrated along with the implementation of a simple asynchronous web service where the whole system logic is defined as a chain of range transformations.

  • 16:10 - 17:00

    Обучаем на Python, применяем на C++

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

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

  • 17:10 - 18:00

    Обработка списков на C++ в функциональном стиле: от рекурсии до гиломорфизма

    Вадим Винник

    Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.

  • 18:10 - 19:00

    Concurrency and Parallelism in C++17 and C++20/23 [English]

    Rainer Grimm

    What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.

  • 19:00 - 19:10

    Закрытие

  • 10:30 - 11:00

    Регистрация

  • 11:00 - 11:10

    Открытие

  • 11:10 - 12:00

    Text Formatting For a Future Range-Based Standard Library [English]

    Arno Schödl

    Text formatting has been a favorite problem of C++ library authors for a long time. The standard C++ iostreams have been criticized for being difficult to use due to their statefulness and slow due to runtime polymorphism. Despite its age, printf is still popular because of simplicity and speed. The Boost library offers two more alternatives, Boost.Format and Boost.LexicalCast. And finally, the P0645 standard proposal sponsored by Facebook is currently finding its way through the C++ committee. All these approaches are still firmly based on standard containers and iterators. But the Standard Library is changing radically with the advent of ranges, range adaptors and functional style programming in C++. Generating optimized code with metaprogramming is becoming standard fare. In this talk, I want to convince you that the combination of ranges with a bit of metaprogramming makes for a very elegant solution to the text formatting problem. We introduce a form of ranges with internal iteration, which are generating their elements one by one rather than exposing external iterators. We can use these generator ranges to represent the values to be formatted, conceptually turning them into lazily evaluated strings. These can be used just like regular strings are used today: in function returns; as standard algorithm input; embedded into other, equally lazily evaluated strings; and so on, before they are finally expanded for display. By choosing the right interfaces, we can optimize this expansion at compile-time, making it no less pretty to write, but more efficient to expand than any text formatting approaches that rely on format strings that must be parsed at runtime. I believe that this approach is the natural extension of a range-based future standard library to text formatting.

  • 12:10 - 13:00

    Кодогенерация C++ кроссплатформенно. Продолжение

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

    В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.

  • 13:00 - 14:00

    Обед

  • 14:10 - 15:00

    Что не умеет оптимизировать компилятор

    Александр Зайцев

    Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизацяих - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.

  • 15:10 - 16:00

    Метаклассы: воплощаем мечты в реальность

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

    Доклад посвящён вопросам реализации пропозала Герба Саттера PR0707 (метаклассы в С++) за пределами компилятор - в виде отдельной утилиты. Будет продемонстрированы варианты использования метаклассов в реальной жизни, затронуты вопросы их реализации на базе Clang Frontend, а также возможные перспективы развития технологии и методики.

  • 16:10 - 17:00

    Ускорение сборки C++ проектов, способы и последствия

    Александр Жоров

    В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers)

  • 17:10 - 18:00

    Заглядываем под капот «Поясов по C++»

    Илья Шишков

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

  • 18:10 - 19:00

    Concurrency and Parallelism in C++17 and C++20/23 [English]

    Rainer Grimm

    What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.

  • 19:00 - 19:10

    Закрытие

  • 10:30 - 11:00

    Регистрация

  • 11:00 - 11:10

    Открытие

  • 11:10 - 12:00

    Text Formatting For a Future Range-Based Standard Library [English]

    Arno Schödl

    Text formatting has been a favorite problem of C++ library authors for a long time. The standard C++ iostreams have been criticized for being difficult to use due to their statefulness and slow due to runtime polymorphism. Despite its age, printf is still popular because of simplicity and speed. The Boost library offers two more alternatives, Boost.Format and Boost.LexicalCast. And finally, the P0645 standard proposal sponsored by Facebook is currently finding its way through the C++ committee. All these approaches are still firmly based on standard containers and iterators. But the Standard Library is changing radically with the advent of ranges, range adaptors and functional style programming in C++. Generating optimized code with metaprogramming is becoming standard fare. In this talk, I want to convince you that the combination of ranges with a bit of metaprogramming makes for a very elegant solution to the text formatting problem. We introduce a form of ranges with internal iteration, which are generating their elements one by one rather than exposing external iterators. We can use these generator ranges to represent the values to be formatted, conceptually turning them into lazily evaluated strings. These can be used just like regular strings are used today: in function returns; as standard algorithm input; embedded into other, equally lazily evaluated strings; and so on, before they are finally expanded for display. By choosing the right interfaces, we can optimize this expansion at compile-time, making it no less pretty to write, but more efficient to expand than any text formatting approaches that rely on format strings that must be parsed at runtime. I believe that this approach is the natural extension of a range-based future standard library to text formatting.

  • 12:10 - 13:00

    Информационная безопасность и разработка ПО: про что стоит знать программисту

    Евгений Рыжков

    Информационная безопасность все больше из отдельной сферы плавно перетекает в разработку ПО. А значит «обычным» программистам приходится понимать те требования и терминологию, которые специалисты по безопасности уже давно знают и используют. CWE, CERT, MISRA, SAST– для «обычных» программистов это непонятные аббревиатуры. Поэтому в обзорном докладе мы попробуем рассказать простым языком об этих понятиях так, чтобы все разработчики начали уверенно ориентироваться в этой теме.

  • 13:00 - 14:00

    Обед

  • 14:10 - 15:00

    Знай свое "железо": иерархия памяти

    Александр Титов

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

  • 15:10 - 16:00

    Actors vs CSP vs Tasks vs ...

    Евгений Охотников

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

  • 16:10 - 17:00

    «Что должен знать каждый уважаемый C++ программист, чтобы не было стыдно» или «Как проводить собеседование»

    Игорь Садченко

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

  • 17:10 - 18:00

    Создание пакетов для открытых библиотек с использованием conan.io

    Константин Ивлев

    Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов

  • 18:10 - 19:00

    Concurrency and Parallelism in C++17 and C++20/23 [English]

    Rainer Grimm

    What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.

  • 19:00 - 19:10

    Закрытие

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

  • CoreHard

Партнеры

  • Solarwinds
  • JetBrains
  • think-cell.com/corehard2018
  • PVS-Studio
  • DPI Solutions

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

  • Job tut.by
  • Wargaming
  • Kaspersky Lab
  • IT-academy
  • Dot Net Summit
  • dev.by
  • Imaguru
  • IBA
  • comaqa.by
  • Epam
  • itstep.by
  • gamedev.by
  • javaday.by
  • conf.cocoaheads.by
  • ITVDN
  • HotWork
  • trud.com
  • avradays.com
  • vse-kursy.by
  • Аргументы и Факты
  • БГУИР
  • afisha.tut.by
  • DMK press