Loading…
Attending this event?
arrow_back View All Dates
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

09:00 MDT

Back to Basics: Functional Programming in C++
Thursday September 19, 2024 09:00 - 10:00 MDT
Functional programming is a declarative way of writing programs by composing functions.
In many situations, this can lead to code that is easier to write and understand and less error-prone.
However, it requires a shift to a more functional mindset.
This talk gives an introduction to functional programming in C++ using the modern standard library.
We will cover algorithms using `std::ranges`, composable error handling with `std::optional` and `std::expected`, algebraic data types, and separating IO from computation.
In the end, we'll even cover the M-word.
Speakers
avatar for Jonathan Müller

Jonathan Müller

Software Engineer, think-cell
Jonathan is a Software Engineer at think-cell. There, he is responsible for maintaining think-cell's core libraries, which include a custom range library, a fast and convenient JSON parser, and many other utilities and data structures to write elegant C++ code. Before working at think-cell... Read More →
Thursday September 19, 2024 09:00 - 10:00 MDT
Maple 3/4/5

09:00 MDT

Performance engineering - being friendly to your hardware
Thursday September 19, 2024 09:00 - 10:00 MDT
Practical software does not run in abstract vacuum, it runs on underlying hardware platforms. Practical software engineering does not exist in abstract vacuum either. The software layer sits in between the domain specific requirements on top and the underlying runtime platforms below. Many interesting developments have happened on all three of those layers over the years, and while contemporary hardware has gone a long way forward, it often suffers from the attention deficit caused by an overshadowing flood of advancements and “advancements” in the software part of the universe. This new shiny programming language is safe, performant, and solves a backlog of problems that have been dragging for long. While that new shiny programming paradigm automagically relieves from dealing with low level details and the toolchain is plain amazing. The hardware side brings into this fistfight a set of new architectures, ISAs, and hardware abstractions – just to stay on par with the software side. Looks perfect? What else would an engineer dream about, no?
Not really. Let’s take a look at the contemporary commodity hardware platforms of today, and also at the trendy software engineering waves of today, and try to sense how and why it could (and frequently does) cross out the potential benefits of hardware advancements – and what could be done to actually be friendly to your underlying hardware, and at what cost.
Speakers
IB

Ignas Bagdonas

Principal Architect, Equinix
Ignas Bagdonas has been involved in network engineering field for over two decades, covering operations, deployment, design, architecture, development, and standardization aspects. He has worked on multiple large SP and enterprise networks worldwide, participated in many of the world's... Read More →
Thursday September 19, 2024 09:00 - 10:00 MDT
Cottonwood 8/9

09:00 MDT

SuperCharge Your IPC Programs With C++20 and CCI Pattern
Thursday September 19, 2024 09:00 - 10:00 MDT
Writing correct and high-performing IPC (Intra-Process Communication) programs in a constrained environment provides significant challenges. Properly utilizing function interfaces, data types, and ensuring correct data flow are part of the challenge during programming of IPC applications. Furthermore, debugging run-time bugs coming from IPC are some of the hardest and most time-consuming bugs.

We leverage the power of C++20 and concepts to define modern interfaces and constraints, that make IPC programs easy to understand. We introduce a pattern called CCI (Concept, Constraint, and Implementation) to facilitate the creation of modern interfaces encapsulating low-level IPC functions. Therefore, we mitigate numerous pitfalls stemming from IPC programming and prevent run-time bugs.

After explaining CCI and getting a good grounding, we start the re-work of low-level code around CCI. We show how features of C++20 help us utilize CCI. After that, we provide the general assessment of CCI pattern and compare the output of the assembly code regarding the performance.
Speakers
avatar for Arian Ajdari

Arian Ajdari

Software Expert, Bertrandt GmbH
Arian Ajdari is a Software Engineer working on cutting-edge applications in the field of smart home appliances. His daily work includes discussions with clients, gathering requirements, building use-cases and implementing different solutions using C++. Arian possesses a deep understanding... Read More →
Thursday September 19, 2024 09:00 - 10:00 MDT
Spruce 3/4

