Loading…
Attending this event?
Adams A clear filter
Monday, September 16
 

08:45 MDT

Peering forward — C++’s next decade
Monday September 16, 2024 08:45 - 10:30 MDT
This is an exciting year for ISO C++: In just the past few months, it has started to become clear that C++ is approaching three major positive turning points that are starting to materialize together in a blossoming of usability we haven’t seen since C++11.


First, compile-time reflection, including source generation, will dominate the next decade of C++ as arguably the most powerful feature that we’ve ever standardized, and (fingers crossed!) it’s on track for being included in C++26 in the coming months. I expect reflection’s impact on library building to be comparable to that of all the other library-building improvements combined that we’ve added since C++98.
  • Related: The CppCon 2024 Friday keynote will be all about reflection… more about that will be announced soon!

Second, memory safety is being taken seriously in WG21. After a decade or two of gradual smaller improvements, the committee is actively working toward taking the major step of enabling well-known proven-effective safety checks at compile time by default, without compromising performance.
  • Related: The CppCon 2024 Monday evening panel and Wednesday keynote will be all about safety… more about those will be announced soon!

Third, simplifying C++ is being taken seriously. I’m not the only person actively proposing simplifications to C++, and I expect the rate of simplification proposal papers to increase again in the coming year as the fruits of in-the-field experiments turn into evidence that the experimental improvements are working and are ready to be considered for ISO C++ itself to benefit all programmers.

Most of all, the above overlap and reinforce each other. For example, reflection will enable writing more new facilities as compile-time libraries instead of as language features that have to be baked into a compiler, which helps simplify future language evolution. Reflection will also enable compile-time libraries that let developers express their intent directly and leave it to the library code to accurately generate correct implementations, which helps reduce errors and makes our code both simpler and safer.

ISO C++ has long been solidly in the top 5 programming languages and is going strong. This talk presents reasons to expect that C++’s future is bright, and that perhaps its most important decade is just ahead.
Speakers
avatar for Herb Sutter

Herb Sutter

Software architect, Standard C++ Foundation
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
Monday September 16, 2024 08:45 - 10:30 MDT
Adams A

10:30 MDT

Conference Group Photo
Monday September 16, 2024 10:30 - 10:40 MDT
Come join the conference photo, taken directly outside Adams. Be part of conference history!

Photo will be taken by CppCon's official conference photographer, Jonathan Phillips.
Monday September 16, 2024 10:30 - 10:40 MDT
Adams A

11:00 MDT

Security Beyond Memory Safety - Using Modern C++ to Avoid Vulnerabilities by Design
Monday September 16, 2024 11:00 - 12:00 MDT
Nowadays, there is one topic that comes up in virtually all discussions on system programming languages: memory safety.
However, even though memory safety rules out many of the most common sources of vulnerabilities, there are still plenty of ways how a vulnerability may find its way into the codebase.

In this talk, we look beyond memory safety and explore how we can prevent vulnerabilities through simple yet effective C++ constructions and custom static analysis scripts.
We analyze multiple examples, from basics like input validation to complex time-of-check vs time-of-use issues when accessing shared resources, all of which are inspired by real-world products, use cases, or vulnerabilities.
For each example, we discuss attacker models, threats, and implementation pitfalls, before looking at potential solutions that are not just secure by themselves but also protect developers from accidentally introducing vulnerabilities in the future.

Attendees will leave with a deeper understanding of security engineering and
inspirations for leveraging C++ to prevent potential security issues by design.
Speakers
avatar for Max Hoffmann

Max Hoffmann

Security Manager, ETAS
Max Hoffmann studied cybersecurity and got his Ph.D. in hardware security at the Ruhr University Bochum, Germany, in association with the Max Planck Institute for Security and Privacy at the research group of Professor Christof Paar. With a passion for teaching, he continues to contribute... Read More →
Monday September 16, 2024 11:00 - 12:00 MDT
Adams A

14:00 MDT

When Lock-Free Still Isn't Enough: An Introduction to Wait-Free Programming and Concurrency Techniques
Monday September 16, 2024 14:00 - 15:00 MDT
If you've attended any talks about concurrency, you've no doubt heard the term "lock-free programming" or "lock-free algorithms". Usually these talks will give you a slide that explains vaguely what this means, but you accept that is is approximately (but not quite exactly) equal to "just don't use locks". More formally, lock-freedom is about guaranteeing how much progress your algorithm will make in a given time. Specifically, a lock-free algorithm will always make *some* progress on at least one operation/thread. It does not guarantee however that *all threads* make progress. In a lock-free algorithm, a particular operation can still be blocked for an arbitrary long time because of the actions of other contending threads. What can we do in situations where this is unacceptable, such as when we want to guarantee low latency for every operation on our data structure rather than just low average latency?

In these situations, there is a stronger progress guarantee that we can aim for called *wait-freedom*. An algorithm is wait free if *every* operation is guaranteed to make progress in a bounded amount of time, i.e., no thread can ever be blocked for an arbitrarily long time. This helps to guarantee low tail latency for all operations, rather than low average latency in which some operations are left behind. In this talk, we will give an introduction to designing and implementing wait-free algorithms.

Without assuming too much background of the audience, we will review the core ideas of lock-free programming and understand the classic techniques for transforming a blocking algorithm into a lock-free one. The main bread-and-butter technique for lock-free algorithms is the *compare-exchange loop* or "CAS loop", in which an operation reads the current state of the data structure, creates some sort of updated version, and then attempts to install the update via a compare-exchange, looping until it succeeds. compare-exchange loops suffer under high contention since the success of one operation will often cause another to have to repeat work until they succeed. The bread-and-butter technique of wait-free programming that overcomes this issue is *helping*. When operations contend, instead of racing to see who wins, an operation that encounters another already-in-progress operation attempts to help it complete first, then proceeds with its own operation. This results in the initial operation succeeding instead of being clobbered and forced to try again.
Speakers
avatar for Daniel Anderson

