C++ RussiaSaint-Petersburg, RussiaApril 19-21 2018

About

C++ Russia with bliny and matryoshkas! With great guests from around the world for two days.
The conference is for experienced developers!

Location: Saint Petersburg, Park Inn Pribaltiyskaya Hotel.

So far we held conferences in several cities in Russia: Moscow, Saint-Petersburg,
Yekaterinburg, Nizhny Novgorod, Kazan, Tomsk and Saratov. We invite speakers from variety of cities and from other countries as well.

Keynote speaker will be Jon Kalb, the C++ developer with 25-years of expirience.
During that time he was programming with C++ for Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun,
Yahoo!, and a couple of companies you've never heard about. Jon is the chairman of CppCon and the author of the "C++ Today: The Beast is Back" book.

Talks

21/04/18

Track A
13:45 - 14:45

Dietmar Kühl

Concept Based Testing

With concepts being added to the next revision of C++ it is expected that new concepts get defined. Each concept defines a set of operations used by generic code. One such use could be a generic test verifying that all parts of a concept are defined and checking generic interactions between a concept’s operations. Ideally, such a test even works with classes only partially modelling a concept to guide the implementation of classes.

This presentation doesn’t use the actual concept extensions but shows how generic tests can be created using features of C++17. For the generic tests the detection idiom and constexpr if are used to determine availability of required operations and gracefully dealing with the abseence of operations. The generic tests should be able to cover basics of classes modelling a concept. Obviously, specific behaviour for classes will still require corresponding tests.

Attendees are expected to be familiar basic C++. However, deep knowledge of template meta programming is not needed.

In C++ you can solve a single task in a multiple ways. We will pick an actual task from production, and investigate how it can be solved with a number of tools that C++ provides: STL containers, boost.range, C++20 ranges, coroutines. We will compare API constraints and performance of different solutions, and how they can be easily converted from one to another if the code is well-structured. During the way we explore applications of some useful C++17 features like constexpr if, selection statements with initializer, std::not_fn, etc. Special attention will be payed to my favorite topic - standard algorithms.

We are all aware that we should know the STL algorithms. Including them in our designs allows us to make our code more expressive and more robust. And sometimes, in a spectacular way.

But do you know your STL algorithms?

In this talk, you'll see the 105 algorithms that the STL currently has, including those added in C++11 and C++17. But more than just a listing, the point of this talk is to present the different groups of algorithms, the patterns they form in the STL, and how the algorithms relate together.

This kind of big picture is the best way I know to actually remember them all, and constitute a toolbox chock-full of ways to make our code more expressive and more robust.

From Iterators To Ranges — The Upcoming Evolution Of the Standard Library

Pairs of iterators are ubiquitous throughout the C++ library. It is generally accepted that combining such a pair into a single entity usually termed Range delivers more concise and readable code. Defining the precise semantics of such Range concept proves surprisingly tricky, however. Theoretical considerations conflict with practical ones. Some design goals are mutually incompatible altogether.

Parallel programming can be used to take advantage of multi-core and heterogeneous architectures and can significantly increase the performance of software. Modern C++ has gone a long way to making parallel programming easier and more accessible; providing both high-level and low-level abstractions. C++17 takes this further by providing high level parallel algorithms, and much more is expected in C++20. This talk will give an overview of the current parallelism utilities available, and look to the future of how GPUs and heterogeneous systems can be supported through new standard library features and other standards like SYCL.

Optimization — making code faster — is an essential ingredient of modern computing. The speed of light is limited, so we're unable to increase computer clock speed anymore; in other news, the matter is composed of discrete atoms so we can't make circuits much smaller than they already are. That means more speed for essential tasks — ranging from speech recognition to self-driving cars to General Artificial Intelligence — is to be found in people's minds.

This talk discusses, with simple examples, a few algorithm design principles that can be applied consistently to improve, or sometimes entirely redesign, algorithms for better performance.