09:00 MDT

Mix Assertion, Logging, Unit Testing and Fuzzing: Build Safer Modern C++ Application
Thursday September 19, 2024 09:00 - 10:00 MDT
Unit testing is a crucial practice for ensuring software safety. However, boundary cases, particularly those involving error handling and failure-tolerant logic, can be challenging to test in real-world applications. When writing test cases, the caller side of a target function may lack the necessary information to determine why an error occurred. Additionally, existing unit testing frameworks often cannot identify which path is exercised when multiple paths can produce similar outputs. These challenges are also present during fuzzing.

This talk introduces a lightweight, header-only C++11 library designed to address these issues. By including a single header file, users gain access to an integrated framework that combines assertion, logging, unit testing, and fuzzing, offering a more cohesive solution than using separate frameworks.

Attendees will learn about the design and unique features of this library, including:

* **Integrated Assertion and Logging**: The library's assertion/logging macros allow unit tests to be aware of assertion failures and logged data, incorporating this information into the test reports.
* **Structured Logging**: Developers can log structured data and access it during unit tests, making it easier to diagnose issues when errors occur.
* **Fuzzing API**: With a simple, structure-aware fuzzing API and support for Clang and libFuzzer, users can quickly run fuzzing tests within their unit testing framework, utilizing all the aforementioned features.

By the end of the talk, the audience will leave an understanding of how this library enhances the ease of writing unit tests and improves the overall safety of C++ applications.
Speakers
avatar for Xiaofan Sun

Xiaofan Sun

Chip Development C++ Infrastructure Software Engineer, NVIDIA
Xiaofan Sun graduated from University of California, Riverside where he focused on automatic testing and multithreading program verification. Now, he is working in NVIDIA hardware infrastructure team for developing better toolchains used in code generation and documentation autom... Read More →
Thursday September 19, 2024 09:00 - 10:00 MDT
Cottonwood 2/3

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

12:00 MDT

Author Signing: Jason Turner
Thursday September 19, 2024 12:00 - 12:30 MDT
Speakers
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!
Thursday September 19, 2024 12:00 - 12:30 MDT
‍CppCache

12:05 MDT

Women's Networking Luncheon
Thursday September 19, 2024 12:05 - 13:55 MDT
NOTE: This event is currently at capacity
Please sign up if you are interested in attending and we will email you if space becomes available.

Building Connections and Empowering Future Leaders

Join us for an engaging and inspiring Women's Networking Luncheon at the CppCon 2024, designed to foster meaningful connections and spark innovative ideas for advancing women's representation in software engineering. This event will offer a unique blend of informal networking over lunch, allowing attendees to relax, share experiences, and make valuable professional connections.

Following the meal, a collaborative workshop will provide an open platform for attendees to discuss key issues facing women in tech, share insights, and brainstorm actionable ideas for promoting diversity and inclusion within the industry. Whether you're looking to grow your career, find mentorship, or contribute to positive change, this event is the perfect opportunity to expand your professional network, connect, and make an impact.

Let’s build a future where women thrive in software engineering together!

Identity is a complex and deeply personal thing; this event is for women, whatever that means to you. Please attend if you feel it would be beneficial to you. If you would like more details about the event or if there is any way we can help meet your needs at this conference or in this space, please reach out to either Kristen Shaker or Sherry Sontag.
Speakers
avatar for Kristen Shaker

Kristen Shaker

Kristen Shaker is an accomplished software engineer known for her expertise in C++ refactoring and exceptional leadership abilities. She previously sat on Google’s C++ Core Libraries Team, where she was responsible for making the C++ portion of Google’s code base extensible, maintainable... Read More →
avatar for Sherry Sontag

Sherry Sontag

Technical Expert, Bloomberg
Sherry Sontag came to Bloomberg Engineering after co-authoring “Blind Man’s Bluff,” a New York Times bestseller about submarine espionage during the Cold War. Hired by Bloomberg 17 years ago for her ability to talk to anyone and actually listen, she recently has been working... Read More →
Thursday September 19, 2024 12:05 - 13:55 MDT
‍Juniper Ballroom

