х2019 Autumn2019 Spring2018 Autumn2018 Spring2017 Autumn2017 Spring2017 Winter2016 Autumn2016 Summer20162015
#CoreHardBy

C++ CoreHard Autumn 2019 Сonference

The C++ CoreHard Autumn 2019 is a conference dedicated to C++ and related hardcore technologies.

The conference is being organized by the CoreHard.by community that unites not only C++ engineers, but also those who are interested in low-level development in C and Assembler, programming of controllers, Internet of Things, highload server solutions and in any kind of “hardcore” development.

The conference will take 2 days: November 29 - workshop day, November 30 - conference day

Official conference languages: Russian, English

Билеты
Date Workshop (29.11) Conference (30.11)
01.10.2019 - 31.10.2019 390 BYN 240 BYN
01.11.2019 - 30.11.2019 440 BYN 290 BYN

Want to present a talk? Submit a proposal


#CoreHardBy

We're following Berlin Code of Conduct

Speakers

Workshops, November 29

  • 9:30 - 10:00

    Registration

  • 10:00 - 14:00

    Quick and modern C++ [Russian]

    Antony Polukhin

    In any large codebase you can always find pieces of code which are not totally understandable. Mostly, such kind of code is implemented when the application needs some performance boost... and, mostly, that code is not useful because it optimizes functionality in wrong place, in incorrect way and in not a good way.
    During our masterclass we will get to know to the allocators features, optimizers and implementations of containers; look at assembler code; learn how to correctly and clearly write fast single-threaded and multi-threaded applications.
    You only need a complier with C++ 11 support (at least VS 2013/Clang-3.3/GCC-4.8) and basic C++ knowledge

  • 14:00 - 15:00

    Lunch

  • 15:00 - 19:00

    Quick and modern C++ [Russian]

    Antony Polukhin

    In any large codebase you can always find pieces of code which are not totally understandable. Mostly, such kind of code is implemented when the application needs some performance boost... and, mostly, that code is not useful because it optimizes functionality in wrong place, in incorrect way and in not a good way.
    During our masterclass we will get to know to the allocators features, optimizers and implementations of containers; look at assembler code; learn how to correctly and clearly write fast single-threaded and multi-threaded applications.
    You only need a complier with C++ 11 support (at least VS 2013/Clang-3.3/GCC-4.8) and basic C++ knowledge

  • 9:30 - 10:00

    Registration

  • 10:00 - 14:00

    What is used daily in C++ but still unfamiliar: rvalue references, std::move, copy elision and more [Russian]

    Vadim Vinnik

    - Template parameter and auto type inference.
    - Auto refenerces and passing arguments into a function.
    - Expression categories: (gl|r|l|x|pr)-values.
    - When are constructors get called and when do not.
    - Tail recursion optimisation becomes possible in C++.
    - Actually, std::move does not move anything.
    - Constexpr vs. const.
    - Smart pointers vs. raw pointers.
    - Function objects and lambdas.
    - Case study: asyncronous notifier.
    - Case study: write-only replicable storage.

  • 14:00 - 15:00

    Lunch

  • 15:00 - 19:00

    What is used daily in C++ but still unfamiliar: rvalue references, std::move, copy elision and more [Russian]

    Vadim Vinnik

    - Template parameter and auto type inference.
    - Auto refenerces and passing arguments into a function.
    - Expression categories: (gl|r|l|x|pr)-values.
    - When are constructors get called and when do not.
    - Tail recursion optimisation becomes possible in C++.
    - Actually, std::move does not move anything.
    - Constexpr vs. const.
    - Smart pointers vs. raw pointers.
    - Function objects and lambdas.
    - Case study: asyncronous notifier.
    - Case study: write-only replicable storage.

  • 9:30 - 10:00

    Registration

  • 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

    Lunch

  • 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

    Registration

  • 10:00 - 14:00

    Continuous integration for C++ developers [Russian]

    Pavel Filonov

    And we will build our own CI with conan and travis
    Introduction
    Developers’ mind has a common opinion, about their work which become completed after they’ve committed the code, and what happens next – not their problem. There is a great quote by Robert Highline for that thesis:
    Each person should know how to change diapers, plan the invasion, harvest a pig, construct buildings, control a ship, write sonnets, make financial reports, build walls, set bones, assist dying, carry out an order, give out orders, cooperate, act alone, solve equations, analyze new problems, fertilize plants, program computers, cook tasty food, fight with dignity, die with dignity.

    Specialization is the destiny of insects.

    And instead of the opinion mentioned above, will put out our own thesis - the fact that code compilates on the developer’s environment and developer’s personal machine is not interesting for anyone! Our goal - Ii to make another step to the continuous integration, automate dependency resolution, assembling and unit testing for all the platforms which are interesting for us.

    Continuous Integration
    Continuous integration is the kind of practice, according to which, developers periodically (you can read it as daily) put out the results of the work into the main code branch. First use of that practice was introduced in the Buch method. Later, at extreme programming methodology, it improved with automatic unit tests run. Next step of current practice development is Continuous Delivery - the process where the distributive is created, after all acceptance tests are successfully completed, the distributive which ready to be published to the customer. And at the very end we can speak about Continuous Deployment during which all the changes that passed the testing phase successfully, automatically deployed to production. If you are already confused, you can imagine the following sequence:
    1. Continuous integration
    2. Continuous delivery
    3. Continuous deployment
    At the course of the current master-class we will speak about CI in the scope of C++ development.

    Preliminary requirements
    What is required from you:
    - experience in using C++ (thanks, Cap!)
    - laptop with any OS installed
    - one of the compilers (Visual Studio >= 2015 / g++ >= 5.4 / clang++ >= 3.9 / Xcode >= 8.0)
    - cmake >= 3.6 (you need to understand the syntax of CMakeLists.txt)
    - git >= 2.10
    - python >= 3.5
    - pip3 >= 9.0
    - github.com account
    - travis-ci.org account (linked to github)
    - appveyor.com account (linked to github)
    - conan.io account
    - digitalocean.com account

    Part One - github
    In the first part, we will assume that you are creating a personal home project, work on Open Source project or can store source files on some external resource, and ready to pay for it. What tasks you will be able to solve:
    - understand how to automate assembling for Linux and Mac OS with Travis-CI
    - understand how to automate assembling for Windows with the help of appveyor
    - understand how to manage dependencies with the help of conan
    - understand how to automate unit tests runs for all the platforms
    - understand how automatically deploy with different configurations different compiler versions
    - understand how to create your own packets for conan (first step towards CD)

    Part Two - self hosted gitlab
    During the second part we’l’ look at the situation when your working project has closed source code, and you don't want to have strong dependency for vendor lock infrastructure. What tasks you will be able to solve:
    - how to deploy gitlab at digitalocean fast(DO)
    - how to configure gitlab CI for your project


    Conclusion

  • 14:00 - 15:00

    Lunch

  • 15:00 - 19:00

    Continuous integration for C++ developers [Russian]

    Pavel Filonov

    And we will build our own CI with conan and travis
    Introduction
    Developers’ mind has a common opinion, about their work which become completed after they’ve committed the code, and what happens next – not their problem. There is a great quote by Robert Highline for that thesis:
    Each person should know how to change diapers, plan the invasion, harvest a pig, construct buildings, control a ship, write sonnets, make financial reports, build walls, set bones, assist dying, carry out an order, give out orders, cooperate, act alone, solve equations, analyze new problems, fertilize plants, program computers, cook tasty food, fight with dignity, die with dignity.

    Specialization is the destiny of insects.

    And instead of the opinion mentioned above, will put out our own thesis - the fact that code compilates on the developer’s environment and developer’s personal machine is not interesting for anyone! Our goal - Ii to make another step to the continuous integration, automate dependency resolution, assembling and unit testing for all the platforms which are interesting for us.

    Continuous Integration
    Continuous integration is the kind of practice, according to which, developers periodically (you can read it as daily) put out the results of the work into the main code branch. First use of that practice was introduced in the Buch method. Later, at extreme programming methodology, it improved with automatic unit tests run. Next step of current practice development is Continuous Delivery - the process where the distributive is created, after all acceptance tests are successfully completed, the distributive which ready to be published to the customer. And at the very end we can speak about Continuous Deployment during which all the changes that passed the testing phase successfully, automatically deployed to production. If you are already confused, you can imagine the following sequence:
    1. Continuous integration
    2. Continuous delivery
    3. Continuous deployment
    At the course of the current master-class we will speak about CI in the scope of C++ development.

    Preliminary requirements
    What is required from you:
    - experience in using C++ (thanks, Cap!)
    - laptop with any OS installed
    - one of the compilers (Visual Studio >= 2015 / g++ >= 5.4 / clang++ >= 3.9 / Xcode >= 8.0)
    - cmake >= 3.6 (you need to understand the syntax of CMakeLists.txt)
    - git >= 2.10
    - python >= 3.5
    - pip3 >= 9.0
    - github.com account
    - travis-ci.org account (linked to github)
    - appveyor.com account (linked to github)
    - conan.io account
    - digitalocean.com account

    Part One - github
    In the first part, we will assume that you are creating a personal home project, work on Open Source project or can store source files on some external resource, and ready to pay for it. What tasks you will be able to solve:
    - understand how to automate assembling for Linux and Mac OS with Travis-CI
    - understand how to automate assembling for Windows with the help of appveyor
    - understand how to manage dependencies with the help of conan
    - understand how to automate unit tests runs for all the platforms
    - understand how automatically deploy with different configurations different compiler versions
    - understand how to create your own packets for conan (first step towards CD)

    Part Two - self hosted gitlab
    During the second part we’l’ look at the situation when your working project has closed source code, and you don't want to have strong dependency for vendor lock infrastructure. What tasks you will be able to solve:
    - how to deploy gitlab at digitalocean fast(DO)
    - how to configure gitlab CI for your project


    Conclusion

