Конференция перенесена с 10-11 апреля на 30-31 октября 2020 в связи с неблагоприятной международной обстановкой. Вернуть личные билеты можно через сервис bezkassira.by
С любыми вопросами по отмене обращайтесь на conf@corehard.by или по телефону +375296088822
Хотите выступить с докладом? Оставляйте заявку
Мы следуем Берлинскому кодексу поведения
Phil is the author of the test frameworks Catch for C++ and Objective-C, and Swordfish for Swift. As Developer Advocate at JetBrains he's involved with CLion, AppCode and ReSharper C++. More generally he's an advocate for good testing practices, TDD and using the type system and functional techniques to reduce complexity and increase correctness. He's previously worked in Finance and Mobile as well as an independent consultant and coach specialising in TDD on iOS.
Представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++. Автор нескольких принятых предложений к стандарту языка C++. Aвтор Boost библиотек TypeIndex, DLL, Stacktrace и активный maintainer Any, Conversion, LexicalCast, Variant. Автор книги "Boost C++ Application Development Cookbook" и "Boost C++ Application Development Cookbook, Second Edition ".
Кандидат физико-математических наук, 10 лет лет опыта в преподавании программирования студентам, в том числе в Киевском национальном университете имени Тараса Шевченко. Более 10 лет опыта в промышленном программировании (в основном на языках C/C++/C#), с упором в домены резервного копирования и восстановления данных. Вадим – автор книг “Алгоритмические языки и основы программирования: язык C”, “Основы объектно-ориентированного программирования на языке C++”; автор 29 научных публикаций по теории программирования; переводчик с английского на русский книг “Принципы объектно-ориентированного программирования” (Антон Элиенс), “Объединение теорий программирования” (Чарльз Хоар, Хи Цзифень). В данный момент: ведущий разработчик в компании SolarWinds, проект в области сетевой безопасности. Области интересов: программирование на языке С++ и функциональных языках (Haskell).
Rainer Grimm has worked as a software architect, team lead and instructor for about 20 years. In his spare time he likes to write articles about C++, Python and Haskell, but he also likes to speak at conferences. He publishes very often on his blog "Modern C++". Now he is a trainer giving seminars to modern C++ and Python. His books "C++11 für Programmierer ", "C++" and "C++ - Standardbiliothek" , and the "The C++ Standard Library" were published by O'Reilly and Leanpub.
Ivan Čukić is the author of "Functional Programming in C++" published by Manning. He is a Senior Software Engineer at KDAB and one of the core developers of KDE, the largest free/libre open source C++ project. He is also teaching modern C++ techniques and functional programming at the Faculty of Mathematics in Belgrade and has been using C++ for more than 20 years. He has been researching functional programming in C++ before and during his PhD studies, and uses the techniques in real-world projects.
Занимается разработкой в области резервного копирования данных. В свободное время является активным разработчиком Boost.Algorithm, интересуется алгоритмами для работы с текстом. В оставшееся время помогает РГ21 с развитием C++.
Работает в команде PVS-Studio и занимается разработкой ядра анализатора. В том числе оказывает поддержку пользователей, являющихся C и C++ программистами. Человек, который чаще отвечает "жду тесты", вместо классического "компилируется".
Klaus Iglberger is a freelancing C++ trainer and consultant. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced C++ courses around the world. Additionally, he is the initiator and lead designer of the Blaze C++ math library and (co-)organizer of the Munich C++ user group.
Антон Полухин - представитель России в ISO на международных заседаниях рабочей группы по стандартизации C++. Автор нескольких принятых предложений к стандарту языка C++. Aвтор Boost библиотек TypeIndex, DLL, Stacktrace и активный maintainer Any, Conversion, LexicalCast, Variant. Автор книги "Boost C++ Application Development Cookbook" и "Boost C++ Application Development Cookbook, Second Edition". Роман Русяев занимается разработкой компилятора нейронных сетей для NPU (Neural Processing Unit) в российском центре Samsung. Скомпилированные нейронные сети поставляются в составе флагманских телефонов Samsung, таких как Galaxy Note 10. Имеется опыт разработки оптимизирующего компилятора под VLIW-архитектуру «Эльбрус» и архитектуру SPARC с языков C, C++, Fortran.
Security Researcher at Check Point Research. Used to work as a C++ Developer. Worked on industrial automation and cyber security products. Currently utilizes his skills in malware analysis and security research.
Выпускник МГТУ имени Н.Э. Баумана (ракетостроение). Любит C++ и умеет его готовить. Любитель метапрограммирования, многопоточного и асинхронного программирования, энтузиаст распространения корутин.
Докладчик уточняется
В любой большой кодовой базе можно встретить куски абсолютно непонятного кода. Как правило такой код пишется чтобы немного
выиграть в производительности приложения... и как правило такой код не нужен в принципе, так как оптимизирует не то что нужно,
не в том месте где это нужно и не так как надо.
В ходе мастер класса мы натолкнёмся на особенности аллокаторов, оптимизаторов и имплементаций контейнеров; посмотрим на ассемблерный
код; научимся правильно и понятно писать быстрые однопоточные и многопоточные приложения.
Для курса понадобится всего лишь базовые знания C++ и компилятор с поддержкой C++11 (как минимум Visual Studio 2013, или Clang-3.3,
или GCC-4.8).
В любой большой кодовой базе можно встретить куски абсолютно непонятного кода. Как правило такой код пишется чтобы немного
выиграть в производительности приложения... и как правило такой код не нужен в принципе, так как оптимизирует не то что нужно,
не в том месте где это нужно и не так как надо.
В ходе мастер класса мы натолкнёмся на особенности аллокаторов, оптимизаторов и имплементаций контейнеров; посмотрим на ассемблерный
код; научимся правильно и понятно писать быстрые однопоточные и многопоточные приложения.
Для курса понадобится всего лишь базовые знания C++ и компилятор с поддержкой C++11 (как минимум Visual Studio 2013, или Clang-3.3,
или GCC-4.8).
Course Description
This class gives you a detailed insight into the multithreading facilities of C++11, C++14, and the parallel algorithms which
we got with C++17.
Additionally, we will have a look into the C++ memory model consisting of the atomics and the various memory orders in C++.
This insight will provide you with a better understanding of the general concurrency features of C++.
Prerequisites
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.
Course Topics
- Multithreading
-- Threads
-- Shared Data
-- Mutexes and Locks
-- Thread-safe Initialisation
-- Thread-Local Data
-- Condition Variables
-- Tasks (Promises and Futures)
-- Parallel STL
- Memory Model
Course Description
This class gives you a detailed insight into the multithreading facilities of C++11, C++14, and the parallel algorithms which
we got with C++17.
Additionally, we will have a look into the C++ memory model consisting of the atomics and the various memory orders in C++.
This insight will provide you with a better understanding of the general concurrency features of C++.
Prerequisites
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.
Course Topics
- Multithreading
-- Threads
-- Shared Data
-- Mutexes and Locks
-- Thread-safe Initialisation
-- Thread-Local Data
-- Condition Variables
-- Tasks (Promises and Futures)
-- Parallel STL
- Memory Model
Design patterns have proven to be useful over several decades and knowledge about them is still very useful to design robust,
decoupled systems. Modern C++, however, has profoundly changed the way we use C++, think about design and implement solutions.
This hands-on training explores modern C++ design and the modern forms of the classic design patterns. It provides guidelines,
idioms and best practices for sustainable and maintainable design, which enable programmers to create professional, high-quality
code. Amongst others it will answer the following questions:
- How does good C++ design with a minimum of dependencies look like?
- Why does classical C++ design based on inheritance hierarchies fail so often?
- What advantages does value semantics based design provide?
- How are the classic design patterns realised in modern C++?
- What are alternatives to the classic design patterns?
After this course, participants will ...
... have an impression on the modern alternatives of classic design patterns;
... have gained knowledge about modern design techniques;
... understand how std::function, std::any, and ranges work;
... avoid the usual pitfalls in the context of inheritance;
... know about the importance of value semantics.
Classic Design Patterns Revisited:
- Command
- Prototype
- Strategy
- Observer
- Visitor
- Factory
- Decorator
- Template Method
- Singleton
Modern Design Patterns:
- Type Erasure
- CRTP
- Expression Templates
- Policy Based Design
Design patterns have proven to be useful over several decades and knowledge about them is still very useful to design robust,
decoupled systems. Modern C++, however, has profoundly changed the way we use C++, think about design and implement solutions.
This hands-on training explores modern C++ design and the modern forms of the classic design patterns. It provides guidelines,
idioms and best practices for sustainable and maintainable design, which enable programmers to create professional, high-quality
code. Amongst others it will answer the following questions:
- How does good C++ design with a minimum of dependencies look like?
- Why does classical C++ design based on inheritance hierarchies fail so often?
- What advantages does value semantics based design provide?
- How are the classic design patterns realised in modern C++?
- What are alternatives to the classic design patterns?
After this course, participants will ...
... have an impression on the modern alternatives of classic design patterns;
... have gained knowledge about modern design techniques;
... understand how std::function, std::any, and ranges work;
... avoid the usual pitfalls in the context of inheritance;
... know about the importance of value semantics.
Classic Design Patterns Revisited:
- Command
- Prototype
- Strategy
- Observer
- Visitor
- Factory
- Decorator
- Template Method
- Singleton
Modern Design Patterns:
- Type Erasure
- CRTP
- Expression Templates
- Policy Based Design
- Категории выражений: как не запутаться в (g?l|p?r|x)value;
- Семантика перемещения и её альтернативы (RVO, CoW);
- Специализации функций для короткоживущих объектов;
- Вычисления на этапе компиляции с помощью constexpr;
- Параметрический полиморфизм;
- Гибкая настройка с помощью классов свойств;
- SFINAE и сопоставление с образцом;
- Арифметические вычисления на типах;
- Обработка списков на этапе компиляции.
- Категории выражений: как не запутаться в (g?l|p?r|x)value;
- Семантика перемещения и её альтернативы (RVO, CoW);
- Специализации функций для короткоживущих объектов;
- Вычисления на этапе компиляции с помощью constexpr;
- Параметрический полиморфизм;
- Гибкая настройка с помощью классов свойств;
- SFINAE и сопоставление с образцом;
- Арифметические вычисления на типах;
- Обработка списков на этапе компиляции.
What kind of language is C++? Is it a procedural programming language? An object-oriented programming language? A functional programming language? A generic programming language? All of those? None of those? In this talk I’ll analyse why it is increasingly hard to answer these questions, especially since the advent of “Modern C++”. I’ll demonstrate by example that the good solutions, i.e. the solutions that promote loose coupling, ease of use, ease of maintenance, and performance, are not firmly rooted in either one of the traditional paradigms. The examples will raise doubt whether it is reasonable to try to assign C++ to any one of the paradigms. Instead, they may be an indication that we should embrace no-paradigm programming.
I want to start with a question: Why do we need Guidelines such as the C++ Core Guidelines for Modern C++? My answer consists of three observations: C++ is complicated for the novice, challenging for the professional, and used in safety critical environments. Guidelines should give us the means to write type safe, bounds safe, and lifetime safe code by design. My presentation gives you a concise insight into the lifesaving rules of the C++ Core Guidelines to write safe C++ code by design. I cover in my presentation topics such as interfaces, functions, classes and class hierarchies, resource management, Expressions and statements, error handling, constants and immutability, templates and generic programming, concurrency and the standard library.
Copy elision - важная и неотъемлемая языковая оптимизация, которая позволяет нам избавляться от лишних копирований и перемещений,
что благоприятно сказывается на производительности приложений. Ни один разработчик не представляет себе компилятор, который
не умеет NRVO. Но насколько copy elision действительно избавляет нас от лишних конструирований копий объектов? В каких случаях
он способен это делать, а в каких - нет, и почему? А можно ли что-то сделать, чтобы его улучшить, и как это улучшение повлияет
на производительность наших программ и на написание кода?
Данный доклад является ответом на все эти вопросы и не только. Мы расскажем о новом пропозале в Стандарт - ultimate copy elision,
и покажем как он улучшит жизнь разработчиков на C++!
Malware often use different Anti-Analysis approaches to deceive a disassembler, detect a debugger or just make the analysis unbearable either with a disassembler or a debugger. However these techniques are used not only by the bad guys but also in some products which owners don't want them to be researched. This talk is an introduction to anti-debug and obfuscation tricks in C/C++. It will cover the following topics: - compile time encryption for strings; - how to make breakpoints on system functions useless; - how to hide system call from sandboxes and API monitors; - how to detect an attached debugger.
C++20 is finally here and with it the feature that was long time coming -- concepts. This talk will cover what concepts conceptually are (pun intended), how they fit into the rest of C++, the requires syntax and a few caveats of using them. Some people deem concepts a huge and important addition to C++ while some consider them unnecessary because most features they provide can be simulated with the detection idiom. Let's see in which group you will be after this talk.
When static vs. dynamic language debates flare up, someone invariably says that static languages are best because the compiler catches so many potential bugs. To which the dynamic language advocates say, "that doesn't happen very often, and when it does your tests will catch it - you do have tests, don't you?" Meanwhile, the debate about how to do error handling is almost as religious - do you do exceptions, error codes, assertions, contracts or something like optionals or result/ expected types? Could it be that all these concerns are related - and that understanding _how_ they are related may help us to resolve these conflicts once and for all. More importantly, can we take the best of all worlds to arrive at the nirvana of understandable, maintainable, robust, correct, code? These are the questions we will ponder, and hopefully answer.
What kind of language is C++? Is it a procedural programming language? An object-oriented programming language? A functional programming language? A generic programming language? All of those? None of those? In this talk I’ll analyse why it is increasingly hard to answer these questions, especially since the advent of “Modern C++”. I’ll demonstrate by example that the good solutions, i.e. the solutions that promote loose coupling, ease of use, ease of maintenance, and performance, are not firmly rooted in either one of the traditional paradigms. The examples will raise doubt whether it is reasonable to try to assign C++ to any one of the paradigms. Instead, they may be an indication that we should embrace no-paradigm programming.
Вот уже более 10 лет мы разрабатываем статический анализатор кода для языка C и C++. Оглядываясь назад, можно вспомнить множество интересных событий, точек бифуркации, достижений и ляпов. Этот рассказ затронет широкий спектр проблем, начиная от сосулек и кончая самостоятельным допиливанием парсера C++ кода. Рассказ будет интересен как просто ценителям истории C++, так и тем, кто интересуется развитием стартапов в сфере программирования.
Есть в С++ комитете группа людей, которая занимается вопросами представления чисел в различном их виде в C++. Если Вам интересно, какие именно технические проблемы и как решаются (или предлагаются к решению), зачем их вообще решают и почему об этой подгруппе Комитета слышно практически ничего - добро пожаловать. Если Вам интересны некоторые особенности работы внутри Комитета (в том числе с некоторыми внутренними интригами) - добро пожаловать тем более :) Степень “хардкорности”: низкая. Уровень гнева в сторону С++ комитета: средний.
Предложение P1717 в стандарт C++ предлагает сверхпособности, не имеющие равных тем, что у нас были прежде, даже в сравнении с наиболее изощрёнными приёмами шаблонного метапрограммирования. Мы приоткроем завесу над этим и узнаем как обуздать эту мощь на примере реализации сериализации. Мы увидим какие возможности предлагает рефлексия, грядущая в скором времени, и как метапрограммирование в C++ качественно значительно изменится в будущем.
When static vs. dynamic language debates flare up, someone invariably says that static languages are best because the compiler catches so many potential bugs. To which the dynamic language advocates say, "that doesn't happen very often, and when it does your tests will catch it - you do have tests, don't you?" Meanwhile, the debate about how to do error handling is almost as religious - do you do exceptions, error codes, assertions, contracts or something like optionals or result/ expected types? Could it be that all these concerns are related - and that understanding _how_ they are related may help us to resolve these conflicts once and for all. More importantly, can we take the best of all worlds to arrive at the nirvana of understandable, maintainable, robust, correct, code? These are the questions we will ponder, and hopefully answer.
What kind of language is C++? Is it a procedural programming language? An object-oriented programming language? A functional programming language? A generic programming language? All of those? None of those? In this talk I’ll analyse why it is increasingly hard to answer these questions, especially since the advent of “Modern C++”. I’ll demonstrate by example that the good solutions, i.e. the solutions that promote loose coupling, ease of use, ease of maintenance, and performance, are not firmly rooted in either one of the traditional paradigms. The examples will raise doubt whether it is reasonable to try to assign C++ to any one of the paradigms. Instead, they may be an indication that we should embrace no-paradigm programming.
When static vs. dynamic language debates flare up, someone invariably says that static languages are best because the compiler catches so many potential bugs. To which the dynamic language advocates say, "that doesn't happen very often, and when it does your tests will catch it - you do have tests, don't you?" Meanwhile, the debate about how to do error handling is almost as religious - do you do exceptions, error codes, assertions, contracts or something like optionals or result/ expected types? Could it be that all these concerns are related - and that understanding _how_ they are related may help us to resolve these conflicts once and for all. More importantly, can we take the best of all worlds to arrive at the nirvana of understandable, maintainable, robust, correct, code? These are the questions we will ponder, and hopefully answer.