12:30 MDT

Bitcoin: Role Playing Bitcoin Based Protocols Including the Lightning Network
Thursday September 19, 2024 12:30 - 13:30 MDT
With an intuitive understanding of Bitcoin’s programmability we can study programming primitives such as “time” and “hash-time” lock contracts (HTLCs), which are the crucial building blocks for higher abstraction protocols such as the Lightning Network.

We will describe “Lightning” by role playing the actions of its nodes. We’ll see how they exchange value globally and nearly instantaneously. We’ll appreciate that this is a practical solution to the problem of micropayments, financial inclusion, and the starting point for even higher abstraction level protocols such as the Sphinx protocol. This protocol enables payments for streaming services without subscriptions or doxxing yourself.

Depending on audience interest, we’ll explore topics such as pay joins, coin joins, and/or how to incorporate into smart contracts real world data, using the primitive of Discrete Log Contracts (DLCs) to make so-called “Oracles.”

As we summarize these technical solutions, we’ll see that they create an ecosystem that leads to Bitcoin becoming the world’s reserve currency.



Join us on Friday for a panel in which Eduardo, Jon, and Kris will answer Bitcoin questions.
Speakers
avatar for Eduardo Madrid

Eduardo Madrid

Consultor
Eduardo has been working for many years on financial technologies, automated trading in particular, and other areas where performance challenges can be solved in C++. He contributes to open source projects and teaches advanced courses on Software Engineering with emphasis in Generic... Read More →
Thursday September 19, 2024 12:30 - 13:30 MDT
Cottonwood 2/3

12:30 MDT

BoF - GameDev, Growing our Conference Community
Thursday September 19, 2024 12:30 - 13:30 MDT
Birds of a Feather session about growing our GameDev engineering community at conferences.
Speakers
avatar for Guy Davidson

Guy Davidson

Head of Engineering, Six Impossible Things Before Breakfast
Guy Davidson (he/him) is the Head of Engineering Practice at Creative Assembly, one of the UK's oldest and largest game development studios.Guy started writing games over 40 years ago and has spent the last 24 of them at Creative Assembly. He is the co-author of Beautiful C++: 30... Read More →
Thursday September 19, 2024 12:30 - 13:30 MDT
Spruce 3/4

12:30 MDT

C++ Under the Hood: (cont.)
Thursday September 19, 2024 12:30 - 13:30 MDT
This session will cover the content that did not fit in the alloted time of my primary session: "C++ Under the Hood". sched.co/1gZfx (Wed afternoon)


I will address the ">>>" topics in the session (that did not fit) plus opun request may review the "✓" topics (that did fit).


The abstract for my main session:
My talk will examine the internal C++ mechanisms around the topics of:
✓ o The C++ onion as it relates to construction, destruction and polymorphism,
>>> o Order of Object construction & destruction, and pre- & post-main() processing.
✓ o Member Function Pointers (not your father’s C function pointer),
✓ o Member Data Pointers (not raw pointers) (data-morphic functionality),
>>> o 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 →
Thursday September 19, 2024 12:30 - 13:30 MDT
Cottonwood 8/9

13:30 MDT

Author Signing: Guy Davidson
Thursday September 19, 2024 13:30 - 14:00 MDT
Speakers
avatar for Guy Davidson

Guy Davidson

Head of Engineering, Six Impossible Things Before Breakfast
Guy Davidson (he/him) is the Head of Engineering Practice at Creative Assembly, one of the UK's oldest and largest game development studios.Guy started writing games over 40 years ago and has spent the last 24 of them at Creative Assembly. He is the co-author of Beautiful C++: 30... Read More →
Thursday September 19, 2024 13:30 - 14:00 MDT
‍CppCache

14:00 MDT

Back to Basics: Lifetime Management
Thursday September 19, 2024 14:00 - 15:00 MDT
Lifetime management in C++ is flexible and powerful. But this comes with complexity and lots of ways to shoot your leg off. That has only gotten worse as the language has evolved.