Daniel Anderson

Assistant Teaching Professor, Carnegie Mellon University
Daniel Anderson is an assistant teaching professor at Carnegie Mellon University, where he recently graduated with a PhD in computer science focusing on parallel computing and parallel algorithms. Daniel teaches algorithms classes to hundreds of undergraduate students and spends his... Read More →
Monday September 16, 2024 14:00 - 15:00 MDT
Adams A

15:15 MDT

The Most Important Design Guideline is Testability
Monday September 16, 2024 15:15 - 16:15 MDT
Scott Meyers has famously proclaimed that the most important general design guideline is to make interfaces easy to use correctly and hard to use incorrectly.  I don't dispute that this is one of the most important design guidelines.

However, in my close to 40 years of fighting in the C++ trenches, I'd argue that testability is by far the more important design guideline, and antecedent to both ease of use and performance (a particular C++ penchant).

In this talk, we will discuss what testability means, and why it is so important.  We will briefly discuss some popular testing techniques, but most of our time will be spent looking into items of testability that are rarely discussed, but are extremely important in practice.

The participant will come away with a greater appreciation of the "small" things that are often overlooked in the holistic view of testable designs and implementations.  More importantly, we will all hopefully start asking the single most important question about any part of a software system, big or small:   How are we going to test that?
Speakers
avatar for Jody Hagins

Jody Hagins

Director, LSEG / MayStreet
Jody Hagins has been using C++ for the better part of four decades. He remains amazed at how much he does not know after all those years. He has spent most of that time designing and building systems in C++, for use in the high frequency trading space.
Monday September 16, 2024 15:15 - 16:15 MDT
Adams A

16:45 MDT

Work Contracts – Rethinking Task Based Concurrency and Parallelism for Low Latency C++
Monday September 16, 2024 16:45 - 17:45 MDT
Task-based concurrency offers benefits in streamlining software and enhancing overall responsiveness. Numerous frameworks build upon this approach by furnishing abstractions that harness the capabilities of modern multi-core processors and distributed computing environments. These frameworks achieve this by facilitating the creation of task graphs, which simplify the management of task execution order and dependencies between tasks.

However, these frameworks are typically not well suited for use in low latency environments where every nanosecond matters, and any additional overhead introduced by managing task graphs can impact the system's ability to meet stringent latency requirements.

This presentation introduces Work Contracts, a novel approach specifically tailored for low-latency environments, which re-imagines both task-based concurrency as well as tasks themselves. We present an innovative lock free, often wait free, data structure designed to significantly enhance scalability in parallel task distribution, particularly under high contention.  Additionally, we introduce concepts which enhance tasks with internal state allowing for single threaded or parallel execution, recurring execution, and deterministic asynchronous task destruction. 

Finally, we examine usage cases for Work Contracts to showcase the advantages that this solution makes possible, resulting in cleaner, more manageable, and more scalable software which is well suited for low latency applications.
Speakers
avatar for Michael Maniscalco

Michael Maniscalco

Software Architect/Principal Developer, Lime Trading
Michael Maniscalco has been a professional C++ developer for over 25 years.  Initially he worked in the area of data compression (Intelligent Compression Technologies, later Viasat) and, for the last decade, he has been employed as a principal engineer and software architect at Lime... Read More →
Monday September 16, 2024 16:45 - 17:45 MDT
Adams A

20:30 MDT

Safety and Security Panel
Monday September 16, 2024 20:30 - 22:00 MDT
Since our first popular Safety and Security panel at CppCon 2023, there has been a lot of development in ISO C++ in this space and in this panel we aim to give everyone a chance to ask the key authors questions on this development. There has been development in:

1. Profiles P2687r0 , P2816R0 , and P3038R0,: what is the main idea?

2. C++ Core Guidelines Concurrency and Parallelism sections: how will this improve C++ safety

3. MISRA C++ 2023 published based on C++ 17: what does it contain?

4. Contracts: how close are we? Will it be in 26?

5. SG23 Safety and Security and SG21 contracts

6. Safety/Security Blog post by Herb Sutter

Recent US government reports and media follow-ups have been numerous:

https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/press-release-technical-report/

https://www.whitehouse.gov/wp-content/uploads/2024/02/Final-ONCD-Technical-Report.pdf

https://www.infoworld.com/article/3713203/white-house-urges-developers-to-dump-c-and-c.html

Its not all bad news as the following shows:

A 2024 Discussion Whether To Convert The Linux Kernel From C To Modern C++

https://www.phoronix.com/news/CPP-Linux-Kernel-2024-Discuss

This panel, the second at CppCon, is back by popular demand where previously we had a Tuesday night session attended by 70% of attendees, continues a series of panel at every future CppCon where we will have the opportunity to discuss the progress of Safe and Secure C++ in that year, to enable the improved use of C++ in the Automotive, Embedded, Space, Medical or any domain that requires safety and security.

Since 2023, there has been new edicts by the US government, new development in C++ Profiles, Contracts, and new blog posts to respond to the government requirement for memory-safe languages and we want to hear from all the interested parties. As such I aim to have the key players each of these members had significant developments. The C++ community also wants to hear from each of them their ideas and ask them direct questions as to why they think what they are developing will help to make C++ safe and secure.
Speakers
avatar for Michael Wong

Michael Wong

Distinguished Engineer, Codeplay
Michael Wong is Distinguished Engineer/VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials... Read More →
avatar for Andreas Weis