Conference, November 30

  • 9:30 - 10:00

    Registration

  • 10:00 - 10:10

    Opening

  • 10:10 - 11:10

    C++20: The small things [English]

    Timur Doumler

    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
  • 12:30 - 12:50

    Coffee

  • 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

    Lunch

  • 15:00 - 16:00
  • 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

    Coffee

  • 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

    Closing

  • 19:20 - 21:00

    After-party

  • 9:30 - 10:00

    Registration

  • 10:00 - 10:10

    Открытие

  • 10:10 - 11:10

    C++20: The small things [English]

    Timur Doumler

    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
  • 12:30 - 12:50

    Coffee

  • 12:50 - 13:50

    Etudes on bufferisation: asynchronous notifications, replication of shared data updates, collation of pending requests [Russian]

    Vadim Vinnik

    Practical application development can lead to a task that appear to be general enough to extract an abstraction that is potentially useful for multiple applications. Bringing the solution to the level suitable for reusing (in contrast to an ad hoc solution for one particular application) can involve more efforts to extract variable details of the task and to express them in the pogramming language. The talk describes three abstractions related to one common topic, namely storing data in a buffer within a multithreaded application. The way from task analysis to implementation in C++17 is shown. These etudes serve as a good example for some features of modern C++.

  • 14:00 - 15:00

    Lunch

  • 15:00 - 16:00

    Metaprogramming: building a finite state machine [Russian]

    Sergei Fedorov

    Let's look at some metaprogramming tips and tricks while writing a state machine library

  • 16:20 - 17:20
  • 17:20 - 17:40

    Coffee

  • 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

    Closing

  • 19:20 - 21:00

    After-party

Organizers

  • CoreHard

Partners

  • Solarwinds
  • PVS-Studio
  • DPI Solutions

Community partners

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

Infopartners

  • 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