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

    C++ tricks from Taxi [Russian]

    Antony Polukhin

    When building large frameworks we often face with typical tasks solutions to which are well-known. However these solutions are not always effective enough and we can do better. In this talk, we will discuss such kind of tricks!

  • 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

    Protecting C++ [Russian]

    Pavel Filonov

    In this article https://imgur.com/gallery/huZRM the author discusses comparison of C++ with different kinds of weapons. We can compare C++ with nunchucks: in experienced hands this is an effective tool however for newbie this might be dangerous for health. What dangers are hidden behind "unsafe" label? The long answer will cover several directions, one of them being cybersecurity. In this talk we will look at C/C++ code exploits:
    * executing shell-code on stack
    * return to libc
    * overwriting vptr
    * heap overrun
    But we will focus on means of preventions from suck kind of attacks: * canary on stack
    * ASLR
    * non-executable regions
    * testing and sanitizers
    * fuzzing
    * SDL processes

  • 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:40 - 18:40

    Exceptional memory model [Russian]

    Alexey Tkachenko

    Memory in computer is not only gigabytes of RAM but a very fancy abstraction at the same time. In this talk we will look at how this abstraction can be used in unusual way to model other abstractions - registry files. The talk will be useful not only to embedded developers but might also force you to rethink you vision on memory.

  • 19:00 - 20:30

    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.

  • 20:30 - 22: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

    Windbg: when it doesn't get reproduced

    Alexander Golovach

    In practice we frequently face the problems that are unreproducible on the developer side. Sometimes it's even impossible to request a remote access to the machine. In this talk we will review and give access on debugging typical tasks suck as core dumps, resource leakage, race conditions. We will use Windbg debugger and focus mostly on Windows platform.

  • 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

    How LLVM backend works in C# [Russian]

    Egor Bogatov

    LLVM has a ton of optimizations and is suitable as a backend for many programming languages. It gets a little more complicated for managed languages and JIT scenarios. In this talk Egor will let us know about difficulties that they faced in C# while implementing LLVM backend

  • 17:40 - 18:40

    C++ exceptions from compiler optimizations point of view [Russian]

    Roman Rusyaev

    21 century is outside, non-productive implementation of C++ exception handling based on setjmp/longjmp is a past. Modern compilers such as gcc and clang use an advanced implementation of C++ exceptions called zero-cost exception handling. But is this real zero-cost? Yes, we pay by increasing the size of binary file and also in the case when the exception is thrown starting the stack unwinding process calling destructors for local objects, etc. But do we lose performance if an exception isn't thrown? Are there any restrictions on compiler optimizations? This talk describes how C++ exceptions affect compiler optimizations. Which optimizations can't be applied if the function can throw exceptions and which optimizations become more difficult to apply. Examples of exceptions implementations and compiler optimizations are considered based on LLVM. Talk aims to give an understanding of when it makes sense to build your application with -fno-exceptions and when you can enjoy C ++ exceptions, knowing that the code has not significantly lost performance compared to code where exceptions are disabled.

  • 19:00 - 20:30

    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.

  • 20:30 - 22:00

    After-party

  • 9:30 - 10:00

    Registration

  • 10:00 - 10:10

    Opening

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

    How to eat a big project [Russian]

    Yury Minaev

    The world has changed. Things that worked some time ago still do the job but become insufficient. Pair programming, code reviews, unit tests are still important and necessary but they cannot guarantee the sufficient level of quality and robustness of C++ projects. Many projects have grown a hundred times. The growth was happening steadily and not everyone understood what happened. Every big project consists of multiple layers and noone really understands how this stuff works. It's time for instruments and methodologies helping to save the quality and consistncy of code: DevSecOps, static analysis, dynamic analysis, platforms for measuring quality.

  • 12:50 - 13:50

    Static SQL in C++14 [Russian]

    Yevgeniy Zakharov

    I want to speak about development of ORM library for SQLite3 in C++14 (https://github.com/fnc12/sqlite_orm). I want to share my experience in crearing ORM that may help to forget text queries and how this stuff gets adapted to C++ with the help of templates.

  • 14:00 - 15:00

    Lunch

  • 15:00 - 16:00

    How to help and how to get in the way of compiler [Russian]

    Andrey Oleynikov

    As a rule we can rely on the fact that compiler optimizes a binary file in way that a program works in the fastest way. But compiler doesn't know on what hardware the program will run. On top of that we would like compilation process to take a reasonable amount of time. This might lead to suboptimal results. I suggest to look at code examples for LLVM and see how to help the compiler to optimize the program and make result better or worse.

  • 16:20 - 17:20

    Still writing code with your hands? We're coming for you! [Russian]

    Sergei Sadovnikov

    In C++ world there are a lot of tasks that require a big amount of boilerplat code: serialization, RPC, ORM, bindings for script languages. There are multiple approaches that simplify development of such kind of code, i.e. for serialization: write everything manually, put everything into macro, rely on Hana-based templates, combine one with another. But there's one approach that can replace all others: codegeneration. json, bson, xml, yaml, protobuf - there's a bunch of formats you can save your data in. Each format has its own library and not only one. Each library suggests their own way of data description and some of them even suggest a whole infrastructure which you have to adapt to and adapt your code to. This is not always convenient, you want freedom. You want your source code not to depend on a way serialization goes. Modern means of codegeneration may give you this freedom, you only need to know ho to apply them.

  • 17:40 - 18:40

    Automate it

    Kirill Tikhonov

    We will write a simple web-service from the client and server on C++. After that, the C++ part will end and set up the environment and infrastructure will start. We will provide a build determinability and tests run. Also, we will ease subsequent updating of dependent frameworks. Automate static checks, code verification, tests run. We will ensure the availability of the service, configure the infrastructure, balance the load and add automatic and manual scaling. And in the end, we will configure continuous delivery so that code will be in production 5 minutes after request, while even invalid changes and programmer errors will not affect his work.

  • 19:00 - 20:30

    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.

  • 20:30 - 22:00

    After-party

Organizers

  • CoreHard

Partners

  • Solarwinds
  • PVS-Studio
  • DPI Solutions
  • Wargaming
  • Checkpoint

Community partners

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

Infopartners

  • Luxoft
  • 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