Andreas Weis

Andreas Weis has been writing C++ code in many different domains, from real-time graphics, to distributed applications, to embedded systems. As a library writer by nature, he enjoys writing portable code and exposing complex functionalities through simple, richly-typed interfaces... Read More →
avatar for Gabriel Dos Reis

Gabriel Dos Reis

Principal Software Engineer, Microsoft
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 large... Read More →
avatar for Herb Sutter

Herb Sutter

Software architect, Standard C++ Foundation
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Lisa Lippincott

Lisa Lippincott

Software Architect, Tanium
Lisa Lippincott designed the software architectures of Tanium and BigFix, two systems for managing large fleets of computers. She's also a language nerd, and has contributed to arcane parts of the C++ standard. In her spare time, she studies mathematical logic, and wants to make computer-checked... Read More →
avatar for Timur Doumler

Timur Doumler

Independent, Independent
Timur Doumler is the co-host of CppCast and an active member of the ISO C++ standard committee, where he is currently co-chair of SG21, the Contracts study group. Timur started his journey into C++ in computational astrophysics, where he was working on cosmological simulations. He... Read More →
Monday September 16, 2024 20:30 - 22:00 MDT
Adams A
 
Tuesday, September 17
 

09:00 MDT

Multi Producer, Multi Consumer, Lock Free, Atomic Queue - User API and Implementation
Tuesday September 17, 2024 09:00 - 10:00 MDT
This presentation introduces a multi-producer, multi-consumer, lock-free queue with unique characteristics. We will cover the C++17 implementation and the std::atomic features required for this queue based on the CPU atomic instructions and discuss the queue's portability across various CPU architectures, beyond just X86_64 and runtime environments.

Efficient message queue-based communication between threads is crucial for optimal performance in multi-threaded applications. Queues are fundamental data structures that interact with various aspects of the application environment, including schedulers, memory allocation systems, and CPU hardware architectures.

Many use cases such as trading platforms, games, audio processing and other fields have strict latency and scaling requirements and this queue implementation has proved to reduce system latencies.

The presentation will feature the design of the queue, the required template language features, bandwidth and latency consideration, and multiple demo applications. Comparing this queue implementation’s benchmark results with other existing queues will follow. Finally, we will discuss potential future work and areas for improvement.

Join us to explore how this innovative queue implementation can improve your multi-threaded application performance.

All presentation materials, including the C++17 source code, slides, benchmarks, and demo applications are available on GitHub.
Speakers
avatar for Erez Strauss

Erez Strauss

Strat - Sr Software Engineer, Eisler Capital
Erez Strauss worked in Banks and Hedge Funds while focused on low latency systems.
Tuesday September 17, 2024 09:00 - 10:00 MDT
Adams A

10:30 MDT

C++ Exceptions for Smaller Firmware
Tuesday September 17, 2024 10:30 - 12:00 MDT
For years, developers have overlooked a powerful tool for reducing binary size: C++ exceptions. Join me on a deep dive into the world of exceptions and discover how they can be harnessed to create more space efficient firmware. We’ll explore the requirements and best practices of embedded development, and show what is required to use exceptions in that environment. By the end of this talk, you’ll have a thorough understanding of how exceptions are handled, what their space costs are, and how exceptions compare to functional errors as values.
Speakers
avatar for Khalil Estell

Khalil Estell

Software Engineer
Khalil is a ISO C++ Committee Member and has extensive experience writing production firmware.
Tuesday September 17, 2024 10:30 - 12:00 MDT
Adams A

14:00 MDT

Fast and small C++ - When efficiency matters
Tuesday September 17, 2024 14:00 - 15:00 MDT
C++ is well known to be used, especially when efficiency matters and you want complete control of the resulting binary.

In this talk, you will learn about tricks the Standard Template Library uses to keep data storage size small. Are you familiar with Small String Optimization? Brace yourself for uncovering yet another ingenious strategy that might surprise you.

Everybody, including me, tells you how great `constexpr` is, but do you truly believe its potential? Embark on a journey with me as we delve into a compelling example demonstrating the transformative impact of constexpr, which enhances runtime performance while reducing memory overhead.

Furthermore, I'll unveil C++ Insights' capabilities and demonstrate how it can assist your approach to designing class data member layouts, ultimately optimizing the size of your data types.

Are you leveraging uniform initialization for your data types? Let's delve into the implications, especially when initialization necessitates a std::initializer_list. C++23 has an interesting change that might help you.

I am confident that this session will equip you with invaluable insights and practical techniques that can be readily applied to improve your codebase.

P.S: You miss lambdas from the description? Well, I promise I will show you a C++23 improvement to lambdas.
Speakers
avatar for Andreas Fertig

Andreas Fertig

Unique Code GmbH
Andreas Fertig, CEO of Unique Code GmbH, is an experienced trainer and consultant for C++ for standards 11 to 23.Andreas is involved in the C++ standardization committee, developing the new standards. At international conferences, he presents how code can be written better. He publishes... Read More →
Tuesday September 17, 2024 14:00 - 15:00 MDT
Adams A

15:15 MDT

Design Patterns - The Most Common Misconceptions (2 of N)
Tuesday September 17, 2024 15:15 - 16:15 MDT
Design patterns are everywhere, as they are the key to managing dependencies between software entities. But despite their fundamental importance, there are some common misconceptions about them, in particular about several of the most often used design patterns:

* The modern form of the Visitor design pattern, std::variant, is often considered a replacement of virtual functions
* The Decorator design pattern is sometimes mistaken as the Adapter design pattern
* The Chain of Responsibility design pattern is often confused with Decorators
* Explicit object parameters (“deducing this”) is often considered as a modern, better form of CRTP

