Joël Falcou
Fred Tingaud
Matt Godbolt
Anders Schau Knatten
Victor Ciura
Andreas Fertig
Peter Sommerlad
Phil Nash
Arno Schoedl
Satabdi Das
Julien Jomier
Jules Pénuchot
Pavel Novikov
Loïc Joly
Filipe Mulonde
Clément Grégoire
Philippe Bourgau
Sandor Dargo
Barry Revzin
Philippe Bourgau
Sébastien Gonzalve
Ivica Bogosavljevic
Ólafur Waage
Chris Croft White
Sandor Dargo
Sébastien Gonzalve
Serge Guelton
min
, max
, and MoreWalter E Brown
Damien Buhl
Joël Falcou
Sy Brand
Joël Falcou
Fred Tingaud
Joël Falcou , CODE RECKONS
Joel is an associate professor at the University Paris-Saclay and Researcher at the Laboratoire de Recherche d’Informatique in Orsay, France. His research focuses on studying generative programming idioms and techniques to design tools for parallel software development.
The main parts of his work are:
Joel is the co-host of the C++FRUG Meetup, president of the C++FRUG Association, co-organizes the CPPP Conference, and is part entrepreneur, being one of the co-founder of CODE RECKONS, a company focused on bringing people and company up to date to the best and newest C++.
Fred Tingaud ,
Joël Falcou , CODE RECKONS
Joel is an associate professor at the University Paris-Saclay and Researcher at the Laboratoire de Recherche d’Informatique in Orsay, France. His research focuses on studying generative programming idioms and techniques to design tools for parallel software development.
The main parts of his work are:
Joel is the co-host of the C++FRUG Meetup, president of the C++FRUG Association, co-organizes the CPPP Conference, and is part entrepreneur, being one of the co-founder of CODE RECKONS, a company focused on bringing people and company up to date to the best and newest C++.
Fred Tingaud ,
Programmers, it turns out, are human beings. This means they not only feel emotions, they leave traces of those emotions behind in their code. Kate will show you why that is so, and what you can do about it.
View presentationKate Gregory ,
Kate Gregory has been using C++ since before Microsoft had a C++ compiler, and has been paid to program since 1979. She loves C++ and believes that software should make our lives easier. That includes making the lives of developers easier! She'll stay up late arguing about deterministic destruction or how modern C++ is not the C++ you remember. Kate runs a small consulting firm in rural Ontario and provides mentoring and management consultant services, as well as writing code every week. She has spoken all over the world, written over a dozen books, and helped thousands of developers to be better at what they do. Kate is a Microsoft Regional Director, a Visual C++ MVP, an Imagine Cup judge and mentor, and an active contributor to StackOverflow and other StackExchange sites. She develops courses for Pluralsight, primarily on C++ and Visual Studio.
Le C++ dit "Moderne" mets l'accent sur la généricité et l'expressivité du code.
Les algorithmes de la bibliothèque standard en sont un parfait exemple, capables d'accomplir toutes sortes d'opérations sur des collections, qu'importe leur type.Dans cette session, nous rappellerons le concept des itérateurs et comment ils sont utilisés pour lier les conteneurs aux algorithmes, puis nous explorerons les algorithmes les plus commun offerts par la STL et comment les utiliser pour résoudre simplement bon nombres de problèmes liés aux collections en C++.Enfin nous conclurons avec un aperçu du futur et comment C++20 rendra les algorithmes encore meilleurs. View presentationMathieu Ropert ,
Mathieu s'est exilé en Suède pour programmer Europa Universalis chez Paradox Development Studio, le plus abouti des jeux de stratégie historique.
Avant son départ il était co-organisateur du Meetup parisien C++ FRUG.
Il a par le passé travaillé sur des frameworks de communication et sérialisation (SQL, REST...), une implémentation de la STL pour anciens compilateurs et sur divers noyaux de système d'exploitation.
Ses sujets préférés sont le package management en C++, l'enseignement du C++ Moderne et autres bonnes pratiques de développement.
Il tiens un blog (en anglais) sur le développement C++: https://mropert.github.io/
Writing high-quality error-free C++ code itself is a challenging task, let alone when having to juggle multiple platforms at the same time! In this session, I will talk about many challenges in cross-platform C++ development and how tools can help: what options do I have if my production environment is different than my dev box? Can I be as productive when working with remote Linux machines? Is there any good C++ editor that works consistently on all platforms I work on? How can I efficiently build and debug CMake projects, or even get IntelliSense? How can I easily find and acquire open sourced libraries? Is there an easy way to write and run cross-platform tests? Come to see what Visual Studio 2017, Visual Studio Code, CMake, WSL, Vcpkg and more have to offer to make cross-platform C++ development much easier in this demo-heavy talk.
View presentationIn this talk I will present an advancement on the Compile Time Regular Expression (CTRE) Library. The library was designed with new C++20 features, and it uses novel techniques. This presentation sums up the recent work on the library.
One of the primary topics of this talk will be an explanation of the new Deterministic Finite Automaton (DFA) engine in the library and how it's built and optimised during compilation. I will explain the differences and limitations of the new engine in comparison to the previous Back Tracking engine.I will address these differences with a benchmark and I will discuss the generated assembly. Even if you are not interested in regular expressions, you will learn new techniques in compile-time meta-programming and see new C++20 features in action. View presentationHana Dusíková ,
Hana is working as a senior researcher in Avast Software. Her responsibility is exploring new ideas and optimizing existing ones. She also propagates modern C++ techniques and libraries in internal techtalks and gives talks at local C++ meetups.
She studied computer science at Mendel university and subsequently taught several courses there, including: Data Structures, Computability and Complexity, and Formal Languages and Automata.
In this workshop, attendees will do mock interviews with people who are involved in recruitment for developers roles.
Each mock interview will be followed by a retrospective of what went well and which point to work on.The LLVM tool suite has changed the rules of C++ codeline evolution by allowing to manipulate the AST. As example, we can list all the popular clang-tidy checks like "modernize-replace-auto-ptr" which allows to replace old C++98 std::auto_ptr usages by C++11 std::unique_ptr.
However, adding a new check to clang-tidy could be difficult as the C++ AST is complex and the clang API rich without knowing where to start.The purpose here will be to present how to create a simple rule and as an example, we will try to replace some standard algorithm by the new range ones.This live coding session will present step by step how to:Jérémy Demeule ,
Jérémy Demeule is a Principal Software Engineer at Murex. He is working on data manipulation subjects (database access, ORM, serialization) and likes to create clang based refactoring tools to facilitate his work.
Gabriel Dos Reis ,
Gabriel Dos Reis is a Principal Software Engineer at Microsoft, where he works in the area of large scale software construction, tools, and techniques. He is also a researcher, and a longtime member of the C++ community, author and co-author of numerous extensions to support compile-time and generic programming, and programming in the large. His research interests include programming tools for dependable software. Prior to joining Microsoft, he was Assistant Professor at Texas A&M University. Dr. Dos Reis was a recipient of the 2012 National Science Foundation CAREER award for his research in compilers for dependable computational mathematics and educational activities.
On parle souvent du langage C++ comme d'un langage alliant performance et abstraction. Mais la « sauce secrète » n'est connue que du compilateur, et c'est autant lui qu'il faut remercier que le langage qu'il compile.
C++ a en effet cette particularité de devoir ses bonnes propriétés autant au standard qu'au bon vouloir des développeurs de compilateur, et aussi à la capacité du développeur à utiliser finement le compilateur pour qu'un même code atteigne des objectifs différents : portabilité ? facilité de debug ? empreinte mémoire ? sécurité ? performance ? vitesse de compilation ?À nous de bien connaître le compilateur pour utiliser la bonne combinaison d'option suivant ce que l'ont veut faire de son code. View presentationSerge Guelton ,
Sometime a tinkerer, sometime a wood chopper, sometimes a compiler engineer, and every now and then a wizard (apprentice) of the coast
Security vulnerabilities and secure coding is often talked about in the abstract by programmers, but rarely understood. In this talk we will walk through a simple exploit, how it’s developed and how it’s used. The goal is to try to get a feeling for the point of view of an "attacker", and to slowly start looking at exploitation as another programming tool. We will mainly be looking at C and x86_64 assembly, so bring snacks.
View presentationPatricia Aas ,
Patricia is a programmer who has worked mostly in C++ and Java. She has spent her career continuously delivering from the same code-base to a large user base. She has worked on two browsers (Opera and Vivaldi), worked as a Java consultant and on embedded telepresence endpoints for Cisco. She is focused on the maintainability and flexibility of software architecture, and how to extend it to provide cutting edge user experiences. Her focus on the end user has led her work more and more toward privacy and security, and she has recently started her own company, TurtleSec, hoping to contribute positively to the infosec and C++ communities. She is also involved in the Include C++ organization hoping to improve diversity and inclusion in the C++ community.
Can't we just add a functional programming language to C++ as a DSL that integrates seamlessly? Would that be a good thing? Would I have to understand category theory to use it? Whether or not you are a fan of domain-specific languages it seems we are getting one in C++20's standard library. The ranges DSL brings with it some high-level concepts and with a little abuse many more concepts, from functional programming. At the same time, there seems to be interest in other DSLs bringing other functional concepts such as monadic extensions to optional or monadic composition of asynchronous tasks. But why in separate DSLs? This seems odd because unifying things is at the very heart of functional programming.
In this talk, I will make the argument that with 3 small extensions to the ranges DSL syntax we can make one DSL to rule them all lifting may existing C++ language and library features into a more functional or declarative paradigm as well as unifying many boost libraries. After refreshing the core concepts of the ranges DSL and presenting my proposed extentions we will take a whirlwind tour of how I think we should add functional programming paradigms to C++ in a unified manner. We will rethink sum types, fusion metaprogramming, event-based programming, monads, Haskell do notation, closure's transducers, rust's match, named/deduced parameters, state machines, "terser" lambda syntax, pointfree programming, generative programming, and declarative programming paradigms. View presentationOdin Olmes ,
Odin was allocated from a pool of hippies in the middle of the forest. He spent most of his career designing electronic circuits and programming micro controllers in assembler. One day after having shot himself in the foot particularly badly a friend introduced him to C++, a seriously powerful and ongoing addiction followed. Odin has authored many proof of concept libraries in the embedded field and is trying to revolutionize this domain. Odin co-authored the kvasir::mpl library, co-founded the embo.io conference and was a heavy contributor to the brigand library. In his day job, he teaches people how to shoot themselves in the foot less and get more from their compiler, both with his in-house team as well as in a training and consulting role.
Écrire une classe en C++ n’est pas un exercice aussi simple que ce que l’on pourrait espérer. Au-delà des questions d’architecture, une multitude de détails techniques peuvent être autant d’embûches pour le développeur un peu candide : constructeurs de copie, opérateurs d’affectation, comparaison, sémantique de déplacement…
Le parti pris de cette présentation ne sera pas d’entrer successivement dans toutes les particularités de ces opérations, mais plutôt de partir de l’approche inverse : essayer de catégoriser les différentes sortes de classes que l’on rencontre régulièrement, afin de voir pour chacune d’entre elles comment n’écrire que le minimum nécessaire. Notre objectif : obtenir un code robuste et maintenable, des classes élégantes et épurées. View presentationLoïc Joly , SonarSource
Loïc is a C++ coder, speaker, teacher and expert. He represents France on the ISO C++ standardization committee and is also a member of the committee drafting the next version of the MISRA C++ standard for safety-critical systems.
In addition to developing in C++, he has a special interest in teaching it and spreading good practices across the community. He is a frequent speaker at meetups and conferences and teaches at Telecom SudParis. Since he joined SonarSource in 2018, he has worked on static analysis for C++, both specifying rules to help other developers and having the fun of implementing them.
You've inherited some legacy code: it's valuable, but it doesn't have tests, and it wasn't designed to be testable, so you need to start refactoring! But you can't refactor safely until the code has tests, and you can't add tests without refactoring. How can you ever break out of this loop?
I will present a new C++ library for applying Llewellyn Falco's "Approval Tests" approach to testing cross-platform C++ code - for both legacy and green-field systems, and a range of testing frameworks.I will describe its use in some real-world situations, including how to quickly lock down the behaviour of legacy code. I will show how to quickly achieve good test coverage, even for very large sets of inputs. Finally, I will also describe some general techniques I learned along the way. View presentationClare Macrae ,
Clare has worked in software development for over 30 years, and in C++ for 20 years.
Since 2017, she has used her spare time to work remotely with Llewellyn Falco on ApprovalTests.cpp, to radically simplify testing of legacy code. She has enjoyed this so much that she recently went independent, to focus even more on helping others to work more easily with legacy code.Clare was until recently a Principal Scientific Software Engineer at Cambridge Crystallographic Data Centre, which releases structural data and powerful software for scientific education, research, and streamlining the design and manufacture of new medicines.From 2016 to 2018, she lead the team that replaced their 30 year old database format and Fortran code. She then returned to C++ and Qt, working on the popular 3D crystal structure visualisation program Mercury, which she was the original author of.When not thinking about supporting teams to streamline development, testing and releases, she spends time with family and friends, and enjoys the Raspberry Pi, folk music and cinema.Composition is the essence of code architecture, and monoids are a powerful and underappreciated compositional pattern that is lurking in code of all kinds. Identifying and exploiting monoids is perhaps the best way to improve our code's large-scale architecture, in the same way that recognizing algorithms and replacing raw loops is a great way to improve small-scale architecture.
When we start looking for monoids, we find that they are everywhere, and it's not just about std::accumulate with addition! In this talk I want to develop an intuition for recognizing this ubiquitous design pattern. I will show some ways to think about code capabilities at a higher level, and how thinking in terms of monoids can help us with things like API design, incremental computation, evolving system state and distributing work. Along the way we'll also look at how C++ language and library features can support putting monoids to work in our code. View presentationBen Deane ,
Ben was in the game industry for 23 years, at companies like EA and Blizzard. He's always looking for useful new techniques in C++, and he geeks out on algorithms, APIs, types and functional programming.
Matt Godbolt ,
Matt is a C++ programmer and occasional verb. He loves writing efficient code and sharing his passion about how computers work under the hood. An engineer at Aquatic, he has previously worked on low-latency trading, on mobile apps at Google, run a C++ tools company and spent more than a decade making console games. When not tinkering on Compiler Explorer, Matt enjoys working on emulators for old 8-bit computer hardware.
Barry Revzin ,
Barry is a senior C++ developer at Jump Trading in Chicago, a research and technology driven trading firm. After programming for many years, he got really into the nuances and intricacies of C++ by being unreasonably active on StackOverflow (where he is the top contributor in C++14, C++17, and C++20). A lot of his C++ knowledge comes from just answering questions that he doesn't know the answers to, especially when he answers them incorrectly at first.
His C++ involvement escalated when he started attending standards committee meetings in 2016, having written dozens of papers for C++20 and now C++23. You might know him from such features as <=>, pack expansion in lambda init-capture, explicit(bool), conditionally trivial special member functions and, recently approved for C++23, deducing this.
Outside of the C++ world, Barry is an obsessive swimming fan. He writes fun data articles for SwimSwam and also does analysis for the DC Trident, a professional swim team featuring Olympic Gold Medalists Zach Apple and Anna Hopkin, managed by two-time Olympian Kaitlin Sandeno.
C++20 is probably the biggest change to the language ever since. In this session, we will look into some changes that templates received with C++20. The biggest change is the introduction of Concepts.
We don’t stop there. We will also talk about improvements to CTAD and NTTP. Of course, we will also look into how templated lambdas work in C++20.
By the end of the talk, attendees have learned about the newest C++20 template updates and how to apply them.
Andreas Fertig ,
Andreas Fertig, CEO of Unique Code GmbH, is an experienced trainer and lecturer for C++ for standards 11 to 20.
Andreas is involved in the C++ standardization committee, in which the new standards are developed. At international conferences, he presents how code can be written better. He publishes specialist articles, e.g., for iX magazine, and has published several textbooks on C++.With C++ Insights (https://cppinsights.io), Andreas has created an internationally recognized tool that enables users to look behind the scenes of C++ and thus to understand constructs even better.
Before working as a trainer and consultant, he worked for Philips Medizin Systeme GmbH for ten years as a C++ software developer and architect focusing on embedded systems.
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.
Arno Schoedl CTO, think-cell
Arno is the CTO of think-cell Software GmbH. He is responsible for the design, architecture and development of all their software products, and the evolution of the company's open source C++ library. Before founding think-cell, Arno worked at Microsoft Research and McKinsey. Arno studied computer science and management and holds a Ph.D. from the Georgia Institute of Technology with a specialization in Computer Graphics.
In this talk, you'll learn all you need to know about one of the flagship features of C++20; concepts. First, I'll explain the concept behind concepts, why templates needed this extension. Then we'll discover the different ways concepts can be used with functions and with classes. What kind of concepts do we get with the standard library of C++20? That's also something we'll discuss, right before we will start the most interesting part of this session; how to write your own concepts? From the simplest we'll go towards more complex examples while describing all the different constraints we express with concepts. We'll finish with some real-life examples where concepts can document better and/or simplify our codebase.
Sandor Dargo , Amadeus
Sandor is a passionate software craftsman focusing on reducing the maintenance costs by developing, applying and enforcing clean code standards. His other core activity is knowledge sharing both oral and written, within and outside of his employer. When not reading or writing, he spends most of his free time with his two children and his wife baking at home or travelling to new places.
This talk covers all the knowledge you need about atomics to give you a good understanding of how they work under the hood and make sure your code is correct.
C++11 introduced std::atomic template class which supports six memory orderings, writing correct concurrent programs which use the atomic classes can be challenging. It requires understanding the complexity of how std::atomic works under the hood. The goal of this talk is to encourage programmers to use the atomic classes when appropriate and give them the knowledge to do so correctly.
This talk will help you confidently use atomics correctly by bringing knowledge of some of the main components that make parallelism possible in modern computer systems, the relationship between these components, and the individual contribution of each of these components in making atomic difficult to use correctly.
This talk will be aimed at programmers who are new to std::atomic as well as those who have been using these classes. I will show some aspects of atomics which may not be commonly known.
Topics Covered:
Filipe Mulonde , Peter the Great St.Petersburg Polytechnic University
Software Engineer passionate about programming,holds a bachelor's degree in software engineering from Peter the Great St. Petersburg Polytechnic University and is now a final year Master's student in Artificial Intelligence at this same university. I worked as a software engineer at JSC NIIAS-Research and Design Institute of Informatization, Automation , and Communication in Railway Transport of the Russian Federation. Doing code review and increase the performance of an autonomous car using parallelism with C++.
My bachelor thesis was about the performance of C++ parallel constructs in Clang 10 in Linux (https://www.scribd.com/document/467436640/The-performance-of-C-parallel-constructs-in-Clang-10-in-Linux) I am co-founder of APA(Association of Angolan Programmers) a non-profit organization, helping to build a technological bridge between Africa (Angola) and the rest of the world.https://twitter.com/angolan_of/status/1326848737558335488 In my spare time I'm building a computer from scratch (The C++ abstract machine) using simple logic gates(https://filipemulonde.github.io/Cpp8bitAbstractMAchine.github.io/) or I'm building Autonomous robot orr playing whit x86 assembly. I have interests in x86 assembly,Parallel programming,C++,Digital Design, Microarchitecture and Computer Architecture, Computer Organization,OS, memory models,Digital computer Electronics and design of computing devices, compilers, Machine learning, robotics etc. Former mobile and web developer
In those days and ages of GPGPU, Cloud Computing, and other bleeding-edge large-scale computing architectures, peoples often forget that 150% of their CPU comes with a layer of Instruction Level Parallelism: their SIMD computing unit. If writing code using SIMD systems was less of a nightmare then, yeah, people would use it. So, obviously, we had to write a library for it.
Writing SIMD wrapper libraries is not a new idea and a bunch exists already. What we want to showcase here is EVE : a C++20 library giving access in a uniform way across both ARM (neon) and x86 (from sse2 to avx-512)..
Its main advantages over similar libraries include:
This talk will include a collection of demos (like https://godbolt.org/z/n6Pds78s6) for different library features and benchmarks, as well as practical advice on using EVE in your projects.
Joël Falcou , CODE RECKONS
Joel is an associate professor at the University Paris-Saclay and Researcher at the Laboratoire de Recherche d’Informatique in Orsay, France. His research focuses on studying generative programming idioms and techniques to design tools for parallel software development.
The main parts of his work are:
Joel is the co-host of the C++FRUG Meetup, president of the C++FRUG Association, co-organizes the CPPP Conference, and is part entrepreneur, being one of the co-founder of CODE RECKONS, a company focused on bringing people and company up to date to the best and newest C++.
WebAssembly is an interesting environment, especially for C++ programmers. With tools like Emscripten becoming better and better and game development libraries starting to add support for WebAssembly it is worth taking a look into this world.
We will go over what WebAssembly is, how a development environment might look like and then make a simple game that will run in the browser using C++. While making the game we will hit a few hurdles that are unique to WebAssembly and see how they can be overcome.
After this talk, you should have a good overview of WebAssembly and it can be used. This talk targets intermediate to advanced C++ programmers and no experience of game development is required.
Ólafur Waage , TurtleSec
Ólafur Waage is a Senior Software Developer at TurtleSec, he has worked previously in the Gaming and Air Traffic Control industries. In his spare time he unsurprisingly likes video games and puzzles. Also enjoys non fiction audio books and it would be a very strange day if it were not filled with music in some way.
As C++ metaprogramming paradigm grows richer revision after revision, C++ metaprograms get more complex, more powerful, and therefore compile times increase over time. Common knowledge about the impact of metaprogramming mechanisms like SFINAE, concepts, or if constexpr
on compile times are now parts of the C++ culture, but actual analysis of their behavior remains few and far between.
Compile time analysis should become as trivial as runtime analysis.
ctbench
was made with that purpose in mind and proposes a way of gathering, analysing, and comparing granular compile time data using Clang's time-trace feature. It provides a C++/CMake developer-friendly API to declare parametric compile-time benchmarks and comparisons through flexible plotting backends.
Jules Pénuchot , Parsys, LISN, Paris-Saclay University
Currently working on a PhD thesis about "Advanced techniques for parallel code generation" under Joel Falcou's supervision, the purpose of Jules' work is to automate parallel computing and make it more accessible. Personal interests include compilers, alternative club music, and inclusiveness.
Some people want to use the latest version C++ with all the bells and whistles. Some like it for only a few aspects, and would love to forget about the remaining parts. But is that possible? The answer is yes, and from freestanding C++ to a range of compiler flags, many a project do use C++ like this. Let's discover these choices and explore the consequence!
Serge Guelton ,
Sometime a tinkerer, sometime a wood chopper, sometimes a compiler engineer, and every now and then a wizard (apprentice) of the coast
At this talk, you will learn about how to keep your unit tests short, expressive and maintainable by using parameterized tests from the GTest library. First, we are going to cover why unit test code is as important as production code. Then, I'm going to show how we can make our tests less repetitive with different techniques. We are going to cover in detail, how to use parameterized tests and what are the pitfalls to avoid. Before concluding, I'll briefly cover what other libraries support the same feature.
Sandor Dargo , Amadeus
Sandor is a passionate software craftsman focusing on reducing the maintenance costs by developing, applying and enforcing clean code standards. His other core activity is knowledge sharing both oral and written, within and outside of his employer. When not reading or writing, he spends most of his free time with his two children and his wife baking at home or travelling to new places.
C++ class design has been error prone since the beginning, until Scott Meyers told us about the Rule-of-Three. But even that is not enforced by the language. In addition, C++11 changed the set of compiler-provided special member functions and the intrinsic rules have become more complicated. However, instead of starting from the rules for special member functions, we will look at what role a class type plays and how that maps on what special member functions to define and how, if any. Examples for class roles are Value, Relationship, Manager (scoped, unique, general), Mix-in. We will also look at the roles of member variable types that influence or imply the role of the class type. The role of a class will also take out many mysteries of move operations and will lead to clear guidance when and how to implement move: for suppressing copying, for managing unique ownership (Unique Manager) or for optimizing object copies (General Manager). We will rehearse the Rule of Zero, and learn more about the Rule of Five/Six, the Rule of DesDeMovA, and the Rule of Unique Three. This all will enable you to much more consciously and safely design your class types and combine types of member variables. You will have then the ability to select from a few reasonable combinations from the plethora of possibilities of special member function combinations: {public:,protected:,private:} x {destructor, default constructor, copy constructor, copy assignment, move constructor, assignment} x {noexcept(true),noexcept(false)} x { =default, =delete, {/body/}, not declared } (math as homework)
Peter Sommerlad , Better Software: Consulting, Training, Reviews
Peter Sommerlad is a consultant and trainer for Safe Modern C++ and Agile Software Engineering. Peter was professor at and director of IFS Institute for Software at FHO/HSR Rapperswil, Switzerland until February 2020. Peter is co-author of POSA Vol.1 and Security Patterns. He inspired the C++ IDE Cevelop with a unique C++ feedback, refactoring, and code modernization experience. Peter is a member of MISRA-C++, Hillside, ACM, IEEE Computer Society, ACCU, ISO WG23 and the ISO WG21 C++ committee.
Any C++ developer working in a large codebase is very likely to experience weird bugs. In this talk, I'll be sharing with you post-mortem of a set of weird bugs that occurred in deceptively simple code but were difficult to debug. Many of these bugs occurred at unfortunate moments - for instance, just before the day of the release or at the customer site. Almost all of them took nontrivial amount of time to debug them. But surprisingly it took only a few lines of code to fix them. The cause of these bugs range from static buffer overflow and stack corruption to undefined behaviours and many other exciting ways to break a C++ program. In this talk I’ll present the code snippets in which the bugs occurred, show you the fixes and share with you the pitfalls to avoid these bugs. Through these bugs, we focus on how to get better at debugging.
Satabdi Das ,
Satabdi has over 10 years of experience in C++. Currently she is working on a cloud based high performance file system in AWS. She has previously worked on an emulator, a parser and a static analyzer. She is also one of the co-founders of Boston Hack && Tell, a fun meetup for programmers for showcasing their work. Long back she contributed to Gnome as an Outreachy intern. And not so long back she spent three months at Recurse Center learning assembly, debugger internals and distributed systems.
It seems that in C++ there is nothing easier than constructor and destructor. But some interesting things can make your life better if you keep them in mind when you write code.
In this talk we will discuss some of the tricks and pitfalls in coding, as well as broader topics, such as type design.
For example, what's the difference between a privately declared and a deleted constructor? (Spoiler: none.)
We will also discuss:
and few other things.
Pavel Novikov , Align Technology
Got an engineering degree in missilery from BMSTU.
Loves C++ and knows how to cook it.
Likes metaprogramming, multithreading and asynchronous programming, coroutine adoption enthusiast.
Every other conference talk these days seems to be showing off some code on Compiler Explorer. But what does all that Assembly actually mean?
In this talk you'll learn the very basics of x86-64 Assembly and the System V AMD64 calling convention, just enough to understand the full Assembly listing of simple functions on Compiler Explorer. No previous experience with Assembly is necessary, but a basic understanding of C or C++ is useful.
After this talk you will:
(Compiler Explorer is an increasingly popular tool which allows you to see exactly what the compiler does with your code. Check it out at https://godbolt.org/.)
Anders Schau Knatten ,
Anders started programming in Turbo Pascal in 1995 and has worked as a software developer in various languages since 2001. He's currently a Senior Software Engineer at Zivid, where he's working on machine vision in C++. He's the author of CppQuiz.org and the blog C++ on a Friday. He also gives terrible C++ advice as AffectiveCpp.
Threads are commonly used nowadays. Programmers slowly moved from fear of multithreading to overuse of it. Sadly, even with modern tools and frameworks, implementations of multithreaded applications are commonly bearing a log of data races and deadlocks that make debugging a nightmare. This presentation is about how to detect, correct and write correct multithreading code, using modern features of C++.
Sébastien Gonzalve ,
Sébastien worked during 7 years in virtual storage industry on distributed systems before joining the embedded industry working 5 years on phones middleware and HAL. Since 2017, he works for an automotive manufacturer at implementing vehicle to infrastructure communications (V2X) and board-to-cloud middleware. He is a clean code and open source enthusiast.
min
, max
, and MoreThe C++ standard library long ago selected operator <
as its ordering primitive, and even spells it in several different ways (e.g., std::less
). This talk will explain why operator <
(and its aliases) must be used with care, in even such seemingly simple algorithms as max
and min
.
We will also discuss the use of operator <
in several other order-related algorithms, showing how easy it is to make mistakes when using the operator <
primitive directly, no matter how it’s spelled.
(Of course, we will also present a straightforward technique to avoid such mistakes.)
Walter E Brown ,
With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a C++ programmer for more than 40 years. He joined the C++ standards effort in 2000, and has since written circa 170 proposal papers. Among numerous other contributions, he is responsible for introducing such now-standard C++ library features as cbegin
/cend
, common_type
, gcd
/lcm
, void_t
, and <cmath>
’s mathematical special functions, as well as the headers <random>
and <ratio>
. He has also significantly impacted such C++ core language features as alias templates, contextual conversions, variable templates, static_assert
, and operator<=>
(the C++20 “spaceship operator”).
When not playing with his grandchildren, Dr. Brown continues as an Emeritus participant in the C++ standards process, with several more proposals under consideration.
One of the main reasons people chose C++ is because it lets you write performant applications. It is used in time-critical software, games, finance, embedded platforms, which all need performance.
But what exactly are we talking about when we ask for performance? In this talk we will try to answer this question and show you that micro-optimizations and hardware knowledge are not the only way to make big savings.Before diving into the basics of optimization, we will talk about the common pitfalls in performance analysis and measurement.
You will be provided with tools and methods so that you can start squeezing performance out of your applications.
Clément Grégoire , siliceum
Clément works at siliceum, a company he co-founded, where he helps his clients to reach their performance goals. Previously working in the games and embedded industries, he acquired hands-on knowledge on optimizations while releasing titles such as Microsoft Flight Simulator. With more than 8 years of a love-hate relationship with C++ and no fear of legacy code-bases, he also likes reverse-engineering old games in his spare-time.
When writing code we usually focus our attention on the happy paths - that’s where the interesting stuff happens. But there are also plenty of exciting things happening on the error handling flow, too. Although not universally loved/used, exceptions are a powerful mechanism of maneuvering execution on the unhappy path. Even if std::exception and related machinery are not your cup of tea, you might care about hardware faults or OS signals like access violations, page errors, ALU overflows. Let’s take a deep dive and explore what happens when an exception occurs, both at the application level and the OS level. We’ll explore the unwind process, the compiler generated code, the CRT hooks available and other exception internals. As we’re taking the scenic Windows route, we’re also going to encounter async exceptions (structured exceptions) on our quest for a better crash. We’ll poke into these mechanisms and see how we can leverage them in our application error handling. Did I mention threads? Routing exceptions between threads… oh my!
Victor Ciura , CAPHYON
Victor Ciura is a Principal Engineer at CAPHYON, Technical Lead on the Advanced Installer team and a Microsoft MVP (Developer Technologies).
He’s a regular guest at Computer Science Department of his Alma Mater, University of Craiova, where he gives student lectures & workshops on using C++ STL Algorithms.
Since 2005, he has been designing and implementing several core components and libraries of Advanced Installer. Currently, he spends most of his time working with his team on improving and extending the repackaging and virtualization technologies in Advanced Installer IDE, helping clients migrate their traditional desktop apps to the modern Windows application format: MSIX.
One of his “hobbies” is tidying-up and modernizing (C++20) the aging codebase of Advanced Installer and has been known to build tools that help this process: Clang Power Tools
More details: @ciura_victor & https://ciura.ro & linkedin.com/victor-ciura
Robert Pirsig’s 1974 bestselling classic, “Zen and the Art of Motorcycle Maintenance” was not about Zen - or Motorcycles - although both made an appearance. The subtitle gives you more of an idea: “An Inquiry into Values” - but it was only later that the main concepts in the book, along with the sequel, “Lila” came to form part of “A Metaphysics of Quality”.
Quality, it turns out, is very hard to define. Software Quality is no different. When someone talks about software quality, what do they really mean? How do we measure it? How can we improve it? How do we know when we have it? We have no shortage of incomplete candidates for these definitions. But over the years I’ve been working to establish what I think are the most important aspects of software quality, how they work together (and sometimes against each other) and how we need all of them (even if they sometimes come as a set). In Pirsig’s semi-autobiographical novel, we are taken on a motorcycle journey from the east to west coasts of the USA. Our journey will take us through the territories of tests, types and static and dynamic static analysis - all with no mention of east or west const.
Phil Nash , SonarSource
Phil is the original author of the C++ test framework, Catch2, and composable command line parser, Clara. As Developer Advocate at SonarSource he's involved with SonarQube, SonarLint and SonarCloud, particularly in the context of C++. He's also the organiser of C++ London and C++ on Sea, as well as co-host and producer of the cpp.chat and No Diagnostic Required podcasts.
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 offers training and coaching in TDD for C++
CMake is an open source, cross-platform, build system generator which supports portable C++ development. CMake has been downloaded over 9M times and is becoming the standard for building C++ applications. In this talk we'll present the main features of CMake and how it can help you write a better and more maintainable build system. We will also tackle how CMake can help with package management as well as testing infrastructure.
If you are already familiar with CMake, this talk will present new features we are implementing in CMake and how it can be useful for your every day development.
Julien Jomier , Kitware
Julien Jomier is the Director of Commercial Solutions at Kitware. Julien leads the team behind CMake and regularly teaches courses on CMake. He was the main architect of CDash, an open-source, distributed, software quality system companion of CMake and CTest.
As an initial developer of the Insight Toolkit (ITK), Julien manages the developments of scientific and industrial applications at Kitware.
MISRA C++2008 is a collection of coding rules aimed at safety-critical software. It is used in many places, and is prominent in the automotive sector.
As a developer of a static analysis software, I have created tools that can automatically validate if some code is MISRA-compliant. And I hated it. Those rules seemed to go against everything that I knew and loved about C++. A few years ago, I learned that MISRA was working on an updated version of its standard, and instead of remaining on the side, grumpily criticizing the new release, I decided to join this group.
In this talk, I will tell of my journey, and how part of what I hated in MISRA was indeed due to some misunderstanding about what MISRA really is and really means.
Loïc Joly , SonarSource
Loïc is a C++ coder, speaker, teacher and expert. He represents France on the ISO C++ standardization committee and is also a member of the committee drafting the next version of the MISRA C++ standard for safety-critical systems.
In addition to developing in C++, he has a special interest in teaching it and spreading good practices across the community. He is a frequent speaker at meetups and conferences and teaches at Telecom SudParis. Since he joined SonarSource in 2018, he has worked on static analysis for C++, both specifying rules to help other developers and having the fun of implementing them.
When working on legacy code, one often face the tricky question "when to move legacy code to modern features of C++". Changing "working" production to use smart pointer is usually seen as risky and have low return over investment.
This talk aims to explain why the right moment to move you legacy code to smart pointers is now.
Target audience are people trapped in legacy code and looking got methods and example to convince themselves and co-workers to move to smart-pointers.
Sébastien Gonzalve ,
Sébastien worked during 7 years in virtual storage industry on distributed systems before joining the embedded industry working 5 years on phones middleware and HAL. Since 2017, he works for an automotive manufacturer at implementing vehicle to infrastructure communications (V2X) and board-to-cloud middleware. He is a clean code and open source enthusiast.
Virtual function mechanism is one of the core concepts of C++, however, it does come with a performance price. But how high is that price?
In this talk we are going to dissect virtual functions to understand when they are slow and why they are slow. We will investigate how well virtual functions use the CPU's underlying resources and how good is the compiler at optimizing virtual functions. We will also present several techniques to help you speed up your program using virtual functions.
Ivica Bogosavljevic ,
Ivica is a Application Performance Expert with 10 years of experience active in the domain of Linux and bare-metal embedded systems. His professional focus is application performance improvement - techniques used to make your C/C++ program run faster by using better algorithms, better exploiting the underlying hardware, and better usage of the standard library, programming language, and the operating system. He is the writer for a performance-related tech blog: https://johnysswlab.com
"Remember to add tests before you fix any bugs!" That’s very nice in theory, but a lot more tricky in practice.
We know we need to add tests, but it’s more easily said than done. In legacy codebases, just setting up the objects for the test is most often an unjustifiable nightmarish 2 weeks work. Mocks are a common workaround, but mocking legacy codebases usually makes them more difficult to change, not less!
In this live coding presentation, we will combine the mikado method with test data builders to build a baby-step plan to add the first test to a legacy codebase. We'll draw a graph of nested test data builders so that we can instantiate test data, without mocks.
In more details:
Back at work, you'll be able to practice this session yourself with the open-source kata. After that, you should be able to inject these contagious testing techniques into your team!
Philippe Bourgau , Murex
Let’s not waste our lives on loosy work! I help software engineers to reach an effective and sustainable pace through continuous refactoring of their code and organizations.
Our journey implementing a massively scalable web application for tipi.build, in a mixed environment with many cloud vendors, REST APIs and multi-cloud capabilities.
C++ web frameworks, REST server autogeneration, template metaprogramming and the learnings of building and running a rock solid cloud application with C++ and containers swarms.
Damien Buhl CEO, tipi.build
Damien (aka daminetreg) co-founder and CEO tipi.build is an enthusiast C++ developer. Opensource entrepreneur, CppCon Speaker, GameMaker.fr community founder, Qt for Android contributor, Boost.Fusion maintainer since 2014.
Join this hands-on workshop to learn how to do travel time debugging and understand code you're not familiar with.
Chris Croft White , Undo
Chris Croft-White is a Pre-Sales Consultant Engineer. Armed with a Computer Science degree from the University of Cambridge, UK, he acquired experience as a Field Application Engineer, a Security Engineer, and a Sales Engineer at a range of technology firms. He is particularly adept at problem-solving and resolving customer issues by getting to the root cause of pesky bugs quickly.
Come discuss about the Mikado Method with Philippe from Murex.
Philippe Bourgau , Murex
Let’s not waste our lives on loosy work! I help software engineers to reach an effective and sustainable pace through continuous refactoring of their code and organizations.
Come discuss with engineers from Murex and people from the recruitment team.
Do you wonder when to use Metaprogramming? Do you suffer because somebody overused them? Share your opinions and best practices
How do we come up with coding rules? How constraining can they be? How do we enforce them?
Come, tell us about your experience with TDD: Do you use it on a daily basis or just for fun? Do you use it for unit tests or for acceptance tests? Did it change your coding practices? Does it help with design? How do you maintain your tests?
We've heard about Matt's vision of C++'s superpower. But what is yours? What do you think C++ does well?
Some IDE are powerful out of the box, but most of them can be configured or have addons to make them more convenient for C++ programming. Come share your favorite IDE tricks!
We've all a few of these stories. Bugs that took days to debug, crash that only occured when there was no tooling or logging activated and so on. Come share your worst debugging horror stories and spook everybody!
Do you have a CI with extremely useful analysis? Do you wish you had one but cannot find a specific tool? Come and share your best CI tools and discover other ones.
Code review is very effective in theory. Sadly, in practice it can lead to conflicts, be very time consuming or slow you down. How do we avoid these problems?
How do you live with legacy code? Do you try to refactor it? Do you put tests on it then let it sleep until you need to change it? Share your approach to legacy code.
Have you tried using WebAssembly? Or do you want to talk to people who tried it? Share your successes, problems and questions in this session.
How can we make the community and our industry more inclusive? How do we make sure the people from underrepresented groups feel welcome and secure? How do we reach them?
SonarSource builds world-class products for Code Quality and Security. Our open-source and commercial code analyzers - SonarLint, SonarCloud, SonarQube - support 27 programming languages, empowering dev teams of all sizes to solve coding issues within their existing workflows. C++ analysis is supported through a variety of compilers and toolchains, come see for yourself how you can make your C++ projects more reliable and secure!