This talk introduces or recaps the so-called Rule of 0 and Rule of 5, which suggest that you should aim to need no Special Member Functions (customs constructors, destructors assignment operators) for most of your types. But if you do need them, you probably need all 5.

But if we do need to implement them it can still be hard to know what to do. It helps to know what sort of type you are dealing with, so we’ll break down the common categories.

Along the way we’ll look at vocabulary types we already have in the C++ standard library that can help us move more of our code into the realm of the Rule of 0.

Come with us on a journey through these rules, type categories and behaviours and start to make sense of lifetimes in modern C++.
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 →
Thursday September 19, 2024 14:00 - 15:00 MDT
Maple 3/4/5

14:00 MDT

Sender Patterns to Wrangle Concurrency in Embedded Devices
Thursday September 19, 2024 14:00 - 15:00 MDT
Small embedded devices might only have one processing core but hardware accelerators, peripherals, and external events abound. Asynchronous event handling is the bread and butter of these systems; however, the lack of robust libraries in the bare-metal arena often result in a concurrency nightmare.

After a short sender/receiver primer, we will explore some patterns and idioms that have proven useful when employing the design in a high availability, complex embedded device. We will use [Intel's open source bare-metal senders and receivers library](https://github.com/intel/cpp-baremetal-senders-and-receivers) as well as other open source packages to build elegant, declarative solutions around interrupt handling, schedulers, devices drivers, and communication protocols. The patterns will be demonstrated on an STM32 target controlling a simple robot.

While this talk is focused on bare-metal implementations and embedded concerns, the shape of a solution is applicable to many domains and environments. Join me as we wrangle concurrency using the sender and receiver design.
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 14:00 - 15:00 MDT
Spruce 3/4

14:00 MDT

Perspectives on Contracts
Thursday September 19, 2024 14:00 - 15:00 MDT
For many years, members of the C++ working group, WG21, have tried to add support for contract assertions — preconditions, postconditions, and assertion statements within a function body — to the C++ language. It’s been a long and difficult road, but we now have a proposal (P2900, “Contracts for C++”) to add significant contract support in, we hope, C++26, with more complete support to follow in C++29.

Looking back, the contracts feature has been unusually difficult and contentious. I contend that the difficulty is inherent in the feature: a contracts facility, by its nature,  cannot be understood from any single point of view.

In this lecture, I will explain why understanding contracts requires seeing the feature from a panoply of perspectives, and show how shifting between these perspectives allows one to make effective use of the facility.

This lecture is derived from presentations made to the Language Evolution subgroup of WG21 at the St. Louis meeting in June 2024.
Speakers
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 →
Thursday September 19, 2024 14:00 - 15:00 MDT
Cottonwood 2/3

14:00 MDT

Limitations and Problems in std::function and Similar Constructs: Mitigations and Alternatives
Thursday September 19, 2024 14:00 - 15:00 MDT
In this talk, we will delve into the limitations and challenges associated with using std::function, std::packaged_task, std::apply, and similar constructs in modern C++ development. Despite their utility, these constructs often introduce performance overheads by invoking copies and moves of captured member variables, leading to increased complexity and unexpected behavior. I will share practical examples and common pitfalls encountered in real-world applications. Finally, I will present an alternative approach I have developed to mitigate these issues, offering a more efficient and reliable solution for developers.
Speakers
avatar for Amandeep Chawla

Amandeep Chawla

Sr. Computer Scientist II, Adobe
Amandeep Chawla is a seasoned software engineer with over 20 years of experience in C++. Since graduating in 2002, he has been actively working with C++ throughout his career. In his early years, Amandeep specialized in embedded systems, where he utilized a small subset of C++. This... Read More →
Thursday September 19, 2024 14:00 - 15:00 MDT
Cottonwood 8/9

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

Implementing Particle Filters with Ranges
Thursday September 19, 2024 15:15 - 15:45 MDT
Localization in mobile robotics, critical for autonomous navigation, is a challenging problem often addressed through particle filter algorithms, also known as Monte-Carlo Localization (MCL) estimation. The integration of the ranges library in C++20 introduced powerful new tools to enhance the implementation of these algorithms, further extended in C++23. This talk explores the use of these modern C++ features to develop efficient, composable particle filter algorithms that are well-suited for both 2D and 3D localization tasks.

Attendees can expect an introduction to the basics of particle filters, providing a foundation for understanding their application in robotics. They will then be taken through the design and implementation of a series of essential functions for a particle filter library. These examples will demonstrate how C++23 ranges can be used to refactor traditional MCL approaches into more flexible and efficient solutions.
Speakers
NE

Nahuel Espinosa

Software Engineer, Ekumen
Nahuel Espinosa graduated as an Electronics Engineer from UTN (National Technological University) in Buenos Aires. Since graduation, Nahuel has worked with a variety of systems and technologies: - Robotics applications (e.g., localization algorithms based on particle filters, rigid-body... Read More →
Thursday September 19, 2024 15:15 - 15:45 MDT
Spruce 3/4

15:15 MDT

Blazing Trails: Building the World's Fastest GameBoy Emulator in Modern C++
Thursday September 19, 2024 15:15 - 16:15 MDT
Writing an emulator is truly transformative for any aspiring developer. In this session, we will be building parts of a lightning-fast Nintendo GameBoy (DMG-001) emulator library, complete with a webAssembly frontend.

We will introduce the concept of a 'fast' emulator, highlighting its significance beyond mere gaming authenticity. After setting clear limits as to what we aim to achieve within the allotted time, we will delve into some foundational aspects of modern computing by implementing the core components of a GameBoy emulator. Along the way, the need for various programming patterns will emerge naturally, showcasing their relevance in real-world development scenarios.

Additionally, we will demonstrate how integrating modern high-level C++ constructs streamlines our codebase, enhancing both readability and performance. You will witness firsthand how these constructs simplify development and yield significant speed enhancements (even when applied to emulating low-level systems).

This session aims not only to provide practical insights into modern emulator construction but also to invite collaboration on future enhancements and optimizations.
Speakers
avatar for Tom Tesch

Tom Tesch

Lecturer, DAE - Howest
Tom is currently a senior lecturer for the Bachelor in Digital Arts and Entertainment at Howest University of Applied Sciences, where he is on a mission to inspire the next generation of game developers. His expertise revolves around teaching C++, algorithms, and the core principles... Read More →
Thursday September 19, 2024 15:15 - 16:15 MDT
Cottonwood 2/3

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

15:15 MDT

High-performance Cross-platform Architecture: C++ 20 Innovations
Thursday September 19, 2024 15:15 - 16:15 MDT
C++ 20 developers do not need to sacrifice high-level expressiveness and code cleanliness for high performance when writing cross-platform code. Concepts and constraints combined with build tool configuration and judicious use of the preprocessor can enable novel techniques resulting in significant improvements to cross-platform architectures. The techniques are the result of experiences in the video games and embedded software fields; however, the techniques are applicable to high performance scientific code and general applications supporting multiple platforms

This presentation discusses how various features of C++ may be used to develop high-level and high-performance code in cross-platform projects. It focuses on the design and implementation of a small family of quaternion classes. Quaternions are a small numeric type used extensively in 3D graphics and thus ideal as the focus. The discussion begins with an unoptimized implementation that will compile on all platforms. Optimized versions for multiple architectures (SSE/AVX, Neon, and WebAssembly SIMD) will be added. These optimized types are added without changing a single line of existing code. Additionally, supporting multiple revisions of a spec will be illustrated. Implementing new revisions does not result in changing any pre-existing files, and new revisions may leverage older revisions and need not ever reimplement pre-existing functions. This reduces code repetition and all its attendant liabilities.
Speakers
avatar for Noah Stein

Noah Stein

Principal, Independent
Noah Stein began his commercial software development career while in high school. From 1993 through 2002 he worked as a lead programmer and technical director at companies in the video game industry. Since 2002, Noah has been an independent contractor working in both the video games... Read More →
Thursday September 19, 2024 15:15 - 16:15 MDT
Maple 3/4/5

15:15 MDT

What’s new for Visual Studio Code: Performance, GitHub Copilot, and CMake Enhancements
Thursday September 19, 2024 15:15 - 16:15 MDT
Get ready to dive into the latest C++ developments in Visual Studio Code (VS Code) developed in the last year. Our focus has been on faster extension performance, from optimizing the time to colorization to faster symbol searching in your workspace. Also, discover how VS Code has been supercharged to boost your productivity through new features such as extracting to a function and an easier CMake integration process for your projects. Throughout this session, we will deep dive into how you can leverage GitHub Copilot, your AI-powered pair programmer, to create, maintain, and optimize your C++ projects. Whether you are a VS Code veteran or just getting started, join us to learn more about the newest features in VS Code.
Speakers
avatar for Sinem Akinci

Sinem Akinci

Sinem Akinci graduated from the University of Michigan with a focus in Industrial Engineering and Computer Science. She now is the Product Manager at Microsoft working on Cross-platform and CMake developer experiences in Visual Studio and VS Code
Thursday September 19, 2024 15:15 - 16:15 MDT
Cottonwood 8/9

15:50 MDT

Investigation of performance for a robotic arm motion planner using modern Cpp
Thursday September 19, 2024 15:50 - 16:20 MDT
Motion planning algorithms play a crucial role in enabling robot arm to navigate complex environments efficiently. They are required to determine a robot's trajectory and optimize its motion to minimize cycle time and maximize throughput. In this talk, we delve into optimizing a robotic arm motion planner using the CHOMP algorithm, highlighting the significance of employing good coding practices and design patterns.

Beginning with an overview of motion planning techniques and the rationale behind selecting the CHOMP algorithm for robotic arm manipulation, we scrutinize the initial naive code implementation. Transitioning to modern C++ implementation, we introduce key concepts utilized in the refactor and present code snippets illustrating the transformation from legacy to modern paradigms.

Attendees will glean insights into identifying and addressing challenges in legacy code, mastering essential modern C++ concepts for motion planning optimization, and quantifying the tangible benefits through performance metric comparisons. It will further encourage them to integrate design patterns into robotics programs.
Speakers
AP

Aditi Pawaskar

Aditi Pawaskar is graduating from Worcester Polytechnic Institute, where she is pursuing her Masters in Robotics. She has her masters thesis on Manipulation of objects using robot arms and soft robotic hands.
Thursday September 19, 2024 15:50 - 16:20 MDT
Spruce 3/4

16:45 MDT

Irksome C++
Thursday September 19, 2024 16:45 - 17:45 MDT
As much as I like C++, it is certainly not free of -- let's say -- quirks.  Both the core language and the standard library exhibit idiosyncracies, sometimes even in conflict with one another.

Some of these "oops" may be historical in origin.  However, most are due to the spectrum of viewpoints held by the hundreds of contributors who have participated in C++ standardization to date.

This talk points out many of these inconsistencies and numerous other infelicities in naming, behavior, or both.  Come see whether *your* pet C++ peeve is mentioned!
Speakers
avatar for Walter E Brown

Walter E Brown

With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a computer programmer for over 60 years, and a C++ programmer for more than 40 years. He joined the C++ standards effort in 2000, and has since written circa 175 proposal papers. Among... Read More →
Thursday September 19, 2024 16:45 - 17:45 MDT
Maple 3/4/5

16:45 MDT

A Simple Rollback System in C++: The Secret Behind Online Multiplayer Games
Thursday September 19, 2024 16:45 - 17:45 MDT
It is common knowledge that online mulltiplayer games are some of the hardest kinds of software to develop. Game developers have to deal with data packets coming with a substancial delay, in fact working with data from the past. The rollback technique allows to give the illusion of real-time by extrapolating input with a game simulation from the confirm frame to the current one. However, for the implemention to work there are several key factors that need to be taken into account. The game simulation update needs to be deterministic, the game state should be easily copyable, and the game state should be clearly separated from the graphics side of the game.
Speakers
avatar for Elias Farhan

Elias Farhan

Head of Department, SAE Institute Geneva
Elias Farhan is the head of the Games Programming department at SAE Institute Genève, as well as founder of the RGB Games Programming Conference.
Thursday September 19, 2024 16:45 - 17:45 MDT
Cottonwood 2/3

16:45 MDT

spanny 2: rise of std::mdspan
Thursday September 19, 2024 16:45 - 17:45 MDT
C++23 introduced std::mdspan, a multi-dimensional view type that expanded on the capabilities of its predecessors, std::span and std::string_view, by eliminating the restriction to view into contiguous blocks of memory. Multidimensional array-type data structures are commonly used in robotics applications such as RGB and depth images, as well as occupancy grids for navigation. While these alone present a compelling alternative to hand-rolled data structures, this talk will illustrate the flexibility of the layout and accessor policy customization points included in std::mdspan, demonstrating its potential through various examples, including helping a robot arm inventory beer bottles.

This talk will review conventional use cases of std::mdspan in robotics, such as occupancy grids and submaps for determining obstacles and collision checking with polygonal footprints, as well as handling camera images retrieved after deep learning inference. Additionally, we will discuss commanding single and dual robot arms for inventory inspection using synchronous and asynchronous strategies via the std::mdspan accessor policy and std::future.

While these toy examples may have speculative applications, they highlight the flexibility and extensibility of this new data structure for novel use cases.
Speakers
avatar for Griswald Brooks

Griswald Brooks

Senior Robotics Engineer, PickNik Robotics
Thursday September 19, 2024 16:45 - 17:45 MDT
Spruce 3/4

16:45 MDT

Linear Algebra with The Eigen C++ Library
Thursday September 19, 2024 16:45 - 17:45 MDT
Linear algebra is an essential part of scientific programming, particularly in domains such as quantitative finance, data science, physics, and medical research.  It is also relevant to imaging in game development.   As C++ did not have all the convenient built-in multidimensional array capabilities and supporting libraries that came with typical Fortran platforms, scientific programmers making the transition to C++ back in the late 1990’s and early 2000's often found themselves in an inconvenient situation with limited options.  These included building up this functionality mostly from scratch, wrestling with interfaces to numerical Fortran libraries such as BLAS and LAPACK, or somehow convincing management to invest in a third-party commercial C++ linear algebra library.

The situation has improved substantially over the years with the development of several well-regarded open-source linear algebra libraries for C++.  One in particular that has become popular, first released in 2006, is the Eigen library.  It has been adopted for use within both the TensorFlow machine learning library and the Stan Math Library, as well as at CERN, and it can also be found in the implementation of high-performance quantitative trading strategies in C++.

In this talk, we will examine the setup and basics of the Eigen library, followed by a discussion of some of its more advanced features, including applications of matrix decompositions frequently used in quantitative work, as well as its compatibility with STL algorithms.  It will conclude with an overview of how it can be used within the context of the C++26 BLAS interface proposal (P1673), via an interface with std::mdspan now available in C++23.
Speakers
avatar for Daniel Hanson

Daniel Hanson

CppCon Student Program Chair
Former faculty, Dept of Applied Mathematics/Computational Finance & Risk Management, University of Washington, Seattle.  Remains active in computational applications of C++ and supporting the CppCon student program.  
Thursday September 19, 2024 16:45 - 17:45 MDT
Cottonwood 8/9

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

18:00 MDT

Meet the Presenters Banquet
Thursday September 19, 2024 18:00 - 20:00 MDT
The Meet the Presenters Banquet is open to all attendees. Ticket required. Invitation is included with "Regular" and "Full" conference registration and is also available as a separate, stand-alone registration.

This is your opportunity to meet and discuss with the presenters (main program, poster, instructors) in a relaxed, informal environment.
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 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 →
Thursday September 19, 2024 18:00 - 20:00 MDT
‍Adams B

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