In this talk I'll shed some light on these misconceptions and explain how to properly distinguish between the different design patterns.
Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant
Klaus Iglberger is a freelance 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 expertise in popular advanced C++ courses around the world (mainly in Germany, but also in the... Read More →
Tuesday September 17, 2024 15:15 - 16:15 MDT
Adams A

16:45 MDT

10 Problems Large Companies Have with Managing C++ Dependencies and How to Solve Them
Tuesday September 17, 2024 16:45 - 17:45 MDT
It is no secret that managing C++ dependencies is a serious challenge, especially for larger projects. It is consistently cited as a top pain point in ISO C++ developer surveys. The C++ community has been asking for a standard C++ build system and package manager, but we need solutions that we can put into practice today. So, what do we do, especially at larger companies with complex needs? C++ package managers exist and are growing, but there are still many companies hesitant to adopt them.

In this talk I will present what I learned from talking to over 15 large software teams working with C++. Some had already adopted a package manager, many had not. I will go over their challenges with managing C++ dependencies and how they overcame them. The goal is to share some learnings and hopefully generate a discussion in our community about how we can make our development experience less painful.
Speakers
avatar for Augustin Popa

Augustin Popa

Senior Product Manager, Microsoft
I am the product manager for vcpkg, the C/C++ package manager.  
Tuesday September 17, 2024 16:45 - 17:45 MDT
Adams A

20:30 MDT

Committee Fireside Chat
Tuesday September 17, 2024 20:30 - 22:00 MDT
Bring your questions for our annual panel of C++ standards committee members! Here are this year’s panelists, and some of the key current features they’re actively involved with that are aiming for C++26 and other near-future ISO C++ evolution:
  • Andrei Alexandrescu (reflection, parallelism)
  • Daisy Hollman (ranges, library)
  • Dietmar Kühl (std::execution, concurrency, parallelism)
  • Gabriel Dos Reis (contracts, type and memory safety)
  • Khalil Estell (making exceptions affordable including in firmware/embedded)
  • Lisa Lippincott (contracts, numerics)
  • Michael Wong (AI, ML, parallelism)
  • Nina Ranns (C and C++ evolution coordination, committee secretary)
  • Timur Doumler (contracts)
  • Panel moderator: Herb Sutter (committee chair)

Some are long-serving attendees and national/subgroup chairs, some are newer attendees with fresh perspectives, and all have firsthand information about current progress in the C++ standard.

Come join us to ask and hear about these and more things to look forward to in Standard C++!

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Standard C++ Foundation
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
Speakers
avatar for Andrei Alexandrescu

Andrei Alexandrescu

Principal Research Scientist, NVIDIA
Andrei Alexandrescu is a Principal Research Scientist at NVIDIA. He wrote three best-selling books on programming (Modern C++ Design, C++ Coding Standards, and The D Programming Language) and numerous articles and papers on wide-ranging topics from programming to language design to... Read More →
avatar for Daisy Hollman

Daisy Hollman

Software Engineer, Google
Dr. Daisy S. Hollman began working with the C++ standards committee in 2016, where she has made contributions to a wide range of library and language features, including proposals related to executors, atomics, generic programming, futures, and multidimensional arrays. Since receiving... Read More →
avatar for Dietmar Kühl

Dietmar Kühl

Developer, Bloomberg
Dietmar Kühl is a senior software developer at Bloomberg L.P. working on the data distrubtion environment used both internally and by enterprise installations at clients. In the past, he has done mainly consulting for software projects in the finance area. He is a regular attendee... Read More →
avatar for Gabriel Dos Reis

Gabriel Dos Reis

Principal Software Engineer, Microsoft
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 large... Read More →
avatar for Khalil Estell

Khalil Estell

Software Engineer
Khalil is a ISO C++ Committee Member and has extensive experience writing production firmware.
avatar for Lisa Lippincott

Lisa Lippincott

Software Architect, Tanium
Lisa Lippincott designed the software architectures of Tanium and BigFix, two systems for managing large fleets of computers. She's also a language nerd, and has contributed to arcane parts of the C++ standard. In her spare time, she studies mathematical logic, and wants to make computer-checked... Read More →
avatar for Michael Wong

Michael Wong

Distinguished Engineer, Codeplay
Michael Wong is Distinguished Engineer/VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials... Read More →
avatar for Timur Doumler

Timur Doumler

Independent, Independent
Timur Doumler is the co-host of CppCast and an active member of the ISO C++ standard committee, where he is currently co-chair of SG21, the Contracts study group. Timur started his journey into C++ in computational astrophysics, where he was working on cosmological simulations. He... Read More →
Tuesday September 17, 2024 20:30 - 22:00 MDT
Adams A
 
Wednesday, September 18
 

09:00 MDT

Coroutines and Structured Concurrency in Practice
Wednesday September 18, 2024 09:00 - 10:00 MDT
C++20 coroutines present some exciting opportunities for organizing and simplifying concurrent logic, but they have proven challenging to integrate with production systems. Object lifetime and execution order issues can be difficult to manage, especially without guidance from well-established best practices. Practical use requires interoperability with existing event loops and with non-coroutine-aware components. While some experimental libraries have started to be released, the C++ “async ecosystem” is still young compared to many other languages.

We will describe our path through this thicket and introduce Corral, a new open-source concurrency framework for C++ that attempts to tame it. Corral is built around structured concurrency principles, so lifetimes and control flow are easier to reason about. It does not provide any opinionated I/O layer, so it can work with the one you’re already using, or with a standard such as Boost.Asio. We have ported a number of our I/O-bound production processes to use this system, and have found the modernized versions to be substantially simpler with fewer weird bugs.

This talk is geared towards C++ developers who have some familiarity with coroutines but have found them challenging to work with. We will delve into the architectural design of our framework, offering insights that may be useful to others with similar needs. Special emphasis will be placed on practical aspects such as task cancellation, timeouts, and integration with legacy code. We will also share a few design patterns we’ve discovered after two years of production use.
Speakers
avatar for Dmitry Prokoptsev

Dmitry Prokoptsev

Core Developer, Hudson River Trading
Dmitry has been using C++ in his routine work for 17 years, mostly focusing on complex asynchronous I/O-bound applications. After working in companies like Yandex and Google, he joined Hudson River Trading, a quantitative trading firm in New York, where he develops and improves research... Read More →
Wednesday September 18, 2024 09:00 - 10:00 MDT
Adams A

10:30 MDT

Embracing an Adversarial Mindset for C++ Security
Wednesday September 18, 2024 10:30 - 12:00 MDT
In an era where cybersecurity threats are ever-evolving, securing C++ applications has never been more critical. This keynote will explore how adopting an adversarial mindset can empower developers to proactively identify and mitigate vulnerabilities. We will delve into common C++ vulnerabilities, the “Rule of Two” security guidelines, and practical strategies for reducing attack surfaces and defending against attack vectors. Additionally, we will discuss recent trends in vulnerabilities, highlight bug bounty costs, and examine real-world examples of vulnerabilities exploited by threat actors. This talk will provide valuable insights into adopting an adversarial mindset and implementing robust security practices in your C++ projects.
Speakers
avatar for Amanda Rousseau

Amanda Rousseau

Amanda is an industry expert on malware and understanding ways to be robust against attacks.
Wednesday September 18, 2024 10:30 - 12:00 MDT
Adams A

14:00 MDT

Dependency Injection in C++ : A Practical Guide
Wednesday September 18, 2024 14:00 - 15:00 MDT
A key principle for testing code is the concept of dependency injection aka the ability to swap out functionality of key components. This feature allows not only for easier code testability but also promotes well structured code that is more extensible and flexible beyond its original use cases.

In this talk, we will explore the basic building blocks that can be used for Dependency injection like link-time substitution, dummies, Interfaces via Inheritance, templates and polymorphic function wrappers. What are their strengths and weaknesses and the problem space they best serve.

But what exactly is good dependency injection and what are good/bad strategies for employing these building blocks ?

How do you inject multiple dependencies into classes/functions without going down the road to singletons, factories and global state ? We will also show how to introduce dependency injection into older codebases that were never designed for the concept. Doing this without having to make major changes throughout a legacy codebase ?

After exploring this and other real world use cases, we suggest better ways to handle these specific situations. Finally a coherent strategy for adding DI to your applications should emerge and be added to your developer toolbox.
Speakers
avatar for Peter Muldoon

Peter Muldoon

Engineering Lead, Bloomberg
Pete Muldoon has been using C++ since 1991. Pete has worked in Ireland, England and the USA and is currently employed by Bloomberg. A consultant for over 20 years prior to joining Bloomberg, Peter has worked on a broad range of projects and code bases in a large number of companies... Read More →
Wednesday September 18, 2024 14:00 - 15:00 MDT
Adams A

15:15 MDT

C++ Under the Hood: Internal Class Mechanisms
Wednesday September 18, 2024 15:15 - 16:15 MDT
My talk will examine the internal C++ mechanisms around the topics of:
  • The C++ onion as it relates to construction, destruction and polymorphism,
  • Order of Object construction & destruction, and pre- & post-main() processing.
  • Member Function Pointers (not your father’s C function pointer),
  • Member Data Pointers (not raw pointers) (data-morphic functionality),
  • Understanding the Call Stack, Stack Frames and Base Pointer mechanisms.
Speakers
avatar for Chris Ryan

Chris Ryan

ISO-CPP/WG21 Standards Member •• Technical Speaker •• Conference Advisor, •• Emeritus ••
Chris Ryan was classically trained in both software and hardware engineering. He is well experienced in Modern C++ on extremely large/complex problem spaces and Classic ‘C’ on Embedded/Firmware devices (large & small). Chris has no interest in C#/.,Net, Java, js or any web-ish... Read More →
Wednesday September 18, 2024 15:15 - 16:15 MDT
Adams A

16:45 MDT

Modern C++ Error Handling
Wednesday September 18, 2024 16:45 - 17:45 MDT
We’ve had exceptions in C++ since before the first standard. C++17 introduced std::optional and C++23 std::expected (along with the so-called Monadic Operations for both types).

What should we use and when?

Meanwhile we still have older approaches, such as boolean or error code returns, as well as global or thread local error status or pointer or reference arguments.

Do these still have a place?

And where does assert fit in? And the (hopefully) upcoming contracts?

Perhaps more importantly, once we’ve examined all the trade-offs, can we defer any of those decisions to when we are best positioned to commit to them?

Erroneous conditions can have a big impact on your code’s safety and security, so error handling shouldn’t just be left to the “exercise left for the reader” in the books we used to read. Let’s get this all straight.
Speakers
avatar for Phil Nash

Phil Nash

Yak Shaver, Shaved Yaks Ltd
Phil is the original author of the C++ test framework, Catch2. He's an independent trainer and consultant. He's also a member of the ISO C++ standards committee, organiser of C++ London and C++ on Sea, as well as co-host and producer of CppCast. More generally he's an advocate for... Read More →
Wednesday September 18, 2024 16:45 - 17:45 MDT
Adams A

20:30 MDT

Lightning Talks
Wednesday September 18, 2024 20:30 - 22:00 MDT
Lightning talks are your five minutes of stardom. The format encourages a focused and often high-energy presentation about nearly anything (subject to approval by the conference) that might be interesting to the C++ community, including proprietary technologies. They can be of a lighter or humorous nature, but they need not be.

https://cppcon.org/lightning-talk-submissions/
Speakers
avatar for Phil Nash

Phil Nash

Yak Shaver, Shaved Yaks Ltd
Phil is the original author of the C++ test framework, Catch2. He's an independent trainer and consultant. He's also a member of the ISO C++ standards committee, organiser of C++ London and C++ on Sea, as well as co-host and producer of CppCast. More generally he's an advocate for... Read More →
Wednesday September 18, 2024 20:30 - 22:00 MDT
Adams A
 
Thursday, September 19
 

09:00 MDT

Deciphering C++ Coroutines - Mastering Asynchronous Control Flow
Thursday September 19, 2024 09:00 - 10:00 MDT
One of the most powerful applications of coroutines is in the context of asynchronous operations, where their use allows for significant simplifactions of application code. Unfortunately, building an asynchronous library interface to enable such benefits for applications is not exactly straightforward in C++.

In this talk we will explore the essentials of managing asynchronous control flow with coroutines. We will discover how to reconstruct the call stack of nested asynchronous calls and thus bridge a significant gap between C++'s stackless coroutines and the stackful coroutines from other languages. We will learn how to build a mechanism similar to the async/await from languages like Python or Javascript for our own libraries. And we will explore how we can perform arbitrary manipulations of the call stack in such an environment to unleash the full power of C++'s coroutine mechanism.

At the end of this talk we will have a proper understanding of how the Task<> type found in many coroutine libraries works and how it can be used to manage asynchronous operations. This will serve as an important building block for understanding more advanced mechanisms, like the sender/receiver mechanism proposed for C++26.

This talk assumes basic familiarity with the components of the C++ coroutines language feature: promises, awaitables, coroutine handles, and passing data in and out of coroutines.

This is the second part in an ongoing series of talks about C++20 coroutines.
Speakers
avatar for Andreas Weis

Andreas Weis

Andreas Weis has been writing C++ code in many different domains, from real-time graphics, to distributed applications, to embedded systems. As a library writer by nature, he enjoys writing portable code and exposing complex functionalities through simple, richly-typed interfaces... Read More →
Thursday September 19, 2024 09:00 - 10:00 MDT
Adams A

10:30 MDT

When Nanoseconds Matter: Ultrafast Trading Systems in C++
Thursday September 19, 2024 10:30 - 12:00 MDT
Achieving low latency in a trading system cannot be an afterthought; it must be an integral part of the design from the very beginning. While low latency programming is sometimes seen under the umbrella of "code optimization", the truth is that most of the work needed to achieve such latency is done upfront, at the design phase. How to translate our knowledge about the CPU and hardware into C++? How to use multiple CPU cores, handle concurrency issues and cost, and stay fast? 

In this talk, I will be sharing with you some industry insights on how to design from scratch a low latency trading system. I will be presenting building blocks that application developers can directly re-use when in their trading systems (or some other high performance, highly concurrent applications).

Additionally, we will delve into several algorithms and data structures commonly used in trading systems, and discuss how to optimize them using the latest features available in C++. This session aims to equip you with practical knowledge and techniques to enhance the performance of your systems and make informed decisions about the tools and technologies you choose to employ.
Speakers
avatar for David Gross

David Gross

AutoTrading Team Lead, Optiver
Thursday September 19, 2024 10:30 - 12:00 MDT
Adams A

14:00 MDT

Why is my build so slow? Compilation Profiling and Visualization
Thursday September 19, 2024 14:00 - 15:00 MDT
When your code base is growing, the time it takes to compile is also growing. But why, where is the compiler spending time? Lots of focus in C++ is on the performance of compiled code, but when you're compiling millions of lines of code, its important to pay attention to the build times. Neglecting this aspect can lead to significant losses in developer productivity.

In this talk, I will explore some capabilities built into Clang and Ninja that C++ developers can use to identify, understand, and mitigate long build times.
Speakers
avatar for Samuel Privett

Samuel Privett

Staff Robotics Software Engineer, Johnson & Johnson
Sam Privett graduated with a B.S. from the University of Cincinnati in 2018 with a focus in Software Development. He has spent the majority of his professional career specializing in the niche world of surgical robotics. He currently works at Johnson and Johnson as a Staff Robotics... Read More →
Thursday September 19, 2024 14:00 - 15:00 MDT
Adams A

15:15 MDT

To Int or to Uint, This is the Question
Thursday September 19, 2024 15:15 - 16:15 MDT
In our daily work, we often use integral data types to perform arithmetic calculations, but we may not always consider how the selection of the data type can affect performance and compiler optimizations. This talk will delve into the importance of choosing the correct data type for the job and how it impacts compiler optimizations. We will also examine the overall performance implications for the application. We will explore specific algorithms where using unsigned data types is more beneficial and other situations where signed data types are the best choice. Furthermore this talk will dive into the differences between signed and unsigned integers, how the processor handles certain operations and explain many of the surprising pitfalls of using integral types.
Attendees will come away with a deeper understanding of how data type selection can impact their code and how to make better choices for optimal performance.

This session will follow the guidelines from my short article on LinkedIn but it will go into higher details and contain more examples and explanations.
Speakers
avatar for Alex Dathskovsky

Alex Dathskovsky

Director of SW engineering, Speedata
Alex has over 17 years of software development experience, working on systems, low-level generic tools and high-level applications. Alex has worked as an integration/software developer at Elbit, senior software developer at Rafael, technical leader at Axxana, Software manager at Abbott... Read More →
Thursday September 19, 2024 15:15 - 16:15 MDT
Adams A

16:45 MDT

Monadic Operations in Modern C++: A Practical Approach
Thursday September 19, 2024 16:45 - 17:45 MDT
In C++23 we have std::optional and std::expected along with the "monadic" operations that can be used on the objects of these types. By chaining the computations, these abstractions allow you to manipulate the underlying values using less boilerplate code. In addition, we have a range library for processing collections of elements in a similar manner.
These topics have been quite popular in the C++ community for the last five years or so. However, many of them are focused on theoretical parts, have only small non-related examples, or even use other programming languages to illustrate the ideas.
This talk is prepared based on more than one year of using functional programming approaches for developing one of the commercial internal libraries our team is working on. I’m going to share this experience with the audience. We’ll talk about API design in general, spitting between pure and impure context, and the pros and cons of using “optional” and “expected”. There will be real code examples and some useful tips.
Speakers
avatar for Vitaly Fanaskov

Vitaly Fanaskov

Senior Software Engineer, reMarkable
Vitaly Fanaskov is a senior software engineer at reMarkable. He has been designing and developing software using C++ and some other languages for over 10 years. Primary areas of interest are design and development of frameworks and libraries, modern programming languages, and functional... Read More →
Thursday September 19, 2024 16:45 - 17:45 MDT
Adams A

20:30 MDT

Lightning Talks
Thursday September 19, 2024 20:30 - 22:00 MDT
Lightning talks are your five minutes of stardom. The format encourages a focused and often high-energy presentation about nearly anything (subject to approval by the conference) that might be interesting to the C++ community, including proprietary technologies. They can be of a lighter or humorous nature, but they need not be.

https://cppcon.org/lightning-talk-submissions/
Speakers
avatar for Michael Caisse

Michael Caisse

Michael started using C++ with embedded systems in 1990. He continues to be passionate about combing his degree in Electrical Engineering with elegant software solutions and is always excited to share his discoveries with others. Michael is a Principal Engineer at Intel where he works... Read More →
Thursday September 19, 2024 20:30 - 22:00 MDT
Adams A
 
Friday, September 20
 

07:45 MDT

Meet the Instructors
Friday September 20, 2024 07:45 - 08:30 MDT
Some of the best C++ instructors in the community will be available to answer your questions about how to convince your boss to bring them to you company.
Speakers
avatar for Jon Kalb

Jon Kalb

CppCon, Conference Chair, Jon Kalb, Consulting
Jon Kalb is using his decades of software engineering experience and knowledge about C++ to make other people better software engineers. He trains experienced software engineers to be better programmers. He presents at and helps run technical conferences and local user groups.He is... Read More →
avatar for Andreas Fertig

Andreas Fertig

Unique Code GmbH
Andreas Fertig, CEO of Unique Code GmbH, is an experienced trainer and consultant for C++ for standards 11 to 23.Andreas is involved in the C++ standardization committee, developing the new standards. At international conferences, he presents how code can be written better. He publishes... Read More →
avatar for Jason Turner

Jason Turner

Sole Proprietor, Jason Turner
Jason is host of the YouTube channel C++Weekly, co-host emeritus of the podcast CppCast, author of C++ Best Practices, and author of the first casual puzzle books designed to teach C++ fundamentals while having fun!
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant
Klaus Iglberger is a freelance 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 expertise in popular advanced C++ courses around the world (mainly in Germany, but also in the... Read More →
avatar for Mateusz Pusz

Mateusz Pusz

C++ Trainer | Principal Engineer, Train IT | Epam Systems
A software architect, principal engineer, and security champion with over 20 years of experience designing, writing, and maintaining C++ code for fun and living. A trainer with over 10 years of C++ teaching experience, consultant, conference speaker, and evangelist. His main areas... Read More →
avatar for Phil Nash

Phil Nash

Yak Shaver, Shaved Yaks Ltd
Phil is the original author of the C++ test framework, Catch2. He's an independent trainer and consultant. He's also a member of the ISO C++ standards committee, organiser of C++ London and C++ on Sea, as well as co-host and producer of CppCast. More generally he's an advocate for... Read More →
Friday September 20, 2024 07:45 - 08:30 MDT
Adams A

09:00 MDT

Template-less Meta-programming
Friday September 20, 2024 09:00 - 10:00 MDT
Meta-programming is one of the most significant C++ superpowers. It enables seemingly impossible feats, but there is a considerable cost associated with it as well. Therefore, its applications have been limited to experts and cases where the benefits greatly outweigh the maintenance burden.

But what if that doesn't have to be the case? In this talk, we will explore an alternative approach to template meta-programming that does not require an understanding of the traditional 'angle bracket' technique.

We will also make the case that anyone who can write C++ can become a meta-programming guru! But what about compilation times and/or testing/debugging, you may ask? Well, we will cover those as well, and it might be surprising what modern C++ is actually capable of!

Additionally, we will cover how the static reflection proposal and C++20 ranges can further improve the ability to write meta-functions and how C++ compares to other languages such as circle. However, we will also show how to apply the technique with C++17 on all major compilers with a ready-to-go solution.

Finally, we will benchmark compilation times of different approaches, showcasing their strengths and weaknesses.

If you are interested in meta-programming or have always wanted to understand its practical use cases but never really grasped them, this talk is for you!
Speakers
avatar for Kris Jusiak

Kris Jusiak

https://github.com/krzysztof-jusiak
Kris is a passionate Software Engineer with experience across various industries, including telecommunications, gaming, and most recently, finance. He specializes in modern C++ development, with a keen focus on performance and quality. Kris is also an active conference speaker and... Read More →
Friday September 20, 2024 09:00 - 10:00 MDT
Adams A

10:30 MDT

Back to Basics: Rvalues and Move Semantics
Friday September 20, 2024 10:30 - 11:30 MDT
Rvalue references and move semantics, introduced in C++11, were an important addition for the way we manage resources and optimize performance in our code.
However, mastering these concepts can be challenging, leading to common pitfalls and misunderstandings.

In this session, we will demystify rvalue references and move semantics, covering their underlying principles, practical applications, and best practices. We will start with the fundamentals of what rvalues are, how to implement and use move semantics correctly, covering the delicate syntax rules, then discuss design considerations and guidelines. We will cover the rule-of-zero, rule-of-three and rule-of-five, the need for std::move and when to use it, as well as forwarding references and std::forward.

By focusing on the applicability of the subject, and with a clear and concise exploration of the fine details, participants would gain a solid understanding of how to master rvalue references and move semantics in their own codebase, with the ability to write more efficient and robust C++ code.
Speakers
avatar for Amir Kirsh

Amir Kirsh

Teacher, Academic College of Tel-Aviv-Yaffo
Amir Kirsh is a C++ lecturer at the Academic College of Tel-Aviv-Yaffo and Tel-Aviv University, previously the Chief Programmer at Comverse, after being CTO and VP R&D at a startup acquired by Comverse. He is also a co-organizer of the annual Core C++ conference and a member of the... Read More →
Friday September 20, 2024 10:30 - 11:30 MDT
Adams A

13:30 MDT

Ranges++: Are Output Range Adaptors the Next Iteration of C++ Ranges?
Friday September 20, 2024 13:30 - 14:30 MDT
This isn't a talk about why you shouldn't use ranges in your C++20 codebase—unless you work on one of the largest codebases in the world, you probably should. This is a talk about the differences between most programming tasks and software engineering at truly gargantuan scales—and about how it isn't always practical to use the same components of a language in such different contexts.

Ranges are perhaps the largest and most ambitious single feature ever added to the C++ standard library since its inception. They have modernized C++ to match the way the current generation of programmers thinks about iteration and loops, largely owing to the influence of dynamically typed languages like Python and Javascript. Every programming language feature comes with a set of trade-offs, though, and it's unreasonable to expect that those trade-offs will result in the same cost-benefit ratio in every context. At Google, the decision to ban the `<ranges>` header from our C++ codebase continues to be extremely controversial, with nuanced arguments on both sides of the discussion. This talk will summarize those arguments, from broad topics like the diffusion of functional programming paradigms in large codebases, to mutability of concept-driven designs over large time scales,  to technical deep-dives on the inner workings of range adapters and the consequences thereof at scale. We'll conclude with a discussion of what this means for the future of ranges and why Google continues to invest in the ranges study group of the C++ committee.
Speakers
avatar for Daisy Hollman

Daisy Hollman

Software Engineer, Google
Dr. Daisy S. Hollman began working with the C++ standards committee in 2016, where she has made contributions to a wide range of library and language features, including proposals related to executors, atomics, generic programming, futures, and multidimensional arrays. Since receiving... Read More →
Friday September 20, 2024 13:30 - 14:30 MDT
Adams A

14:45 MDT

Newer Isn’t Always Better, Investigating Legacy Design Trends and Their Modern Replacements
Friday September 20, 2024 14:45 - 15:45 MDT
All code is legacy code, or so they say. Software engineers scoff at the idea of new code instantly becoming legacy code, however software is a time capsule holding the design trends of the time the code was written. As new code is written, new design trends are used and potentially overused, just like the legacy patterns. What if these new design trends have more in common with the original design trends than we initially thought. One example we will investigate is object oriented design through polymorphism and how it has been replaced in many cases with template metaprogramming. There are a variety of template metaprogramming strategies that achieve the object oriented design principles, however when overused you can encounter as many templates as there would be virtual functions in object oriented programming. Have we discovered that balance is the solution or are we still overusing the “fancy” new thing? In this talk, we will investigate various legacy design trends including further examining object oriented design, the singleton pattern, as well as other legacy anti-patterns to reveal the updated trends. We will address each legacy anti-pattern and their corresponding modern update to evaluate whether newer is better or if we have recreated the same legacy problem.
Speakers
avatar for Katherine Rocha

Katherine Rocha

Embedded Systems Software Engineer, Atomos Space
Katherine Rocha is a new-ish software engineer who graduated in 2022. She’s passionate about embedded systems, real-time systems, and understanding as much as possible. She has been an active member of the C++ community for her entire career, starting with lightning talks at CppCon... Read More →
Friday September 20, 2024 14:45 - 15:45 MDT
Adams A

16:15 MDT

Gazing Beyond Reflection for C++26
Friday September 20, 2024 16:15 - 18:00 MDT
In less than a year since its original publication, the WG21 proposal “Reflection for C++26” (P2996) has made good progress towards its titular goal.  From its inception, we intended that design to offer a modest-but-useful set of features with a solid foundation on top of which we will be able to incrementally grow an easy-to-use, rich, and extensible C++ meta-programming framework.  This keynote will review some of the fundamental tools proposed in P2996 and follow up with a vision for some additional capabilities that we’re working on.
Speakers
avatar for Daveed Vandevoorde

Daveed Vandevoorde

VP Engineering, Edison Design Group
David ("Daveed") Vandevoorde is a Belgian computer scientist who lives in Tampa, FL, USA. He is vice-president of engineering at the Edison Design Group (EDG), where he contributes primarily to the implementation of their C++ compiler front end. He is an active member of the C++ standardization... Read More →
Friday September 20, 2024 16:15 - 18:00 MDT
Adams A
 
Share Modal

Share this link via

Or copy link

Filter sessions
Apply filters to sessions.