Loading…
CppCon 2023 has ended
Wednesday, September 27
 

09:00 MDT

Workshop-Online "Crafting Embedded Systems in C++" with Ben Saks
Crafting Embedded Systems in C++ is a three-day online training course with programming exercises taught by Ben Saks. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
This course explains how to use C++ to write safe, efficient, and maintainable embedded programs. Step by step, it shows how to leverage C++ language features to write abstractions for hardware devices in a bare metal environment. It also explains how to make these abstractions easy to use and hard to misuse by turning potential run-time errors into compile-time errors. Although the course focuses primarily on standard features of C++, it also covers a few non-standard features when needed.

Many of the constructs that C++ provides for controlling hardware devices are also features of C. These features include pointers, bitwise operators, enumeration types, and the const and volatile qualifiers. This course demonstrates how C++ supports these features in ways that make them even more useful, especially for embedded developers.

In addition, C++ has a lot more to offer to embedded programmers. For example, classes can provide simpler and safer interfaces that hide the often-messy details of interacting with hardware. Templates and inheritance can promote code reuse by capturing commonality among related hardware and software components. Overloading and user-defined type conversions can support friendlier and safer user interfaces. The constexpr keyword can increase execution speed and reduce code size by turning run-time computations into compile-time computations.

Please see: https://cppcon.org/class-2023-crafting-embedded-systems/

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates
Ben Saks is the chief engineer of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Ben has represented Saks & Associates on the ISO C++ Standards committee as well as two of the committee’s study groups: SG14 (low-latency... Read More →


Wednesday September 27, 2023 09:00 - 15:00 MDT
_1

09:00 MDT

Workshop-Online "System Architecture And Design Using Modern C++" with Charley Bay
System Architecture and Design Using Modern C++ is a three-day online training course with programming examples, taught by Charley Bay. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
C++ developers confront daunting responsibilities: to be familiar with the guarantees and idioms for the C++ language; know data structures and algorithms with intrinsic benefits and constraints explored by Computer Science; and understand the application domain in which the practicing professional is expected to make implementation decisions that manage complexity and resolve edge-cases to effectively solve real-world problems.

And yet, none of these directly address the meta-patterns and system-wide concerns defined by “architecture”, nor the reasoned tradeoffs of “design” that divide responsibilities and ultimately define subsystems and APIs. Often, these higher-order concerns are relegated to senior and experienced engineers charged with balancing business constraints with technical tradeoffs to establish a Theory of Operation for individual systems, and for product families.

This course is intended for intermediate and advanced C++ engineers with experience making architectural and design decisions, or who are evolving into roles that demand proficiency in system-level analysis and decision making. We will focus on Modern C++ and deeply explore successes and failures in projects and systems from a variety of industries. And, we will discover that some crossroads are universal, despite the unique concerns that may present pragmatic challenges and cause technical implications to be ranked differently based on the specific domain to which the solution is applied.

Please see: https://cppcon.org/class-2023-system-architecture-and-design-using-modern-cpp/

Speakers
avatar for Charley Bay

Charley Bay

Charley Bay
Charley is a software developer with over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance... Read More →


Wednesday September 27, 2023 09:00 - 15:00 MDT
_3
 
Thursday, September 28
 

09:00 MDT

Workshop-Online "Crafting Embedded Systems in C++" with Ben Saks
Crafting Embedded Systems in C++ is a three-day online training course with programming exercises taught by Ben Saks. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
This course explains how to use C++ to write safe, efficient, and maintainable embedded programs. Step by step, it shows how to leverage C++ language features to write abstractions for hardware devices in a bare metal environment. It also explains how to make these abstractions easy to use and hard to misuse by turning potential run-time errors into compile-time errors. Although the course focuses primarily on standard features of C++, it also covers a few non-standard features when needed.

Many of the constructs that C++ provides for controlling hardware devices are also features of C. These features include pointers, bitwise operators, enumeration types, and the const and volatile qualifiers. This course demonstrates how C++ supports these features in ways that make them even more useful, especially for embedded developers.

In addition, C++ has a lot more to offer to embedded programmers. For example, classes can provide simpler and safer interfaces that hide the often-messy details of interacting with hardware. Templates and inheritance can promote code reuse by capturing commonality among related hardware and software components. Overloading and user-defined type conversions can support friendlier and safer user interfaces. The constexpr keyword can increase execution speed and reduce code size by turning run-time computations into compile-time computations.

Please see: https://cppcon.org/class-2023-crafting-embedded-systems/

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates
Ben Saks is the chief engineer of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Ben has represented Saks & Associates on the ISO C++ Standards committee as well as two of the committee’s study groups: SG14 (low-latency... Read More →


Thursday September 28, 2023 09:00 - 15:00 MDT
_1

09:00 MDT

Workshop-Online "System Architecture And Design Using Modern C++" with Charley Bay
System Architecture and Design Using Modern C++ is a three-day online training course with programming examples, taught by Charley Bay. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
C++ developers confront daunting responsibilities: to be familiar with the guarantees and idioms for the C++ language; know data structures and algorithms with intrinsic benefits and constraints explored by Computer Science; and understand the application domain in which the practicing professional is expected to make implementation decisions that manage complexity and resolve edge-cases to effectively solve real-world problems.

And yet, none of these directly address the meta-patterns and system-wide concerns defined by “architecture”, nor the reasoned tradeoffs of “design” that divide responsibilities and ultimately define subsystems and APIs. Often, these higher-order concerns are relegated to senior and experienced engineers charged with balancing business constraints with technical tradeoffs to establish a Theory of Operation for individual systems, and for product families.

This course is intended for intermediate and advanced C++ engineers with experience making architectural and design decisions, or who are evolving into roles that demand proficiency in system-level analysis and decision making. We will focus on Modern C++ and deeply explore successes and failures in projects and systems from a variety of industries. And, we will discover that some crossroads are universal, despite the unique concerns that may present pragmatic challenges and cause technical implications to be ranked differently based on the specific domain to which the solution is applied.

Please see: https://cppcon.org/class-2023-system-architecture-and-design-using-modern-cpp/

Speakers
avatar for Charley Bay

Charley Bay

Charley Bay
Charley is a software developer with over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance... Read More →


Thursday September 28, 2023 09:00 - 15:00 MDT
_3
 
Friday, September 29
 

09:00 MDT

Workshop-Online "Crafting Embedded Systems in C++" with Ben Saks
Crafting Embedded Systems in C++ is a three-day online training course with programming exercises taught by Ben Saks. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
This course explains how to use C++ to write safe, efficient, and maintainable embedded programs. Step by step, it shows how to leverage C++ language features to write abstractions for hardware devices in a bare metal environment. It also explains how to make these abstractions easy to use and hard to misuse by turning potential run-time errors into compile-time errors. Although the course focuses primarily on standard features of C++, it also covers a few non-standard features when needed.

Many of the constructs that C++ provides for controlling hardware devices are also features of C. These features include pointers, bitwise operators, enumeration types, and the const and volatile qualifiers. This course demonstrates how C++ supports these features in ways that make them even more useful, especially for embedded developers.

In addition, C++ has a lot more to offer to embedded programmers. For example, classes can provide simpler and safer interfaces that hide the often-messy details of interacting with hardware. Templates and inheritance can promote code reuse by capturing commonality among related hardware and software components. Overloading and user-defined type conversions can support friendlier and safer user interfaces. The constexpr keyword can increase execution speed and reduce code size by turning run-time computations into compile-time computations.

Please see: https://cppcon.org/class-2023-crafting-embedded-systems/

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates
Ben Saks is the chief engineer of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Ben has represented Saks & Associates on the ISO C++ Standards committee as well as two of the committee’s study groups: SG14 (low-latency... Read More →


Friday September 29, 2023 09:00 - 15:00 MDT
Online 1

09:00 MDT

Workshop-Online "System Architecture And Design Using Modern C++" with Charley Bay
System Architecture and Design Using Modern C++ is a three-day online training course with programming examples, taught by Charley Bay. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT, 17:00 to 23:00 CEST, Wednesday, September 27th through Friday, September 29th, 2023 (prior to the conference).

Course Description
C++ developers confront daunting responsibilities: to be familiar with the guarantees and idioms for the C++ language; know data structures and algorithms with intrinsic benefits and constraints explored by Computer Science; and understand the application domain in which the practicing professional is expected to make implementation decisions that manage complexity and resolve edge-cases to effectively solve real-world problems.

And yet, none of these directly address the meta-patterns and system-wide concerns defined by “architecture”, nor the reasoned tradeoffs of “design” that divide responsibilities and ultimately define subsystems and APIs. Often, these higher-order concerns are relegated to senior and experienced engineers charged with balancing business constraints with technical tradeoffs to establish a Theory of Operation for individual systems, and for product families.

This course is intended for intermediate and advanced C++ engineers with experience making architectural and design decisions, or who are evolving into roles that demand proficiency in system-level analysis and decision making. We will focus on Modern C++ and deeply explore successes and failures in projects and systems from a variety of industries. And, we will discover that some crossroads are universal, despite the unique concerns that may present pragmatic challenges and cause technical implications to be ranked differently based on the specific domain to which the solution is applied.

Please see: https://cppcon.org/class-2023-system-architecture-and-design-using-modern-cpp/

Speakers
avatar for Charley Bay

Charley Bay

Charley Bay
Charley is a software developer with over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance... Read More →


Friday September 29, 2023 09:00 - 15:00 MDT
Online 2
 
Saturday, September 30
 

09:00 MDT

Workshop-Onsite "Advanced Knowledge of C++ Basics" with Mateusz Pusz
Advanced Knowledge of C++ Basics is a two-day onsite training course with programming examples, taught by Mateusz Pusz. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT), on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++ is a complex and complicated programming language. When used correctly, it delivers the best possible performance. Unfortunately, it is often misused, which is a source of many problems.

However, it turns out that in the case of conscious usage of selected language features, it can be relatively easy to produce high-quality software that delivers excellent runtime performance and is error-proof. Such a coding style is called Modern C++.

The material of this workshop is the first chapter of the trainer’s most successful and popular training called “Advanced Modern C++”. During the class, we will go through all the key features of the C++ language, discuss potential issues and pitfalls, and provide guidelines on how to use them correctly. This training discusses various topics ranging from identifiers that do not result in undefined behavior; through vital language features like name lookup, overload resolution, one definition rule, and move semantics; up to the design recommendations like Rule of Zero. Among others, we will see how we can provide a custom dynamic allocation strategy for our programs and how we should design and implement customization points for our engine.

The training targets developers with some professional experience with C++ programming language and who realize the problems caused by careless ways of coding in this language. The workshop aims to strengthen the knowledge of the C++ core language and show how to avoid many problems that often appear in the production code.

If you are wondering if you should attend this class, maybe this short quiz will help you decide. Those and many other questions will be addressed during the training.

Please see: https://cppcon.org/class-2023-cplusplus-basics/

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 →


Saturday September 30, 2023 09:00 - 17:00 MDT
Telluride

09:00 MDT

Workshop-Onsite "C++ Templates for Developers" with Walter E Brown
C++ Templates for Developers is a two-day onsite training course with programming examples, taught by Walter E. Brown. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
As an intermediate-level C++ programmer, you already know about and have very likely used one or more kinds of C++ templates in your code. Whether you’ve applied std::vector or std::array to your work, or called upon any of the multitude of algorithms that the standard library provides, you’ve experienced some of the power that templates add to a C++ programmer’s toolkit.

This Workshop will help you take your knowledge and experience to the next level, so that you will both (1) understand exactly how C++ templates are handled by a compiler, and (2) be able to take advantage of that knowledge to create templates that are tailored to your own programming needs.

In this Academy Workshop, we will explore all significant facets of the many kinds of C++ templates (and other templated entities), and will do so in as much depth as our time together will permit. The Workshop will include presentations as well as optional (but recommended) practice exercises, together with numerous examples and tips that you can learn from and apply. Many of our examples and exercises will be taken from the standard library, thus doubling the useful information you’ll glean from your participation.

Come discover how the world of C++ templates will open to you once you’ve mastered a modest handful of straightforward, key insights and principles. Whether it’s programming generically, or with variadics, SFINAE, concepts, overloading, or other coding practices, this Workshop will allow you to explore and apply template-based techniques that will help solve problems in your programming domain!

Please see: https://cppcon.org/class-2023-cpp-templates-for-devs/

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 almost 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 →


Saturday September 30, 2023 09:00 - 17:00 MDT
Aspen

09:00 MDT

Workshop-Onsite "C++20 in Practice: A Complete Introduction" with Nicolai Josuttis
C++20 in Practice: A Complete Introduction is a two-day onsite training course with programming examples, taught by Nicolai Josuttis, one of our most popular instructors. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++20 is the latest new release of C++, now supported by major compilers. This class teaches it in a way that you understand its power and can start to use it in practice.

C++20 is huge. It will change the way we program more dramatically than C++11 did. As usual, not everything is self-explanatory, combining new features gives even more power, and there are hidden traps. So, the key question is what this means in practice.

This class will go through all major and important minor features of C++20 (covering both language and library), introduce them conceptually, provide compelling examples, and give key insights and hints about how to use them in practice.

As a member of the C++ standards committee, Nicolai will also give useful background information about purpose and design decisions.

Please see: https://cppcon.org/class-2023-cpp20-in-practice/

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Saturday September 30, 2023 09:00 - 17:00 MDT
Breckenridge

09:00 MDT

Workshop-Onsite "Optimizing with Modern C++" with Patrice Roy
Optimizing with Modern C++ is a two-day onsite training course with programming examples, taught by Patrice Roy. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++ is seen by many as a language one uses to get more from a program: more speed, more deterministic behavior, lower resource consumption, etc. Interestingly, C++ does not necessarily make programs faster or smaller; what C++ brings to programmers is control, and that control can lead to all sorts of optimizations.

Optimization is a vast and multifaceted topic no-one could hope cover completely in the span of a 15-hours course. For this reason, this course focuses on how to leverage “modern” C++ (C++ as we’ve come to know and love it since the C++11 revolution came upon us all) to make programs faster, smaller and otherwise more efficient.

Please see: https://cppcon.org/cppcon-academy-2023/

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 30 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Saturday September 30, 2023 09:00 - 17:00 MDT
Vail
 
Sunday, October 1
 

09:00 MDT

Workshop-Onsite "Advanced Knowledge of C++ Basics" with Mateusz Pusz
Advanced Knowledge of C++ Basics is a two-day onsite training course with programming examples, taught by Mateusz Pusz. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT), on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++ is a complex and complicated programming language. When used correctly, it delivers the best possible performance. Unfortunately, it is often misused, which is a source of many problems.

However, it turns out that in the case of conscious usage of selected language features, it can be relatively easy to produce high-quality software that delivers excellent runtime performance and is error-proof. Such a coding style is called Modern C++.

The material of this workshop is the first chapter of the trainer’s most successful and popular training called “Advanced Modern C++”. During the class, we will go through all the key features of the C++ language, discuss potential issues and pitfalls, and provide guidelines on how to use them correctly. This training discusses various topics ranging from identifiers that do not result in undefined behavior; through vital language features like name lookup, overload resolution, one definition rule, and move semantics; up to the design recommendations like Rule of Zero. Among others, we will see how we can provide a custom dynamic allocation strategy for our programs and how we should design and implement customization points for our engine.

The training targets developers with some professional experience with C++ programming language and who realize the problems caused by careless ways of coding in this language. The workshop aims to strengthen the knowledge of the C++ core language and show how to avoid many problems that often appear in the production code.

If you are wondering if you should attend this class, maybe this short quiz will help you decide. Those and many other questions will be addressed during the training.

Please see: https://cppcon.org/class-2023-cplusplus-basics/

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 →


Sunday October 1, 2023 09:00 - 17:00 MDT
Telluride

09:00 MDT

Workshop-Onsite "C++ Templates for Developers" with Walter E Brown
C++ Templates for Developers is a two-day onsite training course with programming examples, taught by Walter E. Brown. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
As an intermediate-level C++ programmer, you already know about and have very likely used one or more kinds of C++ templates in your code. Whether you’ve applied std::vector or std::array to your work, or called upon any of the multitude of algorithms that the standard library provides, you’ve experienced some of the power that templates add to a C++ programmer’s toolkit.

This Workshop will help you take your knowledge and experience to the next level, so that you will both (1) understand exactly how C++ templates are handled by a compiler, and (2) be able to take advantage of that knowledge to create templates that are tailored to your own programming needs.

In this Academy Workshop, we will explore all significant facets of the many kinds of C++ templates (and other templated entities), and will do so in as much depth as our time together will permit. The Workshop will include presentations as well as optional (but recommended) practice exercises, together with numerous examples and tips that you can learn from and apply. Many of our examples and exercises will be taken from the standard library, thus doubling the useful information you’ll glean from your participation.

Come discover how the world of C++ templates will open to you once you’ve mastered a modest handful of straightforward, key insights and principles. Whether it’s programming generically, or with variadics, SFINAE, concepts, overloading, or other coding practices, this Workshop will allow you to explore and apply template-based techniques that will help solve problems in your programming domain!

Please see: https://cppcon.org/class-2023-cpp-templates-for-devs/

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 almost 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 →


Sunday October 1, 2023 09:00 - 17:00 MDT
Aspen

09:00 MDT

Workshop-Onsite "C++20 in Practice: A Complete Introduction" with Nicolai Josuttis
C++20 in Practice: A Complete Introduction is a two-day onsite training course with programming examples, taught by Nicolai Josuttis, one of our most popular instructors. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++20 is the latest new release of C++, now supported by major compilers. This class teaches it in a way that you understand its power and can start to use it in practice.

C++20 is huge. It will change the way we program more dramatically than C++11 did. As usual, not everything is self-explanatory, combining new features gives even more power, and there are hidden traps. So, the key question is what this means in practice.

This class will go through all major and important minor features of C++20 (covering both language and library), introduce them conceptually, provide compelling examples, and give key insights and hints about how to use them in practice.

As a member of the C++ standards committee, Nicolai will also give useful background information about purpose and design decisions.

Please see: https://cppcon.org/class-2023-cpp20-in-practice/

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Sunday October 1, 2023 09:00 - 17:00 MDT
Breckenridge

09:00 MDT

Workshop-Onsite "Optimizing with Modern C++" with Patrice Roy
Optimizing with Modern C++ is a two-day onsite training course with programming examples, taught by Patrice Roy. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 30th and October 1st, 2023 (immediately prior to the conference). Lunch is included.

Course Description
C++ is seen by many as a language one uses to get more from a program: more speed, more deterministic behavior, lower resource consumption, etc. Interestingly, C++ does not necessarily make programs faster or smaller; what C++ brings to programmers is control, and that control can lead to all sorts of optimizations.

Optimization is a vast and multifaceted topic no-one could hope cover completely in the span of a 15-hours course. For this reason, this course focuses on how to leverage “modern” C++ (C++ as we’ve come to know and love it since the C++11 revolution came upon us all) to make programs faster, smaller and otherwise more efficient.

Please see: https://cppcon.org/cppcon-academy-2023/

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 30 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Sunday October 1, 2023 09:00 - 17:00 MDT
Vail

09:45 MDT

Field Trip Meetup
For those who've registered for this year's Field Trip, let's meet up in Rockies Square.

Rockies Square is behind the Convention Coffee shop "the Cocoa Bean", convention center level 2. At the top of the stairs above registration. The tour bus will meet us outside of this area 9:45 to 10:00. Look for the guy in the train hat.

Sunday October 1, 2023 09:45 - 10:00 MDT
Rockies Square

10:00 MDT

Field Trip
The CppCon 2023 Field Trip will be to the Wild Animal Sanctuary in Keenesburg, CO.
We’ll leave the Gaylord Rockies mid-morning and return mid-afternoon. Transportation to and from Gaylord Rockies, admission, lunch, and souvenir are included.

1) We will drive to the facility, be introduced to the sanctuary and view a short orientation video and sign a safety waiver.
2) The picnic lunch will be served around 12:30 in the main arena.
3) We will depart the sanctuary at 15:15.

Sun protection is strongly encouraged. We will be at 4,944 ft (1500m), and hydration is very important. Bottled water and beverages will be provided.

Sunday October 1, 2023 10:00 - 16:00 MDT
Keenesburg, CO

17:30 MDT

Tee Shirt Night
Tee Shirt Night is our way to helping you get to know other conference attendees even before the conference has officially started. It works best if you brought a C++ (or CppCon) shirt with you. But even if you didn't you can join the fun.

Here is how:
  1. Put on your C++ or CppCon shirt (or don't, if you didn't bring one).
  2. Go to any of the Gaylord Rockies eateries.
  3. Look for others wearing a C++ or CppCon shirt.
  4. Ask to join their group.
  5. Enjoy getting to know other attendees before the conference starts!
  6. Get a 10% discount on food orders! (Alcohol not included)

Sunday October 1, 2023 17:30 - 20:30 MDT
Lower Lobby

20:00 MDT

Registration Reception
Come for the registration and stay for the reception.

Get your badge.

Stick around and get acquainted with new friends and reacquainted with old friends.

Sunday October 1, 2023 20:00 - 22:00 MDT
Juniper Patio
 
Monday, October 2
 

08:45 MDT

Delivering Safe C++
Type safety was one of the key initial C++ design ideals. We have evolved C++ to the point where we can write C++ with no violations of the type system, no resource leaks, no memory corruption, no garbage collector, no limitation of expressiveness or performance degradation compared to well-written modern C++.
We face three major challenges: To define what “safe” means in the context of various C++ uses, to guarantee such safety where guarantees are needed, and to get developers to write such verified safe code.
I outline an approach based on safety profiles to address these challenges, describe an approach to eliminate dangling pointers, and suggest how to eliminate all dangling pointers and all range errors. My aim for key applications is verified type-and-resource-safe C++. An emphasis is on minimizing costly run-time checks through the use of abstractions. I see the current emphasis on safety as an opportunity to complete one aspect of C++’s fundamental aims in real-world code.

Speakers
avatar for Bjarne Stroustrup

Bjarne Stroustrup

Professor, Columbia University
Bjarne Stroustrup is the designer and original implementer of C++ as well as the author of The C++ Programming Language (4th Edition) and A Tour of C++ (3rd edition), Programming: Principles and Practice using C++ (2nd Edition), and many popular and academic publications. He is a... Read More →


Monday October 2, 2023 08:45 - 10:30 MDT
Adams

11:00 MDT

Back to Basics: Debugging
Everyone knows that debugging is twice as hard as writing a program in the first place. Fortunately, there is more help available than you might have thought. GDB is much more powerful than most people realize; Valgrind and Address Sanitizer can catch many common bugs before they wreak havoc; time-travel debugging can turn even the most intractable nightmarish bugs into pussycats. This fast-paced talk is light on slides and heavy on demos to show you what's available and how to use it. Familiarity with the tools available to you is an essential part of being a great programmer; you will leave this talk at least one step closer to programming zen.

Speakers
avatar for Greg Law

Greg Law

Co-founder and CEO, Undo
Greg is co-founder and CEO at Undo. He is a programmer at heart, but likes to keep one foot in the software world and one in the business world. Greg finds it particularly rewarding to turn innovative software technology into a real business. Greg has over 25 years' experience in... Read More →


Monday October 2, 2023 11:00 - 12:00 MDT
Maple 3/4/5

11:00 MDT

Expressive Compile-time Parsers
Modern C++ has many language features and that can be leveraged to design an expressive API or a domain-specific language. However, these features are limited by the syntax rules of C++. To overcome this limitation, we will discuss the use of compile-time parsers to write more expressive code with zero overhead.

We will analyze open-source compile-time parsing libraries from C++11 to C++23 and compare their APIs in terms of flexibility and expressiveness. Additionally, we will delve into the techniques used in the implementation of these libraries to handle compile-time parsing under the constraints of compile-time execution.

Finally, we will highlight how these libraries can be used to reduce boilerplate and write compile-time regular expressions, parsers, parser generators, Rust's macro rules and reflection features. Attendees of this talk will gain a deeper understanding of the power and versatility of compile-time parsers in C++

Speakers
avatar for Alon Wolf

Alon Wolf

Software Engineer, Medtronic
Alon is a Senior Software Engineer at Medtronic specializing in 3D and computer graphics with a passion for high performance. He has developed many custom simulation and rendering engines for different platforms using modern C++. He also writes a C++ technical blog and participates... Read More →


Monday October 2, 2023 11:00 - 12:00 MDT
Cottonwood 2/3

11:00 MDT

Customization Methods: Connecting User and Library Code
The interface between a library and its users is a major design consideration for every developer, and has been evolving greatly over C++’s lifetime.
In this talk, we will review important topics to take under consideration when desining a library. We will then go over different methods for connecting generic library code with user-side specific code, commonly known as Customization Points. We will cover the benefits and downsides of different methods (including CTS, ADL, Concepts, CTOs, and the latest to be considered - tag_invoke), and present future directions for these mechanisms.

At the end of the talk, you’ll have a toolset for designing your next library, and will be familiar with the terminology and developments in this field, including the ones planned for C++26 and C++29

Speakers
avatar for Inbal Levi

Inbal Levi

Milennium Management, Standard C++ Foundation
​Inbal Levi is a Lead Software Engineer at Millennium (MPGC Services Ltd) with a passion for high performance, readability, compilers, language, and software design.She is an active member of the ISO C++ Standards Committee as Library Evolution Work Group Chair, and as the ISO C... Read More →


Monday October 2, 2023 11:00 - 12:00 MDT
Cottonwood 8/9

11:00 MDT

Lifetime Safety in C++: Past, Present and Future
How can we make C++ safer without sacrificing its performance and flexibility? Memory safety is a desirable property for any C++ program, but it is not easy to achieve. Recent revisions of the C++ standard rendered some unsafe code ill-formed or harmless, but there are still many gaps. Comprehensive lifetime analysis like that of Rust can help detect memory errors, but it often requires major changes to the code structure. This can be impractical, costly, and risky, especially for legacy code. This talk surveys mitigations available today that can help enhance the safety of our code. These mitigations include warnings and static analysis checks from MSVC, Clang, and GCC, dynamic analysis tools, and changes to the C++ language. It also explores some directions to further improve the safety of the language.

Speakers
avatar for Gabor Horvath

Gabor Horvath

Senior Software Engineer, Microsoft
Gabor Horvath is a software engineer and a researcher in the field of static analysis. He has been contributing to various research projects on program analysis since 2012, and he obtained his Ph.D. degree on this topic from Eotvos Lorand University in 2020. He has extensive experience... Read More →


Monday October 2, 2023 11:00 - 12:00 MDT
Adams

12:30 MDT

Open Content: Herb Sutter "Informal BoF for Cpp2/cppfront"
This session is an informal “BoF + show-and-tell” meetup for people interested in Cpp2/cppfront.
Here are some ideas:
- Do you have a pull request you're working on? Show it off and get feedback
- Chat in person about some of the GitHub cppfront Discussions topics
So this would be a BoF session
- Other related topics welcome!

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 October 2, 2023 12:30 - 13:30 MDT
Cottonwood 8/9

12:30 MDT

Open Content: Jason Turner "C++ Conversation: Storage Durations, Lifetimes, and Puzzlers"
Want to learn more about C++ in a highly interactive way?

We will have a lunchtime group conversation about C++ Object Lifetime. We will discuss the types of Object Lifetime that exist in C++, and go through some fun puzzle-like exercises together.
Expect a casual, relaxed, fun, interactive setting to spend your lunch time!

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Monday October 2, 2023 12:30 - 13:30 MDT
Cottonwood 2/3

14:00 MDT

Back to Basics: Functions
Functions are one of the first things programmers learn, granting you the ultimate power to 'resuse' code and build modular programs. In this talk, we are going to provide an overview of functions from the start to the end, on the various powers that are given to us from the ground up. Consider this talk your one stop for learning all of the great things about functions!

We'll start with a basic function example, identifying the function signature and basic abilities of a function. Then we are going to view this function again from the perspective of assembly (using compiler explorer) to show you how a function is structured. From the assembly view, we will then observe that functions have addresses (they must after all!) and that we can store functions in pointers. We'll take a brief aside to show you how modern C++ also gives us the convenient std::function. Functions need not always be 'global' building blocks of our programs, the next step in our journey will be to see how we can have functions at local scope (e.g. lambda's) and how they can be used (and often times in handy ways in the STL). Ah, intrigued are you? We're not quite done! Now with building blocks such as lambda's (and related functors) we can utilize function composition to really unlock the power of functions. Towards the end of this talk, we will talk about grouping related functions (into namespaces) and as member functions in classes. Within our discussion of functions in classes, we'll touch on virtual functions, static functions, and operator overloading. We'll circle back to where we began on these topics, again showing you the assembly. At the end of this talk, you will have had FUN with functions (I couldn't resist...but you will see the complete C++ picture of functions).

Speakers
avatar for Mike Shah

Mike Shah

Professor / (occasional) 3D Graphics Engineer, Northeastern University
Mike Shah is an Associate Teaching Professor at Northeastern University in the Khoury College of Computer Sciences. His primary teaching interests are in computer systems, computer graphics, and software engineering. His research interests are related to performance engineering (dynamic... Read More →


Monday October 2, 2023 14:00 - 15:00 MDT
Maple 3/4/5

14:00 MDT

A Long Journey of Changing std::sort Implementation at Scale
Sorting algorithms have been improving for almost 50 years now with claims of better efficiency and various properties but the question of adopting a new one at scale is often left behind. At Google we replaced std::sort in the LLVM libc++ library to test it for hundreds of thousand calls. We faced many challenges which we had been fixing for 2 years including golden tests, efficiency problems, undefined behavior and broken production. In this talk we want to cover issues on how we improved debugging, benchmarking, how much better a new implementation was compared to the old one and what we have learned on this journey of improved sorting.

Speakers
avatar for Danila Kutenin

Danila Kutenin

Software Engineer, Google
Danila Kutenin is a Senior Software Engineer at Google in the Efficiency team. For 7 years Danila had an experience in optimizing Search Engines, Databases and General efficiency.


Monday October 2, 2023 14:00 - 15:00 MDT
Adams

14:00 MDT

Things Happening in SG14…
The C++ standards committee is made of a small number of working groups and of a larger number of study groups, including SG14 (low-latency, finances, games and embedded systems). Since pandemic times, SG14 has been brewing a number of proposals meant to make C++ «better for game developers». We will look at the principles behind this effort, the output of this work and what this means for C++.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 30 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Monday October 2, 2023 14:00 - 15:00 MDT
Cottonwood 8/9

14:00 MDT

Finding Your Codebases C++ Roots
Codebases contain all the history for a project, from designed-new features to hacked-together quick fixes that no one has come back to. Whenever new software development occurs, designed or not, the meaning of a section of code is morphed, hopefully to the intended purpose. When the next person comes along, they will need to understand the past “whys” behind decisions to create the most maintainable and cohesive codebase. This involves understanding not just the codebase’s history, but also C++’s history to effectively understand the story of how the code got to where it is now. In this talk, we will investigate the life cycle of a C++ codebase utilizing the skills and perspective of genealogy. We will address the difficulties in understanding a codebase’s C++ past, how that links to C++’s past, and how we can use that information to improve our codebases—now and in the future.

Speakers
avatar for Katherine Rocha

Katherine Rocha

Software Engineer
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 →


Monday October 2, 2023 14:00 - 15:00 MDT
Cottonwood 2/3

15:15 MDT

Continuous Regression Testing for Safer and Faster Refactoring
Making code changes to real-world software systems runs the risk of introducing unintended side-effects that are costly to find and fix. To mitigate this risk, engineering teams significantly invest in adopting various software testing practices. Despite best efforts, effectively and reliably identifying software regressions remains a challenge and results in long feedback cycles that hurt developer productivity. This problem is more pronounced in C++ software systems, given that their application domains often impose tight requirements on system safety and performance.

This talk shows you how continuous regression testing can help you find regressions in behavior or performance of your software during the development stage. It is a practical walk-through of how to build a regression testing framework in C++, how to use it to write effective regression tests, and how to integrate it with your CI pipeline to automate the execution of your tests as part of the CI or on a dedicated test server. It also includes recommendations on how to avoid common design pitfalls that lead to tests that are either flaky or untrustworthy or difficult to run at scale.

This talk also introduces a free and open-source software for continuous regression testing C++ applications. We will use a series of hands-on demos to showcase the end-to-end workflow of finding regressions in common C++ development scenarios including refactoring functions, upgrading dependencies, and updating the build toolchain. We also show a few less common use-cases such as profiling the size of binaries and tracking the exported symbols of a shared library, to inspire you to think how regression testing could unlock faster and safer refactoring for you and your team.

Speakers
avatar for Pejman Ghorbanzade

Pejman Ghorbanzade

Staff Software Engineer, Aurora Innovations, Inc.
Pejman Ghorbanzade is a staff software engineer at Aurora, helping deliver the benefits of self-driving technology safely, quickly, and broadly.Before joining Aurora, he was the founder and CEO of Touca, a developer-tools startup helping engineering teams find the unintended side-effects... Read More →


Monday October 2, 2023 15:15 - 16:15 MDT
Cottonwood 8/9

15:15 MDT

std::simd: How to Express Inherent Parallelism Efficiently Via Data-parallel Types
C++26 is on route to ship `std::simd`, a facility for expressing data-parallelism via the type system, based on experience from `std::experimental::simd` (Parallelism TS v2). Data-parallel types have the potential to replace many uses of built-in arithmetic types with their `simd` counterpart in compute-intensive workloads, promising factors of speed-ups without algorithmic changes.

This talk presents how data-parallel types are designed to be more than just a thin wrapper around SIMD registers and instructions. They are designed to facilitate generic code, work/integrate with standard algorithms, etc, all while translating into efficient use of parallel execution capabilities. More important, data-parallel types are not "just another way to express data-parallel execution", they also provide new ways to design data structures for efficient memory access (high-throughput without sacrificing locality) using data-structure vectorization. The talk features examples of efficient use of `std::simd`.

Speakers
avatar for Matthias Kretz

Matthias Kretz

GSI Helmholtzzentrum für Schwerionenforschung GmbH
Matthias Kretz began programming with C++ as a high-school student, when he joined the development of the KDE 2 Desktop in its Alpha stages. He worked on GUI applications, the KDE core libraries, and developed the multimedia subsystem of the KDE Plasma Desktop (4.0), which became... Read More →


Monday October 2, 2023 15:15 - 16:15 MDT
Cottonwood 2/3

15:15 MDT

C++ Modules: Getting Started Today
Modules have been one of the most highly anticipated features of C++20. Unfortunately, it was also the language feature that took the longest to become widely available for developers to use. This year, for the first time, we see broad support for the feature in all major compilers and mainstream build system support through CMake. The goal of this talk is to provide you with all the basic knowledge to allow you getting started with C++20 modules today.

We will take a look at how modules change the build process and why it took so long to implement them. We will take a tour of the essentials of the named modules mechanism and explore the new best practices for physical code structure in a modules-based code base, including how to set up a build with CMake. And last but not least, we will discuss different options for interacting with existing header-based code.

The talk will focus above all else on practicality: We will only be covering features that are widely available for use today with the latest compilers and build tools. We will give special attention to the areas where the design practices for modules differ from the familiar header-based approach and address common misconceptions and pitfalls that are typical among developers first encountering the feature. No prior knowledge of modules is required.

Speakers
avatar for Andreas Weis

Andreas Weis

Woven by Toyota
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 →


Monday October 2, 2023 15:15 - 16:15 MDT
Adams

15:15 MDT

Thinking Functionally in C++
C++ is a multi-paradigm language, supporting OO, procedural and functional programming styles. Functional languages conjure up thoughts of academic languages; immutable data and mathematical terms like monad and higher order functions. We’ve been told of the advantages of functional languages, specifically when it comes to parallelization and safety, but very few of them are ever used in production code. However, what if we were to take the mindset of functional programming and apply it to existing C++ codebases? How will it change the way we write and think about our code? In this talk, we will explore ways to think functionally about your code and how to modify it using functional techniques. We will explore some of the additions C++ has made to aid in functional programming in the form of views, lambdas and ranges and how those fit into an existing OO or procedural codebase. We will finish up by looking at functional design considerations and their tradeoffs. After leaving this talk you should have the tools to identify instances in your code where using functional thinking will improve its performance, reusability and security.

Speakers
avatar for Brian Ruth

Brian Ruth

Sr. Software Engineer, Garmin, Inc
Brian has been programming in C++ for over 20 years, working for both small and large companies on a wide variety of projects and technologies. For over a decade he worked with neuroscience researchers and created high speed acquisition, analysis and visualization software. He is... Read More →


Monday October 2, 2023 15:15 - 16:15 MDT
Maple 3/4/5

16:45 MDT

Effective Ranges: A Tutorial for Using C++2x Ranges
This course provides in introduction to using C++ ranges effectively. Ranges are the largest revamp of the Standard Template Library (STL) in 20 years and impacts daily C++ programming dramatically. The presentation provides a survey of C++20 and C++23 ranges and their application. Note that C++14/17 programmers can also benefit since Range v3 library provides an implementation of many of the discussed facilities.

The tutorial goes beyond the basics to explore what's behind the ranges library. For example, understand the key differences between algorithms and views and when to apply them. We'll look at some of the concepts used in the design of ranges. And finally we'll explore how ranges fits into the wider standard library with i/o integration, collection integration, and support of legacy stl algorithms.

Chock full of example code this tutorial will bootstrap programmer's usage of std::ranges.

Speakers
avatar for Jeff Garland

Jeff Garland

CrystalClear Software
Jeff Garland has worked on many large-scale, distributed software projects over the past 30+ years. The systems span many different domains including telephone switching, industrial process control, satellite ground control, ip-based communications, and financial systems. He has written... Read More →


Monday October 2, 2023 16:45 - 17:45 MDT
Adams

16:45 MDT

Cache-friendly Design in Robot Path Planning
Point-to-point planning is a major component in virtually all mobile robotic systems. These systems may require agents to generate paths over very large areas on demand; and sometimes several more times during their journey as part of intelligent recovery routines under dynamic environmental conditions. Since planning over large areas is a resource-intensive operation, particularly in higher-dimensional state-spaces, planning routines must be carefully tuned to execute as efficiently as possible so as to prevent perceptible delays in robot responsiveness.

Attendees can expect an overview of common planning algorithms used in robotics, such as Dijkstra's and A-star, to provide a motivating context. Rather than focus on time saving tricks specific to a particular environment or robot morphology, we will instead focus on getting the most out of these algorithms by way of leveraging cache-friendly design of requisite graph and memoization structures; and memory layouts. In particular, we will focus on achieving these results using common C++ STL facilities; and compile-time facilities to promote generic design, where possible. Finally, we will provide comparisons between naive and cache-optimized implementations; and guides for effectively profiling these algorithms for system-specific tuning purposes.

Speakers
avatar for Brian Cairl

Brian Cairl

Staff Software Engineer, Tortuga AgTech
Brian is a robotics software engineer and daily user of the C++ language. They attended The Polytechnic University of NYU where they studied electrical engineering with a concentration in robotics and controls. Upon graduation, Brian worked at Fetch Robotics, a robotics startup based... Read More →


Monday October 2, 2023 16:45 - 17:45 MDT
Maple 3/4/5

16:45 MDT

"Distributed Ranges": A Model for Building Distributed Data Structures, Algorithms, and Views
Writing programs that run on clusters of computers is notoriously difficult. Distributed data structures can simplify this problem by automatically splitting up data across multiple memory spaces or nodes in a distributed memory program. Algorithms in most distributed data structures libraries, however, are not generic, but operate only on a specific data structure. In this work, we discuss how modern C++ features like concepts, customization points, and the ranges library can be used to support generic algorithms and views that can interoperate with multiple distributed data structures. We first discuss background in distributed computing and distributed data structures, including common techniques used to create high-level distributed data structures. We then show how customization point objects and concepts can be used to allow the implementation of generic algorithms that can be used with any distributed data structure as long as it fulfills a "distributed range" concept. We then show how to implement views that satisfy this concept, allowing algorithms to operate on lazily evaluated views of distributed data structures. Finally, we discuss two implementations of this model, for multi-GPU and multi-node programs, as well as performance considerations when running on state-of-the-art HPC systems.

Speakers
avatar for Benjamin Brock

Benjamin Brock

Research Scientist, Intel Corporation
Benjamin Brock is a research scientist at Intel Labs, where he works on building libraries, tools, and algorithms for high-performance computing. In 2022, he completed a PhD in distributed data structures at UC Berkeley. His work focuses primarily on building cross-platform data structures... Read More →


Monday October 2, 2023 16:45 - 17:45 MDT
Cottonwood 2/3

16:45 MDT

C++20 Modules: The Packaging and Binary Redistribution Story
C++ modules are one of the most talked-about features introduced in C++20, but are still not widely in use. One of the biggest promises of C++ modules is to reduce overall compilation times by removing the need to have the compiler parsing the same include files across a big number of translation units. However, despite available compiler implementations, modules are still not generally in use. Why is this?

When put into practice, C++ modules introduce a dependency in the order in which translation units are built: in order to build a source file that contains a module import statement, the source file that exports the name module needs to have been compiled into a binary module interface beforehand. This calls for compilers and build systems to work together to correctly derive the order in which source files need to be compiled.

To overcome this, paper P1689 has been proposed for compilers to report the dependencies between source files, so that build tools (e.g. CMake and Ninja) can use this information to derive the correct build order. However, the currently available implementations have limitations and where all the source files that export module definitions should be visible by the same build.

How does this work in scenarios where we have dependencies (e.g. third-party) that are provided externally to the current build system? We have become accustomed to a model where a “binary” package contains, at the very least, header files (.h/.hpp) for the compiler, and libraries (.a/.so/.lib/.dylib) for the linker. How do modules fit into this model when it comes to installing and distributing prebuilt binaries? Now more files are required on the consuming side: the compiled binary module interface, and the corresponding module interface source file.

This talk will review the current state of modules in C++, by presenting the experience currently provided by the most recent versions of the relevant tools. Special focus will be put on the potential of using C++20 modules for external library dependencies, and how far we are from being able to consume external libraries using modules.

Speakers
avatar for Luis Caro Campos

Luis Caro Campos

Luis is a Electronics and Computer Engineer based in the UK, with previous experience as a C++ engineer in the field of Computer Vision and Robotics. With a passion to enable C++ engineers to develop at scale following modern DevOps practices. He is currently part of the Conan team... Read More →


Monday October 2, 2023 16:45 - 17:45 MDT
Cottonwood 8/9

18:30 MDT

Open Content: Dr. Walter E. Brown "Movie Night (part 1)"
Using video excerpts and short movies, we'll go on an entertaining journey exploring and celebrating the programming profession, allowing us to reflect on where we’ve come from, and what it is that makes our profession great.  Bring your own popcorn!

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 almost 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 →


Monday October 2, 2023 18:30 - 20:00 MDT
Cottonwood 2/3

18:30 MDT

Open Content: Jody Hagins - "Metaprogramming Bootcamp with Boost.Mp11" Day 1 of 3
This is intended as a fully interactive workshop-like setting with tutorials, examples, and live exercises, spread across multiple sessions so it is not singularly overwhelming.

We will gently cover the fundamental concepts by solving a number of Advent of Code 2022 problems at compile time, using Boost.MP11.

I gave a talk at C++Now earlier this year on a similar topic, but it was a pure lecture, and presented at an advanced and very quick pace.

This is intended to be a more gentle approach, with instruction, followed by exercises that you can solve alone or in groups, with live help from me and possibly others.

Advanced metaprogramming practitioners would likely enjoy this, but my intent is to help the many people who still see this side of C++ as a bit of black magic which they avoid.

Bring your laptop and modern C++ compiler.

Speakers
avatar for Jody Hagins

Jody Hagins

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 October 2, 2023 18:30 - 20:00 MDT
Cottonwood 8/9

20:30 MDT

Safety and Security for C++
ISO 26262

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 Bjarne Stroustrup

Bjarne Stroustrup

Professor, Columbia University
Bjarne Stroustrup is the designer and original implementer of C++ as well as the author of The C++ Programming Language (4th Edition) and A Tour of C++ (3rd edition), Programming: Principles and Practice using C++ (2nd Edition), and many popular and academic publications. He is a... Read More →
avatar for Andreas Weis

Andreas Weis

Woven by Toyota
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 Verena Beckham

Verena Beckham

VP of Safety Engineering, Codeplay Software
Verena Beckham is the VP of Safety Engineering at Codeplay Software. She helped initiate and is now the chair of the SYCL SC Working Group within Khronos, which is defining a version of SYCL that can be more easily safety-certified. Before becoming VP she was a compiler engineer... Read More →
avatar for Nevin  Liber

Nevin Liber

Nevin “🙂” Liber is a Computer Scientist in the ALCF (Argonne Leadership Computing Facility) division of Argonne National Laboratory, where he works on Kokkos and Aurora. He also represents Argonne on the SYCL and C++ Committees, the latter as Admin Chair, Vice Chair of LEWGI/SG18... 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 →


Monday October 2, 2023 20:30 - 22:00 MDT
Adams
 
Tuesday, October 3
 

08:00 MDT

Open Content: Ben Deane "A Grab-Bag of Useful Oddities"
C++ is full of oddities. Some of them turn out to be useful. In this session, we'll look at some things that are interesting, odd, sometimes useful, sometimes amusing, and not necessarily super-technical. Above all, we'll highlight the importance of play and curiosity in discovering things that can be filed away for possible later use. Amaze your friends and confound your enemies, as they say!

Speakers
avatar for Ben Deane

Ben Deane

Intel
Ben has been programming in C++ for this whole millennium. He spent just over 20 years in the games industry working for companies like EA and Blizzard; many of the games he worked on used to be fondly remembered but now he’s accepted that they are probably mostly forgotten. After... Read More →


Tuesday October 3, 2023 08:00 - 08:45 MDT
Maple 3/4/5

09:00 MDT

Back to Basics: Algorithms
“There was never any question that the [standard template] library represented a breakthrough in efficient and extensible design” (Scott Meyers, Effective STL, 2008)

Originally developed as part of the Standard Template Library (STL), algorithms have become a must-know tool for every C++ developer. They increase productivity, significantly reduce bugs, and improve maintainability. This talk explains why and how algorithms do this. Additionally, it demonstrates why they are an amazing example for good, extensible software design.

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 October 3, 2023 09:00 - 10:00 MDT
Maple 3/4/5

09:00 MDT

File I/O for Game Developers: Past, Present, and Future
If you have played a game on a computer in the last few decades, you will most likely have encountered a loading screen. This is used to advertise to the player that, among other things, data is being loaded from a storage device into the game. But why does this exist, why does it take so long, and how can we improve matters for the player?

In this talk we will discover the history of games and their development environments, the relationship between address space, RAM and storage hardware, how C++ abstracts file I/O and why it might not be the best fit for game developers, how a 64-bit address space changes everything, how #embed will change everything, and how C++29 (yes, 29) may upset the applecart yet again.

Although this talk is aimed at game developers who are often Windows programmers, it is relevant to anyone who has to read large amounts of data from local storage. Expect tales of woe, discovery and jubilation as I describe every surprising little thing I've learned about file I/O over the past 40 years and how C++ is heading for a great future in games.

Speakers
avatar for Guy Davidson

Guy Davidson

Head of Engineering Practice, Creative Assembly
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 →


Tuesday October 3, 2023 09:00 - 10:00 MDT
Cottonwood 8/9

09:00 MDT

Express Your Expectations: A Fast, Compliant JSON Pull Parser for Writing Robust Applications
There are, by now, several well-established C++ JSON libraries, for example, boost.JSON, rapidjson, and simdjson. C++ developers can choose between DOM parsers, SAX parsers, and pull parsers. DOM parsers are by design slow and use a lot of memory, SAX parsers are clumsy to use and the only well-known pull parser simdjson does not fully validate JSON documents and also has high non-constant memory usage. Our open-source JSON parser fills the gap between the existing parser libraries. It is a fully validating, fast, pull parser with O(1) memory usage.

Its main contribution, however, is the API design. All existing parsers verify that a parsed document is valid JSON. But most applications require the data to have a specific structure, for example, that an object has specific required keys while other keys may be optional. Their associated values in turn are expected to be, for example, strings, objects or arrays. Currently, developers need to implement their own checks and their own error handling on top of the existing parser APIs.

Our API forces developers to express these semantical constraints, providing automatic error handling in return. The resulting code concisely documents the required JSON structure and always handles errors correctly. We have found this to be extremely useful in practice.

This talk will show the JSON parser API in practice, compare it to the established parsers, and will demonstrate some elegant generic programming C++ techniques to beginners and intermediate C++ developers.

Speakers
avatar for Jonathan Müller

Jonathan Müller

Software Engineer, think-cell
Jonathan is a library developer at think-cell. In his spare time, he works on various C++ open source libraries for memory allocation, cache-friendly containers, or parsing. He also blogs at foonathan.net and is a member of the C++ standardization committee.


Tuesday October 3, 2023 09:00 - 10:00 MDT
Cottonwood 2/3

09:00 MDT

Exceptionally Bad : The Story on the Misuse of Exceptions and How to Do Better
Exceptions were originally heralded as a new modern way to handle errors. However the C++ community is split as to whether exceptions are useful or should be banned outright. It has not helped the pro-exception lobby that in their enthusiasm to embrace exceptions, a lot of code has been written that puts exceptions in a bad light.
In this talk, We will present the original intent/history of exceptions and a brief overview of how exception mechanics work and how they circumvent the usual stack return mechanism to set the stage. we will then examine the philosophy of using exceptions and then the many cases of exception misuse including resource management, retries, hierarchies, data passing and control flow to name but a few.
For each case, we will then suggest better ways to handle each specific situation. In many cases, exceptions are often dropped in favor of some other more appropriate paradigm.
Finally, we will introduce situations that can truly benefit from exceptions and what a model exception class might look like.

Speakers
avatar for Peter Muldoon

Peter Muldoon

Senior 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 as a senior Engineering Lead. A consultant for over 20 years prior to joining Bloomberg, Peter has worked on a broad range of projects and code bases... Read More →


Tuesday October 3, 2023 09:00 - 10:00 MDT
Adams

10:30 MDT

Tuesday Plenary: Bret Brown, Bill Hoffman "Libraries: A First Step Toward Standard C++ Dependency Management"
Prebuilt libraries have existed for decades… they even predate C++! After all these years, techniques to use prebuilt libraries are still ad hoc and difficult to maintain. A root cause of this variety of techniques is the variety of things that are C++ libraries: header-only libraries, statically-linked archives, dynamically-linked binaries, and so on. The consuming projects need to build against these libraries in consistent ways or risk unproductive workflows – and potentially, even catastrophic failure in production environments. This lack of convergence creates enormous interoperability problems across broad portions of the worldwide programming ecosystem, not just the C++ parts of it.

This talk will explore the complexities of defining what is a “C++ library.” It will then present the joint work of Kitware, Bloomberg, and others toward a preliminary design for creating initial standards for dependency management in C++ – metadata files to describe prebuilt libraries. A roadmap for maturing the design will also be shared, including proposing a standard definition for C++ libraries, building on previous proposals such as P1313: Package Specification (https://wg21.link/P1313).

This talk is intended for anyone who produces, maintains, or consumes C++ libraries. Special knowledge of C++ tooling, build systems, or package managers is not required.

Speakers
avatar for Bill Hoffman

Bill Hoffman

Kitware
Mr. Hoffman is a founder of Kitware and currently serves as Chairman of the Board, Vice President, and Chief Technical Officer (CTO). He is the original author and lead architect of CMake, an open source, cross-platform build and configuration tool that is used by hundreds of projects... Read More →
avatar for Bret Brown

Bret Brown

Software Engineer, Bloomberg
Bret Brown is the lead of the C++ Infrastructure team for Bloomberg's Developer Experience department where he focuses on build systems, packaging standards, compilation toolchain support, and other ecosystem aspects for C++. As part of that role, he is also active in the ISO C... Read More →


Tuesday October 3, 2023 10:30 - 12:00 MDT
Adams

12:00 MDT

Author Book Signing: Nicolai Josuttis: "C++20 - The Complete Guide"
Author: Nicolai Josuttis, "C++20 - The Complete Guide"
In our bookstore or bring your own from home

Other books by Nico




Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Tuesday October 3, 2023 12:00 - 12:30 MDT
‍Adams Foyer

12:30 MDT

Open Content: Erez Strauss - "Lockless Atomic Multi Producer Multi Consumer Queue"
Queues are fundamental data structures. In trading systems and other environments there are strict latency requirements. These requirements prevent using many of the existing queues implementations. In this presentation a new queue implementation, which is used in production system, will be presented which enables multi-producer, multi-consumers (MPMC), lockfree operation. The queue requires C++17 and hardware support for Compare and Swap on double width word, 16 bytes.

This queue efficiently delivers messages from N producers to M consumers. The design of the internals of the queue, both memory layout and algorithm will be presented in details, including the hardware requirements of this implementation, focusing on both bandwidth and latency.

We will explore how threads collaborate to complete ongoing operations and ensure efficient message delivery. A comparison of this queue implementation with other alternatives, evaluating their performance will be presented.
Finally, we will discuss potential future work and areas for improvement and collaboration around this project, like porting to additional CPU architectures like Arm, RISC-V.

The queue code is available on Github, the slides will be available too.

Speakers
avatar for Erez Strauss

Erez Strauss

Sr Software Engineer
Erez Strauss worked in Banks and Hedge Funds while focused on low latency systems.


Tuesday October 3, 2023 12:30 - 13:30 MDT
Cottonwood 8/9

12:30 MDT

Open Content: Jason Turner "C++ Conversation: Think You Know std::move?"
Nearly 100% of the time I see std::move used, it's either:
* incorrect
or
* inefficient

In this lunchtime conversation we will look at std::move, how it's used wrong, how to use it correctly, and how to avoid using it.

Expect a casual, relaxed, fun, interactive setting to spend your lunch time!

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Tuesday October 3, 2023 12:30 - 13:30 MDT
Maple 3/4/5

12:30 MDT

Open Content: Jubin Chheda: Improving fleet-wide efficiency by addressing common bad performance patterns
Embark on an extraordinary journey with me as I unveil the incredible potential of static code analysis, statistical profiling, and collaborative approaches in tackling suboptimal code patterns and unearthing hidden savings worth hundreds of millions of dollar, often clubbed with driving engaging wins in the tens of millions. In this talk, I will delve into the specific techniques we at Meta employed on a vast commercial codebase and will go over a few real-world examples. I will cover the tools, a few patterns and a couple social engineering aspects that helped us along the way - which can be applied at any commercial enterprise. Some of the patterns are expensive object copies, std::vector reallocations, map/set rehashes, and improper container operations.

Speakers
avatar for Jubin Chheda

Jubin Chheda

Software Engineer, Meta Platforms (Facebook)
Jubin Chheda is Software Engineer at Meta responsible for Facebook Feed, where he leads efforts across the Facebook app to enhance user satisfaction and engagement. With a passion for driving user engagement and commercial revenue growth, Jubin's main focus is implementing surgical... Read More →


Tuesday October 3, 2023 12:30 - 13:30 MDT
Cottonwood 2/3

13:30 MDT

Signing Event: Herb Sutter: Bobble Head or Bring your own from home or Your ISO Standard
Author: Herb Sutter,  bring your own from home
Sorry the book store is sold out of Herb's books.
Or get a Herb Bobble Head from the store to have signed.
Or bring your copy of the ISO C++ Standard to have signed.

Books by Herb

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++.



Tuesday October 3, 2023 13:30 - 14:00 MDT
‍Adams Foyer

14:00 MDT

Back to Basics: Iterators
One key success factor of C++ was the introduction of the Standard Template Library (STL) bringing together containers/ranges and algorithms using iterators as glue API to iterate over elements of collections.

This talk will present the basics of the design of iterators, the various consequences, remarkable corner cases, and what this means when using ranges and views as introduced with C++20.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Tuesday October 3, 2023 14:00 - 15:00 MDT
Cottonwood 8/9

14:00 MDT

Lock-free Atomic Shared Pointers Without a Split Reference Count? It Can Be Done!
Smart pointers such as std::unique_ptr and std::shared_pointer are the recommended way to manage dynamic memory in C++ programs. At least, that is what we try to teach people. But what if you are writing parallel and concurrent code, can we will make use of std::shared_ptr? Yes, but only if concurrent modifications are done via a std::atomic<std::shared_prt>! Atomic smart pointers were recently introduced to the C++20 standard for this purpose, however, existing implementations in major standard libraries are not lock-free. This makes them impractical for applications with heavy concurrency, as their performance degrades badly.

There are several well known implementations of a lock-free atomic shared pointer, such as Folly's, and Anthony William's which is included in a commercial library. These implementations and several others are all based on the so-called "split reference count" technique, which solves the problem of atomically modifying the reference count and the object pointer when performing an update operation. This technique is difficult to make fully portable however, since it either relies on a double-word compare-exchange operation, or packs a reference count inside the "unused" high-order bits of the pointer.

In this talk, we describe a strategy for implementing lock-free atomic shared pointers without a split reference count. The solution is surprisingly simple and elegant, as it does not require adding any fields to the shared pointer or atomic shared pointer and does not hide anything inside the bits of the pointer. Under the hood, it makes use of hazard pointers and deferred reclamation. Since hazard pointers are on track for inclusion in C++26, this implementation is timely, simple to implement with nearly-standard C++, and achieves excellent performance.

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 →


Tuesday October 3, 2023 14:00 - 15:00 MDT
Maple 3/4/5

14:00 MDT

The Au Library: Handling Physical Units Safely, Quickly, and Broadly
We present Au: a new open-source C++ units library, by Aurora.  If you've rejected other units libraries because they couldn't meet your needs, check out Au (pronounced, "ay yoo").  It combines cutting-edge developer experience (fast compilation, simple and readable compiler errors) with wide accessibility (C++14 compatibility, single-header delivery option).  You can be up and running with Au in your project --- in any build system --- in less time than it takes to read this abstract!

We'll orient the viewer by providing a decision framework for choosing a units library, and using this framework to compare several leading options. We'll also see how these libraries influence each other. For example, Au has several compelling features inspired by other libraries, such as the concise and readable compiler errors of mp-units, and the frictionless single-header delivery of the nholthaus library --- in fact, Au is the first library to provide both these features at once. Au has also provided many new features of its own, including: fully unit-safe APIs; an adaptive "overflow safety surface" that governs unit conversions; on-the-fly composition for units and prefixes; smart, unit-aware rounding and inverse functions; and more.

Finally, Au has a notably low barrier to migration --- in either direction.  We'll explain how to set up a correspondence between Au and any other units library.  Even though neither library knows about the other, you'll be able to pass Au-typed variables to APIs which take the other library's types, and vice versa.  This doesn't just make it easy to switch to Au; it promises a smooth upgrade path to any better library which comes along later (such as a future C++ standard units library).  With such a low barrier to entry, give Au a try, and find out what it feels like to get effortlessly correct handling for all your physical quantities!

Speakers
avatar for Chip Hogg

Chip Hogg

Staff Software Engineer, Aurora Innovation
Chip Hogg is a Staff Software Engineer on the Motion Planning Team at Aurora Innovation, the self-driving vehicle company that is developing the Aurora Driver. After obtaining his PhD in Physics from Carnegie Mellon in 2010, he was a postdoctoral researcher and then staff scientist... Read More →


Tuesday October 3, 2023 14:00 - 15:00 MDT
Cottonwood 2/3

14:00 MDT

Expressing Implementation Sameness and Similarity in Modern C++
Polymorphism is among the most widely discussed introductory topics in software engineering. Often couched in a vague context of code reuse, much of this introductory focus nonetheless revolves around interface similarity. More advanced discussions of code reuse in software engineering typically revolve around general topics like the maintainability cost of code coupling, but usually avoid discussing the merits of advanced language-specific mechanisms for code reuse. Furthermore, very little is made of the information loss and cognitive load associated with poor expression of sameness in implementation, regardless of interface coupling concerns.

In this talk, we will examine the wide spectrum of tools for expressing “sameness” in modern C++. Beyond introductory “is-a” inheritance and runtime polymorphism, we will delve into templates, concepts, mixins, CRTP, C++23’s “deducing this,” and a number of more advanced techniques on the spectrum from generic programming to template metaprogramming. We will explore the long-term software engineering costs and benefits of each of these mechanisms. In each case, we will discuss important trade-offs, such as runtime and compile-time overhead, mechanistic complexity versus “sameness” information loss, code coupling, maintainability, and the ability to adapt to evolving implementation needs over time. Finally, we will discuss mechanisms for expressing “sameness” that are difficult or impossible in modern C++—such as dependency injection and aspect-oriented programming—but that are commonplace in other languages. We will delve into both the minimal and ideal language features that would enable these paradigms to become a part of the C++ toolbox, and we will discuss the outlook for the inclusion of such features in future versions of standard C++.

Speakers
avatar for Daisy Hollman

Daisy Hollman

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 →


Tuesday October 3, 2023 14:00 - 15:00 MDT
Adams

15:15 MDT

Leveraging a functional approach for more testable and maintainable ROS 2 code
In the field of robotics, Robot Operating System (ROS) is the de facto middleware of choice across academia and industry. As most code examples in ROS utilize an object-oriented approach, challenges can arise when writing tests for production code due to the boilerplate code ROS introduces, often leading to unexpected bugs or flaky tests. This talk explores ways to mitigate those issues by using a functional approach. By adopting this approach, we can minimize the impact that ROS or other middleware has on your code, preventing it from becoming tightly coupled and brittle.

Attendees can expect an overview of ROS 2 and the conventional programming approach typically associated with it. We'll delve into how tests are usually constructed and pinpoint potential sources of bugs and flakiness. Following this, we will introduce a functional approach to writing test code. By the end of this talk, attendees will learn an alternative method of architecting their ROS 2 code and also understand how this approach can lead to more robust, maintainable, and testable code.

Speakers
avatar for Bilal Gill

Bilal Gill

Bilal Gill graduated from the Polytechnic Institute of NYU where his focus was in controls and dynamic systems.Since then, he has worked as a electrical systems engineer, modeling and simulation engineer, and now a robotics engineer.


Tuesday October 3, 2023 15:15 - 16:15 MDT
Cottonwood 8/9

15:15 MDT

std::linalg: Linear Algebra Coming to Standard C++
Many fields depend on linear algebra computations, which include matrix-matrix and matrix-vector multiplies, triangular solves, dot products, and norms. It's hard to implement these fast and accurately for all kinds of number types and data layouts. Wouldn't it be nice if C++ had a built-in library for doing that? Wouldn't it be even nicer if this library used C++ idioms instead of what developers have to do now, which is write nonportable, unsafe, verbose code for calling into an optimized Fortran or C library?

The std::linalg library does just that. It uses the new C++23 feature mdspan to represent matrices and vectors. The library builds on the long history and solid theoretical foundation of the BLAS (Basic Linear Algebra Subroutines), a standard C and Fortran interface with many optimized implementations. The C++ Standard Committee is currently reviewing std::linalg for C++26. The library already has two implementations that work with C++17 or newer compilers, and can take advantage of vendor-specific optimizations. Developers will see how std::linalg can make their C++ safer and more concise without sacrificing performance for use cases that existing BLAS libraries already optimize, while opening up new use cases and potential optimizations.

Speakers
avatar for Mark Hoemmen

Mark Hoemmen

Senior Architect, NVIDIA
Mark Hoemmen is a C++ software developer with a background in parallel computing and numerical linear algebra. He joined NVIDIA in spring 2022, and works remotely from Albuquerque, New Mexico, USA. He contributes to various open-source C++ libraries, including CUTLASS, a CUDA C... Read More →


Tuesday October 3, 2023 15:15 - 16:15 MDT
Adams

15:15 MDT

What's New in Visual Studio: CMake Debugger, Diagnostics Improvements, Video Games, and More
Another year of CppCon, another year of work on making Visual Studio a better IDE for everyone, no matter what platform you're targeting.

In this talk, we'll demonstrate the last year's work across the IDE, toolchain, vcpkg, and GitHub: leak sanitizer and advanced address sanitizer support for finding security holes, a host of tools for Unreal Engine, the new CMake Debugger, step-by-step macro expansion, and more. Catch up on improvements for highlights from previous years, such as Build Insights integration in Visual Studio and new tools for understanding complex template compilation errors

Come along to learn all about the latest in our tooling, and to get a peek into our future plans.

Speakers
avatar for David Li

David Li

Game Dev Product Manager, Microsoft
David Li is the Game Developer Product Manager at Visual Studio with 11 years of experience in the software industry. As a gamer himself, David is especially passionate about enhancing game developer productivity through improving tooling for Visual Studio and MSVC. In his free time... Read More →
avatar for Mryam Girmay

Mryam Girmay

Product Manager, Microsoft
Mryam Girmay is a Product Manager dedicated to boosting the productivity of Visual Studio. She has a background in embedded systems development. When it comes to hobbies, she loves painting, plays volleyball, reading books, and family/friends time.


Tuesday October 3, 2023 15:15 - 16:15 MDT
Maple 3/4/5

15:15 MDT

Why Loops End
When we write a loop in a program, we usually intend that each execution of the loop will eventually end. To meet that intention, we should understand the reasons why loops end, and, to give others confidence in our code, we should learn to communicate those reasons.

In this talk, I will examine the reasons why loops end, and present a scheme for expressing those reasons formally within the source code of a program, in a lightly extended version of C++. Starting from procedural first principles of stability of objects, substitutability of values, and repeatability of operations, I will show how reasons for loops to end can be expressed directly by the program’s flow of execution within the neighborhood of the loop.

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 currently assistant chair of the numerics study group of the C++ standardization committee. In her spare time, she studies mathematical logic, and wants... Read More →


Tuesday October 3, 2023 15:15 - 16:15 MDT
Cottonwood 2/3

16:45 MDT

More Ranges Please
Ranges are one of the major additions of C++20, in which our main abstraction for sequences shifted from iterator-pairs into full fledged concepts, allowing better composability, expressibility and safety when working with bounded and even unbounded one dimensional sequences of data. The fluent use of the pipe-operator gave us power to write complex functional-style algorithms which are both highly readable and perfomant. The ranges library, especially with some recent C++23 additions also better exposes us to the notion of 'range-of-ranges' and multi-dimentional spans, which weren't in focus of the STL in prior versions of the language.

One key feature of the STL since the last century was the large number of algorithms and building blocks which seemed woven together and gave us a vocabulary by which algorithms could be expressed with little need to work with raw loops.

Together with the introduction of ranges, the STL has also gained various range-based algorithms (as well as views and adapters), yet most of those algorithms were basic adaptations of the ones that are available in the iterator-pair model.

In a talk from 2002, the primary designer of STL described the process of gathering, currating and solidifying the algorithms in the STL circa 1998 (Stepanov: STL and its Design Principles). My talk aims to apply a similar process to the universe of C++20/C++23 ranges, and propose potential additions to our vocabulary when developing range-based algorithms.

In this talk, we will start with a relatively theoretical introduction of the values and merrits of writing software systems as libraries, and get an introduction to the ranges library as an example of a breakthrough library.
Then, we will go over a variety of algorithms which currently don't exist for ranges, describe their potential value, and discuss whether they can or should be added to the standard.

A few examples of algorithms which will be covered:

Algorithms for sorted ranges, such as take_between and histogram, ...
Algorithm for ranges-of-(sorted-)ranges, such as merge, set_union, set_intersection, ...
Algorithms which might require some helper data structures, such as histogram (for non sorted ranges)
Algorithms related to generation and processing of permutations, such as order.
As we go through the various examples, we'll discuss what might be good candidates for addition to the STL (and reference prior talks on the topic), the notion of sorted ranges, and hopefully leave the talk with a good desire to compose algorithms in the brave new world of ranges

Speakers
avatar for Roi Barkan

Roi Barkan

Istra Research
Professional software developer and architect since 2000, Roi's main focus throughout his career was on high performance and distributed systems, implementing complex and innovative algorithms. Roi is the SVP technologies of Istra Research, where he helps creating low latency financial... Read More →


Tuesday October 3, 2023 16:45 - 17:45 MDT
Adams

16:45 MDT

BehaviorTree.CPP: Task Planning for Robots and Virtual Agents
In this presentation, we will introduce BehaviorTree.CPP, a library that is becoming increasingly popular in robotics and used to implement Task Planning.
Behavior Trees are an alternative to Hierarchical Finite State Machines; this approach was originally used in the game industry.

In the first part of this presentation, we will teach what a Behavior Tree are and their advantages, when compared with Finite State Machines; we will also focus on the exclusive features that this library has, when compared to other open source alternatives.

In the second part, we will dive into the technical details of the implementation, in particular how we use design patterns such as Factory, Observer, Safe Type Erasure, Concurrency and even a custom embedded scripting language.

Speakers
avatar for Davide Faconti

Davide Faconti

Davide Faconti has worked in the last 20 in robotics.In his career, he worked on many domains: perception, manipulation, planning, low level hardware interfaces, humanoid robots design and locomotion, navigation... and more!He is currently a Staff Engineer and Robotic Architect at... Read More →


Tuesday October 3, 2023 16:45 - 17:45 MDT
Cottonwood 8/9

16:45 MDT

Taro: Task graph-based Asynchronous Programming Using C++ Coroutine
Task graph computing system (TGCS) plays an essential role in high-performance computing. Unlike loop-based models, TGCSs encapsulate function calls and their dependencies in a top-down task graph to implement irregular parallel decomposition strategies that scale to large numbers of processors, including manycore central processing units (CPUs) and graphics processing units (GPUs). As a result, recent years have seen a great deal amount of TGCS research, just name a few: Taskflow, oneTBB, Kokkos-DAG, and HPX. However, one common challenge faced by TGCSs is the issue of synchronization within each task. For instance, in scenarios where a task involves executing GPU operations, a CPU thread typically needs to wait until the GPU completes the operations before proceeding further. This synchronization overhead can hinder performance and limit the overall scalability of TGCSs.

The introduction of C++ coroutines in C++20 has revolutionized asynchronous programming, offering improved concurrency and expressiveness. However, integrating TGCS with C++ coroutines presents several challenges. Firstly, existing TGCS solutions are not compatible with C++ coroutines, as the coroutine paradigm deviates from traditional C++ programming. This incompatibility makes it difficult to seamlessly incorporate coroutines into existing TGCS frameworks. Secondly, C++ coroutine programming is extremely difficult and requires a solid understanding of the underlying concepts and mechanisms. The introduction of a new paradigm adds complexity and a steep learning curve for developers. Lastly, while C++ coroutines offer a powerful mechanism for managing asynchronous operations, designing and implementing an efficient scheduler to leverage their capabilities remains challenging. To fully exploit the benefits of C++ coroutines, there is a need for a specialized scheduler that can handle large numbers of coroutines and make optimal use of hardware resources.

To address these challenges, we present Taro: Task-Graph-Based Asynchronous Programming using C++ Coroutine. Taro offers a task-graph-based programming model for C++ coroutines, simplifying the expression of complex control flows and reducing development complexity. Additionally, Taro incorporates an efficient work-stealing scheduling algorithm tailored for C++ coroutines, minimizing unnecessary context switches, CPU migrations, and cache misses.

In this session, I will introduce Taro's programming model and demonstrate how Taro can enable efficient multitasking between CPU and GPU tasks, avoiding blocking wait on CPU threads for GPU tasks to finish. I will show the example code for using Taro. Finally, I will demonstrate how our solution can improve the performance of a real-world RTL simulation workload and microbenchmarks. Taro will be open-source and available on GitHub.

Speakers
avatar for Dian-Lun Lin

Dian-Lun Lin

PhD candidate, University of Wisconsin-Madison
I’m a fourth-year Ph.D. student at the Department of Electrical and Computer Engineering at the University of Wisconsin-Madison. My research interests focus on parallel computing and GPU computing using C++ and CUDA. During my recent three-year Ph.D. studies, I have published three... Read More →


Tuesday October 3, 2023 16:45 - 17:45 MDT
Cottonwood 2/3

16:45 MDT

A Common Package Specification: Getting Build Tools to Talk to Each Other: Lessons Learned From Making Thousands of Binaries Consumable by Any Build System
There is a lot of previous work and proposals for a “Common Package Specification”, but there has been little implementation experience with real-world production usage at scale with feedback from diverse groups, something critical for such a specification to be technically viable. Some mechanisms like CMake exported targets/config files are becoming more popular with the continuous adoption of CMake, and pkg-config (.pc) files are also a popular mechanism in GNU systems, but those are still tool-specific and it is still not possible nowadays to consume pre-built binaries in a generic way by every build system.

Since the Conan C++ package manager was released 7 years ago, one of its main design goals was to be tool agnostic and let any package created with any build system to be usable by any other build system. This talk will describe the abstraction that has been and is widely used by +1500 open source Conan packages covering the vast majority of popular C and C++ open source libraries, and thousands of teams using it in production for their own private packages. Based on this experience and the lessons learned, the talk will describe how a “Common Package Specification” should look like:

- Representation of the different folders necessary to define a package: include directories, library directories, binary directories, build files directories, etc.
- How paths should be relative so binary redistribution and re-usage in other machines is possible.
- Representation of the different preprocessor definitions, compiler flags, sysroot.
- Representation of “components”, when a package contains more than one library that can be optionally created, optionally consumed, and includes relationships between components.
- Representation of custom build-system “properties”, that allows to customize some behaviors for specific build systems.
- Achieving scalability by decoupling the binary requirements from the consuming specification (this talk focus only on the second one)

While this basic “Common Package Specification” can be easily represented and serialized in a file, like json or yaml that travels together with the package, there are some implementations challenges that will be discussed:

- How such a generic package specification maps to the existing popular build systems, including CMake, MSBuild, Autotools, Meson, etc, and how this mapping can be leveraged for faster adoption.
- In some cases, the same binary can provide different information to consumers like different preprocessor directives, based on some user configuration. How could this problem be solved with the typical declarative syntax of formats like json or yaml?
- How the packages and the “Common Package Specification” files are found and used by the build system?
- Is it possible to “consume” a package while it is still under development, so it doesn’t have the artifacts to consume in typical “include”, “lib” folders, but in a developer “source” layout?
- What happens at runtime? Beyond the common PATH, LD_LIBRARY_PATH, etc, some packages need to have defined some environment variables to correctly work. Can this information be included in the “Common Package Specification” too?
- Common operations over specification files, like aggregation of components or merging (in the right order, following the topological order of the graph), necessary for build-systems like autotools or NMake.


This talk will summarize years of real world experience contributing towards the goal of having a “Common Package Specification” for C and C++, that will allow full interoperability between build systems and package managers, one of the most desired and demanded functionalities in the C++ tooling ecosystem.

Speakers
avatar for Diego Rodriguez-Losada Gonzalez

Diego Rodriguez-Losada Gonzalez

Lead Architect, JFrog
Diego Rodriguez-Losada‘s passions are robotics and SW engineering and development. He has developed many years in C and C++ in the Industrial, Robotics and AI fields. Diego was also a University (tenure track) professor and robotics researcher for 8 years, till 2012, when he quit... Read More →


Tuesday October 3, 2023 16:45 - 17:45 MDT
Maple 3/4/5

18:00 MDT

Hudson River Trading Happy Hour
Join Hudson River Trading's Happy Hour on OCT-3 for an evening of food, drinks, great conversation, and more! Fill out the interest form HERE.

Tuesday October 3, 2023 18:00 - 20:00 MDT
Mountain Pass Sports Bar

18:30 MDT

Open Content: Dr. Walter E. Brown "Movie Night (part 2)"
Using video excerpts and short movies, we'll continue on an entertaining journey exploring and celebrating the programming profession, allowing us to reflect on where we’ve come from, and what it is that makes our profession great.  Bring your own popcorn!

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 almost 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 →


Tuesday October 3, 2023 18:30 - 20:00 MDT
Cottonwood 2/3

18:30 MDT

Open Content: Jody Hagins - "Metaprogramming Bootcamp with Boost.Mp11" Day 2 of 3
This is intended as a fully interactive workshop-like setting with tutorials, examples, and live exercises, spread across multiple sessions so it is not singularly overwhelming.

We will gently cover the fundamental concepts by solving a number of Advent of Code 2022 problems at compile time, using Boost.MP11.

I gave a talk at C++Now earlier this year on a similar topic, but it was a pure lecture, and presented at an advanced and very quick pace.

This is intended to be a more gentle approach, with instruction, followed by exercises that you can solve alone or in groups, with live help from me and possibly others.

Advanced metaprogramming practitioners would likely enjoy this, but my intent is to help the many people who still see this side of C++ as a bit of black magic which they avoid.

Bring your laptop and modern C++ compiler.

Speakers
avatar for Jody Hagins

Jody Hagins

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.


Tuesday October 3, 2023 18:30 - 20:00 MDT
Cottonwood 8/9

18:30 MDT

Open Content: Pusz, Hogg, Reverdy, Michaels - Towards std::quantity
Open Content discussion session about the physical quantities and units library. We will learn where we are right now, discuss potential language features needed to improve the final design, and, if time allows, provide some plans for standardization.

Among panelists, you will find:
Mateusz Pusz - an author of mp-units library
Chip Hogg - an author of Aurora Units (Au) library
Vincent Reverdy - a member of the ISO C++ Committee for a long time involved in the physical units standardization process
Roth Michaels - an advanced user of physical quantities and units libraries

The above list is not a closed set. If you will be at CppCon and would like to participate in this event as a panelist, don't hesitate to contact Mateusz Pusz.

The session will start with a 1-hour long lecture by Mateusz Pusz on how Modern C++ enables exciting features and attractive new design possibilities in mp-units V2. The presented library pushes the boundaries of Modern C++ interfaces. Mateusz will present novel ways of using C++ templates benefiting from C++20 and C++23 features. We will see how concepts and values of class types used as non-type template parameters (NTTPs) can improve the interfaces in modern libraries. In the end, will present some potential C++ language features that could be helpful to improve the design of this and similar libraries and increase the consistency of the C++ language itself.

After the lecture, we will have a 30-minute open Q&A session with all the panelists.

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 Chip Hogg

Chip Hogg

Staff Software Engineer, Aurora Innovation
Chip Hogg is a Staff Software Engineer on the Motion Planning Team at Aurora Innovation, the self-driving vehicle company that is developing the Aurora Driver. After obtaining his PhD in Physics from Carnegie Mellon in 2010, he was a postdoctoral researcher and then staff scientist... Read More →
avatar for Vincent Reverdy

Vincent Reverdy

Researcher, CNRS
Vincent Reverdy is a Full Researcher in Computer Science and Astrophysics at French Center for Scientific Research (CRNS) and located at the Annecy Laboratory for Particle Physics (LAPP) in the French Alps. He also is a member of the French delegation to the C++ Standards Committee... Read More →
avatar for Roth Michaels

Roth Michaels

Principal Software Engineer, Native Instruments
Roth Michaels is a Principal Software Engineer at Native Instruments, an industry leader in real-time audio software for music production and broadcast/film post-production. In his current role he is involved with software architecture and bringing together three merged engineering... Read More →


Tuesday October 3, 2023 18:30 - 20:00 MDT
Maple 3/4/5

20:30 MDT

Fireside Chat with the Committee
Bring your questions! This panel of representative members of the C++ standards committee is ready to discuss everything about C++23 and what to look forward to in Standard C++ in the coming years.

Besides C++’s creator, the panelists include the current leaders of key subgroups. These leaders are responsible for language and library evolution, and topics like compile-time programming, real-time/embedded systems, AI, and teaching as the community starts to absorb all the new features in C++20.

The panel also includes representation of fresh forward-looking thinking with the heads of some of the newest national bodies to join in and participate in ISO C++.

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++.
avatar for Bjarne Stroustrup

Bjarne Stroustrup

Professor, Columbia University
Bjarne Stroustrup is the designer and original implementer of C++ as well as the author of The C++ Programming Language (4th Edition) and A Tour of C++ (3rd edition), Programming: Principles and Practice using C++ (2nd Edition), and many popular and academic publications. He is a... Read More →
avatar for Nina Ranns

Nina Ranns

The Standard C++ Foundation
Nina Ranns has been a member of the C++ standard committee since 2013, focusing mostly on the core part of the language, and committee secretary since 2018. Throughout her career she has worked for Siemens, Motorola, Datasift, and Symantec on everything from parts of the UMTS network... 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 Inbal Levi

Inbal Levi

Milennium Management, Standard C++ Foundation
​Inbal Levi is a Lead Software Engineer at Millennium (MPGC Services Ltd) with a passion for high performance, readability, compilers, language, and software design.She is an active member of the ISO C++ Standards Committee as Library Evolution Work Group Chair, and as the ISO C... 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 Daisy Hollman

Daisy Hollman

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 Pablo Halpern

Pablo Halpern

President, Halpern-Wight, Inc.
Pablo Halpern is a freelance software developer and consultant. He has been programming in C++ since 1989 and has been a member of the C++ Standards Committee since 2007. His main contributions to the C++ Standard has been in the area of parallel and vector programming, and he is... Read More →


Tuesday October 3, 2023 20:30 - 22:00 MDT
Adams
 
Wednesday, October 4
 

08:00 MDT

Open Content: Luke Valenty - "Safe Arithmetic: Enforce Integer Operation Correctness at Compile-time"
Safe Arithmetic is an open-source library from Intel designed to eliminate common and dangerous errors related to integer operations in C++20 and higher. It does this by enforcing requirements on the values of integers and tracking those requirements across operations at compile-time. Violations of these requirements fail compilation.

This library builds on the work of previous libraries like Boost's own Safe Numerics by adding a rich requirements DSL, proofs of correctness, concepts, and algorithms to ease common difficulties with similar libraries.

This session will introduce the Safe Arithmetic library, showcase its features, and show attendees how to take advantage of it in their everyday work.

Speakers
avatar for Luke Valenty

Luke Valenty

FW Architect, Intel
Luke Valenty is a senior firmware engineer at Intel working on power management. He utilizes compile-time programming techniques to improve correctness and runtime efficiency of his team's code.



Wednesday October 4, 2023 08:00 - 08:45 MDT
Cottonwood 8/9

09:00 MDT

Back to Basics: Initialization
C++ has many ways to initialize objects, and even experienced C++ programmers often have difficulty remembering exactly what each one means. For example, which constructor of T does each of the following statements invoke?

T t1(1, 2, 3);
T t2{4, 5, 6};
T t3 = t2;

Moreover, the context of the initialization can affect how the compiler interprets certain constructs. As such, we often have difficulty deciding which form of initialization to use. Choosing a form of initialization is especially difficult when we don’t know the exact type of the object that we’re initializing (i.e., when the type of the object is a template type parameter).

In this session, we’ll explore the similarities and differences among each form of C++ initialization and how the initialization rules have changed over time. Focusing on the common elements, we’ll see how C++’s initialization rules are (while not simple) not quite as complex as they might first appear. We’ll see how the Standard Library chooses which form of initialization to use and how that affects similar code that you might write yourself. We’ll also discuss how you can design your classes to make them easy to use in light of the initialization rules.

You’ll leave this session with a clearer understanding of exactly what each form of initialization means. With this knowledge, you’ll be better able to decide when each form of initialization suits your needs, which will help you write code that’s more expressive, robust, and maintainable.

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates
Ben Saks is the chief engineer of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Ben has represented Saks & Associates on the ISO C++ Standards committee as well as two of the committee’s study groups: SG14 (low-latency... Read More →


Wednesday October 4, 2023 09:00 - 10:00 MDT
Maple 3/4/5

09:00 MDT

Six Ways for Implementing Math Expressions Calculator
The tradeoffs involved in using runtime polymorphism, based on virtual functions, versus static polymorphism, which relies on Templates, are widely discussed. In this presentation, we aim to delve into this subject by demonstrating a straightforward example of creating a Math Expression Calculator. We will begin with examining the basic pointer-based polymorphism, moving to using smart pointers, comparing the usage of unique_ptr vs. shared_ptr, then explore templates and variadic templates while going through additional topics such as templates specialization, constexpr, type traits, C++20 concepts and more.
The talk presents the multi-paradigm power of C++ and is relevant for any C++ developer who is considering different implementation approaches for modeling the different behavior of entities.

Speakers
avatar for Amir Kirsh

Amir Kirsh

Teacher, Dev Advocate, Academic College of Tel-Aviv-Yafo and Incredibuild
Amir Kirsh is a C++ lecturer at the Academic College of Tel-Aviv-Yaffo and a visiting lecturer at Stony Brook 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... Read More →


Wednesday October 4, 2023 09:00 - 10:00 MDT
Cottonwood 2/3

09:00 MDT

Noexcept? Enabling Testing of Contract Checks
Should `noexcept` be part of your function's contract? A function's *contract* is the set of pre-conditions promised by the the caller and the set of post-conditions promised by the function itself, including whether or not it throws an exception. Naively, then, it would seem that `noexcept` is a good way to indicate that your function does not throw when called in contract, but things are not so simple. In this talk, we'll review the original purpose of the `noexcept` specifier and the `noexcept` operator. We'll look at how runtime contract checks can be tested and how `noexcept` interferes with such testing. Along the way, we'll touch on the proposed contract-checking feature in C++26, eventually arriving at an alternative exception-specification annotation that would mesh far better with contract checking than `noexcept` currently does.

Speakers
avatar for Pablo Halpern

Pablo Halpern

President, Halpern-Wight, Inc.
Pablo Halpern is a freelance software developer and consultant. He has been programming in C++ since 1989 and has been a member of the C++ Standards Committee since 2007. His main contributions to the C++ Standard has been in the area of parallel and vector programming, and 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 →


Wednesday October 4, 2023 09:00 - 10:00 MDT
Cottonwood 8/9

09:00 MDT

A Journey Into Non-Virtual Polymorphism
Join me on an introductory journey into polymorphism that doesn't use class inheritance and virtual functions. I'll share my amazement at how polymorphism permeates C++. Then we'll visit the long-used Curiously Recurring Template Pattern (CRTP) with its modernization using implicit this.

Do you like lambdas? So does the override pattern, which uses them to handle std::tuples and std::variants with std::apply and std::visit.

Want to walk through a container of disparate types invoking their functions? You'll see this and all the above in code examples galore.

Afterward, you'll be eager to learn more on your own!

Speakers
avatar for Rudyard Merriam

Rudyard Merriam

Retired, Mystic Lake Software
Rud Merriam is a retired software developer, having lived through the spaghetti, structured programming, and object-oriented development paradigms. He's trying to figure out functional programming and keep up with the latest C++ standards.Rud wrote his first FORTRAN IV in 1968 and... Read More →



Wednesday October 4, 2023 09:00 - 10:00 MDT
Adams

10:30 MDT

Wednesday Plenary: Laura Savino "Coping With Other People's Code"
Sometimes we're fortunate enough to work with a small group of devs who share our coding values, and when we see their PRs come in, we nod along and say, "Yup, that's what I would have done. Oh, nice, that one's even better than my usual approach, I'd better tuck that idea away for next time."

This perfect alignment is precious... and particularly elusive in C++. Most of us are living in codebases that are profitable, complex, and updated in ways with which we have legitimate beef. How can we keep a sense of curiosity, progress, and satisfaction amidst patterns we would never have chosen?

This presentation explores the often-overlooked social aspects of C++ development, offering both practical tools and light-hearted commiseration. We'll draw from the field of behavior science to build strategies that address conflicting design patterns and the strong opinions that come with them.

Speakers
avatar for Laura Savino

Laura Savino

Software Engineer, Adobe Photoshop
Laura Savino is a Photoshop engineer, globally recognized tech speaker, and expert in developer communications. She has adapted to both decades-old legacy codebases and beta versions of languages & frameworks. She's worked with a team that replaced their data layer with a functional... Read More →


Wednesday October 4, 2023 10:30 - 11:45 MDT
Adams

11:45 MDT

Conference Group Photo
Wednesday October 4, 2023 11:45 - 12:00 MDT
Adams

12:00 MDT

Author Book Signing: Klaus Iglberger: "C++ Software Design"
Author: Klaus Iglberger , "C++ Software Design"
In our bookstore or bring your own from home



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 →


Wednesday October 4, 2023 12:00 - 12:30 MDT
‍Adams Foyer

12:15 MDT

Women's Luncheon
This lunch aims to create a space for women in C++ to network and establish connections that will aid in career development. This event is informal; There will be a brief introduction and welcome from the hosts, but afterwards attendees are encouraged to talk casually and interact freely with each other.

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 Daisy Hollman or Kristen Shaker.

Lunch will be provided.

This event is sponsored by Bloomberg.

Speakers
avatar for Daisy Hollman

Daisy Hollman

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 Sherry Sontag

Sherry Sontag

Technical Expert, Bloomberg LP
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 →
avatar for Kristen Shaker

Kristen Shaker

Kristen Shaker is an accomplished software engineer known for her expertise in C++ refactoring and exceptional leadership abilities. Kristen sits on Google’s C++ Core Libraries Team. The team is responsible for making the C++ portion of Google’s code base as extensible, maintainable... Read More →

Sponsors & Exhibitors
avatar for Bloomberg

Bloomberg

Platinum Sponsor, Exhibitor
Bloomberg is building the world’s most trusted information network for financial professionals. Our 6,000+ engineers are dedicated to advancing and building new systems for the Bloomberg Terminal and other products to solve complex, real-world problems.C++ is one of our core programming... Read More →


Wednesday October 4, 2023 12:15 - 13:45 MDT
Spruce 4

12:30 MDT

Open Content: Dr. Walter E Brown "Talks That Don't Fit Elsewhere (part 1)"
This is the first of a collection of presentations that are individually too short for a full hour yet too long for a 5-minute lightning talk.  Come join us (bring your lunch!) as we explore these three topics for about 20 minutes each:
- "The Universe of C++ Types"
- "An Adventure in Applied Detection"
- "The Principle behind C++ Declaration Syntax"  

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 almost 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 →


Wednesday October 4, 2023 12:30 - 13:30 MDT
Cottonwood 2/3

12:30 MDT

Open Content: Rud Merriam "A Journey into Ranges, Views, Pipelines, and Currying"
Learning C++ is often like drinking from a fire hose. In December 2022, I started drinking from the Ranges library - and still am! Here is a journey into Ranges, Views, Pipelines, and Currying.

We'll see with code examples how Ranges improve on the Standard Template Library algorithms through easier and expanded usage with containers and non-container types. Along the way, you'll see some utility routines for peeking into pipelines and executing them. We'll also look at currying functions to add capabilities to pipelines.


Speakers
avatar for Rudyard Merriam

Rudyard Merriam

Retired, Mystic Lake Software
Rud Merriam is a retired software developer, having lived through the spaghetti, structured programming, and object-oriented development paradigms. He's trying to figure out functional programming and keep up with the latest C++ standards.Rud wrote his first FORTRAN IV in 1968 and... Read More →



Wednesday October 4, 2023 12:30 - 13:30 MDT
Maple 3/4/5

12:30 MDT

Open Content: Shachar Shemesh - "Nostalgia on a Chip: Recreating Childhood Memories on FPGA"
It is possible to learn about new technologies _and_ be nostalgic at the same time. This talk is about a project I've been doing of recreating the dawn of home computing computers on an FPGA.
On a cheap FPGA.
From scratch.

Talk will cover a wide range of topics, including 8 bit computers, FPGAs, computer, CPU and operating system architecture, as well as some live demos.

Speakers
avatar for Shachar Shemesh

Shachar Shemesh

Chief Content Creator, Some Assembly Required
Shachar Shemesh has been programming computers since the 8-bit era, and still finds passion in it today. Shachar's professional career has taken him to security, networking, storage and video streaming.Outside his professional career Shachar is... also programming. He has several... Read More →


Wednesday October 4, 2023 12:30 - 13:30 MDT
Cottonwood 8/9

13:00 MDT

Official ISO C++ WG21 SG meeting of low latency/embedded/games/finance and Machine Learning
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 →


Wednesday October 4, 2023 13:00 - 16:30 MDT
‍Cottonwood 6

13:30 MDT

Author Book Signing: Jason Turner: "C++ Best Practices", Multiple-Puzzlers Books, ...

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Wednesday October 4, 2023 13:30 - 14:00 MDT
‍Adams Foyer

14:00 MDT

Concurrency TS2: At Last Going to Geneva
After the two initial content of Hazard Pointers and RCU was voted into Concurrency TS2 in the June 2021 virtual plenary, we have finally added 3 additional features from the Kona C++ Standard meeting in 2022 (the first F2F after the pandemic). These new features completes the Concurrency TS2 and now it is finally being sent to Geneva as a PDTS for eventual publication as an ISO TS after we address any comments in the next Kona meeting in November, 2023. It seems reasonable that Concurrency TS2 will be published in early 2024.

This talk [redaction] will describe all the features and show how they can used. as described in N4956. it contains:
-Synchronized Value
-Safe Reclamation which contains Hazard Pointers and RCU
-Bytewise Atomic Memcpy
-Asymmetric Fence

We will show the use cases of each and describe how some of them are already heading to C++26 as the initial entries to the C++26 working draft. This will help programmers in concurrency, lock-free programming, low-latency applications how to take advantage of each of these important facilities.

Speakers
avatar for Maged Michael

Maged Michael

Maged Michael is the inventor of several concurrent algorithms including hazard pointers, lock-free allocation, and multiple concurrent data structure algorithms. His code and algorithms are widely-used in standard libraries and production. His 2002 paper on hazard pointers received... 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 →


Wednesday October 4, 2023 14:00 - 15:00 MDT
Cottonwood 8/9

14:00 MDT

Applicative: The Forgotten Functional Pattern
Monads get all the press. Functors are often presented as a prerequisite to monads. Applicative (functor) almost never gets mentioned. But it's massively useful - to the point where a lot of the time when we think about a "monadic interface" what we really want is an applicative interface.

This talk will put applicative in the limelight, showing how it works and why it's so powerful, with lots of examples grounded in code; there are no category theory diagrams in this talk. Attendees will come away with a solid understanding of the applicative pattern and its many uses. And as a byproduct, their opinions of monads will probably change too.

Optionals. Expected. Ranges. Futures. Parsing. Validation. Error Handling. Transforms. Functions themselves. These are all examples where thinking in terms of applicatives (and importantly, NOT just reaching for "a monadic interface") helps us write simpler, more composable code.

If you're kind of fuzzy about functors and monads, what's missing is probably the third piece of the puzzle: applicative.

Speakers
avatar for Ben Deane

Ben Deane

Intel
Ben has been programming in C++ for this whole millennium. He spent just over 20 years in the games industry working for companies like EA and Blizzard; many of the games he worked on used to be fondly remembered but now he’s accepted that they are probably mostly forgotten. After... Read More →


Wednesday October 4, 2023 14:00 - 15:00 MDT
Adams

14:00 MDT

Shared Libraries in Windows, in Linux, and yes - in C++
This talk would give a crash-intro to linkers, loaders and the layout of program binaries, and explore just enough internals to understand some observable differences in C++ builds between Linux and Windows.

We will discuss the GOT, the PLT, symbol visibility, interposition, lazy binding and more. There will be a lot of details, but also a lot of 'why's and opinions.

 We will also touch/rant on what the C++ standard has to say on adjacent matters. There's a good chance you've heard before "shared libraries are outside the acope of the standard", but it doesn't mean what you think it does.

Speakers
avatar for Ofek Shilon

Ofek Shilon

Toga Networks
A Mathematics MA by training, but a 20Y C++ developer, writer and speaker in both the Linux and MS universes. Fascinated by compilers, debuggers and pretty much anything low level. Fiercely hated by his cat for no apparent reason.


Wednesday October 4, 2023 14:00 - 15:00 MDT
Cottonwood 2/3

14:00 MDT

Exploration of Strongly-typed Units: A Case Study from Digital Audio
API or math mistakes with units can cause problems ranging from a digital audio processing outputting silence to crashing your Mars rover—we’ll discuss real-life examples of both!

The combination of user-defined types, conversion operators/constructors, and operator overloading in C++ give us the tools to use strong-types and avoid unit mistakes; std::chrono is a great example of this that everyone should be using. Unfortunately, when dealing with units beyond time many developers still use primitive types encoding units in variable names or comments because the standard does not offer any tools for user-defined units.

In this talk we will look at the mp-units library which has been proposed for standardization in P1935 (A C++ Approach to Physical Units). We will look at the implementation of various units used in digital audio / DSP that go beyond “physical” units and what the experience is like to develop your own units with this library/proposal.

Speakers
avatar for Roth Michaels

Roth Michaels

Principal Software Engineer, Native Instruments
Roth Michaels is a Principal Software Engineer at Native Instruments, an industry leader in real-time audio software for music production and broadcast/film post-production. In his current role he is involved with software architecture and bringing together three merged engineering... Read More →



Wednesday October 4, 2023 14:00 - 15:00 MDT
Maple 3/4/5

15:15 MDT

Embracing CTAD
Class template argument deduction, or CTAD, is a C++17 feature that has divided the experts into those who consider it very helpful and those who wish it never came to be. What is it, how can it make your life easier, and what makes some wary of it ? We explore the answers to all these questions while covering the history and the current state of CTAD, so you too can form your own opinion on the subject.

Speakers
avatar for Nina Ranns

Nina Ranns

The Standard C++ Foundation
Nina Ranns has been a member of the C++ standard committee since 2013, focusing mostly on the core part of the language, and committee secretary since 2018. Throughout her career she has worked for Siemens, Motorola, Datasift, and Symantec on everything from parts of the UMTS network... Read More →


Wednesday October 4, 2023 15:15 - 16:15 MDT
Maple 3/4/5

15:15 MDT

Plug-in Based Software Architecture for Robotics
A plug-in architecture is a software design pattern that allows for third-party developers to add functionality to a larger system without having to alter the source code of the system itself. Plug-ins are typically self-contained modules that are loaded into the system at runtime and can be used to add new features, modify existing functionality, or extend the capabilities of the system in other ways.

Two classic examples are the plugins for web browser (like Adblock) and the plugins for Sublime text editor (for formatting, version control, etc). In both cases, the plugins enhance the functionality of the core system but the core system developer did not need to create the plugin. Similarly, the plugin architecture is extensively used in robotics. MoveIt, a motion planning framework for robotic arms, uses plugins to test various controllers, motion planning algorithms and collision avoidance algorithms. This talk would cover how to create a simple plugin architecture in C++ with inspiration on how it is done in the field of robotics and Robot Operating System.

Speakers
avatar for Abishalini Sivaraman

Abishalini Sivaraman

Robotics Engineer, PickNik Robotics
Abishalini Sivaraman holds a bachelors and masters degree in electrical and computer engineering from Texas A&M University. She has worked on various robotics projects as part of school and work in the last 5 years.
avatar for Anthony Baker

Anthony Baker

Software Engineer, Picknik Robotics
Anthony Baker attended the University of South Florida from 2012 to 2016, graduating with a Bachelor's degree in Computer Engineering. While attending the University of South Florida, Anthony caught an interest in the field of robotics, finally entering the industry in 2021. Between... Read More →


Wednesday October 4, 2023 15:15 - 16:15 MDT
Cottonwood 2/3

15:15 MDT

Is std::mdspan a Zero-overhead Abstraction?
C++23 introduces std::mdspan into the standard library as a view over multi-dimensional arrays. This talk will try to establish some of the best practices for using mdspan, and highlight subtleties to be aware of. Taking some basic matrix and image operations, we'll compare the generated assembly to low-level implementations similar to BLAS, and check if mdspan can be used in a way to avoid any overhead. We'll discuss how the results are affected by mdspan design decisions and ABI limitations.

Speakers
avatar for Oleksandr Bacherikov

Oleksandr Bacherikov

Software Engineer, Snap Inc
Oleksandr Bacherikov is a Software Engineer at Snap Inc working on Computer Vision and Machine Learning magic for mobile devices. He has more than 15 years of experience in Competitive Programming and is interested in implementing algorithms in the most effective, concise, and generic... Read More →


Wednesday October 4, 2023 15:15 - 16:15 MDT
Cottonwood 8/9

15:15 MDT

Object Introspection: A Revolutionary Memory Profiler for C++ Objects
This talk presents a new open source technology for the Linux platform that we have developed and deployed at Meta. It enables you to observe the precise memory footprint and composition of your C++ objects in live applications including their containers (even user-defined ones!) and all dynamic memory allocations. This is achieved with no code modification or recompilation using regular DWARF debug data.

We provide two different approaches for introspecting objects, (1) a profiler that operates on a target process and (2) APIs that allow you to introspect objects directly from within your application code. We describe the core technology underlying both mechanisms followed by details of how the two approaches work and how they can be used. We will give code examples demonstrating the types of efficiency improvements made in our C++ source base and demonstrate just how easy it is to make significant efficiency improvements in your code when you have the data in hand. As this technology is open source we hope it will inspire you to leave here fired up to introspect every object that is now in sight!

Understanding the detailed memory footprint of your C++ objects in live applications allows you to develop code to more efficiently utilize memory and CPU. Existing tools and techniques in this space are extremely thin on the ground and tend to be prohibitively intrusive for real world applications in production environments and provide partial information at best. We are on a mission to elevate the observability of data to the same level as code.

https://objectintrospection.org/

Speakers
avatar for Jonathan Haslam

Jonathan Haslam

Software Engineer, Meta
Jon Haslam is a software developer at Meta where he has spent the last 5 years developing and applying software for C++ application observability. In his 25+ years of industry experience Jon has been fortunate enough to be involved in developing some interesting technologies including... Read More →
avatar for Aditya Sarwade

Aditya Sarwade

Performance Engineer, Meta
Aditya Sarwade is a software developer who has worked at Meta for over 4 years on system performance for large services and building C++ profiling tools. Previously, he has worked for 6 years in the virtual devices team at VMware implementing paravirtual devices for VMware's ESX... Read More →


Wednesday October 4, 2023 15:15 - 16:15 MDT
Adams

16:45 MDT

Robotics at Compile Time: Optimizing Robotics Algorithms With C++'s Compile-Time Features
Development of real-time software for robots allows for strategic use of compile-time programming techniques to optimize performance, latency, and memory usage. The speaker will present how template metaprogramming, the constexpr family of features, concepts and std::enable_if can benefit robotics algorithms and code through concrete examples. Beyond optimization, the speaker will discuss how these features can also enable many safety-critical checks before run-time. The speaker's goal of this talk is for attendees both in robotics and outside to learn how they may be able to move more of their software's evaluation to the compiler.

The speaker's examples will include common robotics programming tasks like kinematics, collision checking, and cartesian control. Historically, robot-agnostic software for these tasks was written to be compiled once and deployed across numerous robotics platforms. This necessitated hardware description files to be ingested on startup and then verified before operating the robot. These approaches require dynamic memory allocation, run-time polymorphism and other approaches that prevent compiler optimizations, static analysis and are not compatible with real-time operation. For many applications in robotics, however, the requirements of the robotics platform are known well in advance and can be leveraged to generate software heavily optimized by the compiler.

Speakers
avatar for Stephen Brawner

Stephen Brawner

Robotics Software Consultant, Robottimo
As a lifelong maker of innovative mixed hardware-software artifacts, Dr. Stephen Brawner is experienced in engineering and computer science with a passion for robotics and automation. He has designed, built and programmed a variety of robotics platforms in many industries including... Read More →


Wednesday October 4, 2023 16:45 - 17:45 MDT
Cottonwood 2/3

16:45 MDT

Symbolic Calculus for High-performance Computing From Scratch Using C++23
Wouldn't it be nice to be able to type and manipulate symbolic mathematical formulas directly in C++? On top of providing a much more natural interface for scientists to express their ideas in code, it would constitute a particularly relevant approach to disentangle scientific application domains on one side, and high-performance computing and low-level optimizations on the other side. In this talk, we will see how building symbolic calculus tools can be achieved in plain C++23 without any compiler magic. We will see how symbolic derivatives and integrals can be computed at compile-time and we will see how the technique can be leveraged to speed-up linear algebra computations. A particular focus will be given to the concepts and to the building blocks so that the approach can be easily tweaked and adjusted to other problems, and it will be shown that the decoupling of concerns allows to combine genericity, expressivity, and high-performance in code.

In practice, we will dive into a new take on expression templates that modern C++ makes much easier to handle. In particular, we will introduce stateless formulas as a way to avoid some of the complexities that use to make traditional expression templates especially difficult to manage in codebases. We will see how Class Template Argument Deduction and unevaluated lambdas as template parameters can be combined to produce uniquely typed symbolic variables that will serve as the atoms of symbolic formulas. Implementation strategies to optimize both compile-time and runtime performance will be discussed. The talk will be illustrated with numerous examples together with their corresponding generated assembly code to show that the zero-cost abstraction principle is ensured by the set of presented techniques. Beyond the technical aspects, a broader discussion will be opened on how this approach can be combined with existing and upcoming linear algebra components of the C++ standard library (mdspan, mdarray, BLAS...) to ensure the highest level of performance when it comes to scientific computing.

The goal of this talk is really to highlight the overall strategy of implementation and the set of techniques necessary to bring symbolic calculus into high-performance code and make it as accessible as possible so that everyone can play with it. The evolution of C++ has made it much simpler to implement such things.

Speakers
avatar for Vincent Reverdy

Vincent Reverdy

Researcher, CNRS
Vincent Reverdy is a Full Researcher in Computer Science and Astrophysics at French Center for Scientific Research (CRNS) and located at the Annecy Laboratory for Particle Physics (LAPP) in the French Alps. He also is a member of the French delegation to the C++ Standards Committee... Read More →


Wednesday October 4, 2023 16:45 - 17:45 MDT
Cottonwood 8/9

16:45 MDT

How to Build Your First C++ Automated Refactoring Tool
Your company is large; You have a lot of C++ code and a lot of engineers writing C++, but you have a limited number of C++ experts. How do you ensure new developers follow C++ best practices and your company’s style guide? How can you scale the knowledge of your C++ experts as your company and code base grows?

Clang provides a rich assortment of tools that can proactively identify and improve problematic code. What are these tools? How can you use them?

This talk introduces the fundamentals of clang refactoring capabilities and discusses their practical applications as they relate to your code base, ensuring only correct, idiomatic C++ lands without excessive toil.

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. Kristen sits on Google’s C++ Core Libraries Team. The team is responsible for making the C++ portion of Google’s code base as extensible, maintainable... Read More →


Wednesday October 4, 2023 16:45 - 17:45 MDT
Adams

16:45 MDT

Object Lifetime: From Start to Finish
Object lifetime is one of the core concepts of C++ and understanding it is critical to write correct and efficient code.
This talk provides an overview of an object's lifetime, rules for extending it, as well as pitfalls when dealing with temporary objects.
Whether you are a seasoned C++ programmer or just starting out, this talk will provide you with valuable insights into one of the most fundamental aspects of the language.

Speakers
avatar for Thamara Andrade

Thamara Andrade

Principal Software Engineer, Cadence Design Systems
Principal Software Engineer working for 10+ years with C++ and adventuring into new technologies through open-source projects. Always engaged in projects aiming to enhance women's presence in the tech world.



Wednesday October 4, 2023 16:45 - 17:45 MDT
Maple 3/4/5

18:00 MDT

Diversity Dinner
CppCon's Diversity Dinner will provide an opportunity to socialize and  to discuss processes, experiences, and paths forward for improving diversity and inclusion in the C++ community.

Wednesday October 4, 2023 18:00 - 20:00 MDT
Spruce 4

18:30 MDT

Open Content: Jody Hagins - "Metaprogramming Bootcamp with Boost.Mp11" Day 3 of 3
This is intended as a fully interactive workshop-like setting with tutorials, examples, and live exercises, spread across multiple sessions so it is not singularly overwhelming.

We will gently cover the fundamental concepts by solving a number of Advent of Code 2022 problems at compile time, using Boost.MP11.

I gave a talk at C++Now earlier this year on a similar topic, but it was a pure lecture, and presented at an advanced and very quick pace.

This is intended to be a more gentle approach, with instruction, followed by exercises that you can solve alone or in groups, with live help from me and possibly others.

Advanced metaprogramming practitioners would likely enjoy this, but my intent is to help the many people who still see this side of C++ as a bit of black magic which they avoid.

Bring your laptop and modern C++ compiler.

Speakers
avatar for Jody Hagins

Jody Hagins

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.


Wednesday October 4, 2023 18:30 - 20:00 MDT
Cottonwood 2/3

18:30 MDT

Open Content: John Parent - "Spacktivate! Your Dependencies"
Spack is a combinatorial, highly flexible package manager designed for HPC systems with a focus on fine grained package specification and reproducibility. Vendoring over 7k packages from C++ and other language domains, Spack is the go to solution for HPC and is quickly becoming a major player in scientific communities, supporting, in addition to HPC systems, MacOS, many flavors of Linux, and as of the last year, Windows!

This talk will highlight features of Spack that make it a unique and powerful solution to C++ package management, focusing in part on the recent Windows port and associated adaptations required for that platform. Additional subjects of focus will include how anyone can deploy Spack to solve many common C++ package management headaches with motivating use cases and walkthroughs of common deployment strategies (particularly on Windows). This will be followed up with a comparison to other common package management solutions to be immediately followed by an associated discussion regarding the topics of Spack, other package managers, and C++ dependency management solutions in general.

Speakers
avatar for John Parent

John Parent

Research and Development Engineer, Kitware
John Parent is a research and development engineer on the software solutions team at Kitware, Inc., where he is one of the primary developers on the Spack on Windows project. His other work comprises efforts such as contributing to and developing solutions for CMake and CI systems... Read More →


Wednesday October 4, 2023 18:30 - 20:00 MDT
Cottonwood 8/9

18:30 MDT

Open Content: Yocto Project, What Embedded Engineer Should Know About It
More and more companies use Yocto project nowadays to build custom Embedded Linux distributions. C++ provides a lot of ways to organize your projects (different build systems, variety of IDEs), and there's almost no restrictions for desktop applications. Vyacheslav wants to share his experience on integration of C++ applications/libraries with Yocto-based projects, and provide an overview of how Yocto project tackles the build process. He will also outline different software update mechanisms you might encounter when you develop for Embedded Linux platform, which have influence on your daily development workflow.  

Speakers
avatar for Vyacheslav Yurkov

Vyacheslav Yurkov

Software Development Team Lead
Vyacheslav Yurkov worked in many companies from different industries throughout his career. He is currently employed by Wika Mobile Control, a company providing safety certified solutions for mobile machinery, where he leads a team of Software Engineers. His main programming languages... Read More →



Wednesday October 4, 2023 18:30 - 20:00 MDT
Maple 3/4/5

20:30 MDT

Lightning Talks
5 minute "byte" size talks

Register to give a Lightning talk! Remember to select October 4th for the time slot.



Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, Sonar
Phil is the original author of the C++ test framework, Catch2, and composable command line parser, Clara. As Developer Advocate at Sonar he's involved with SonarQube, SonarLint and SonarCloud, particularly in the context of C++. He's also a member of the ISO C++ standards committee... Read More →


Wednesday October 4, 2023 20:30 - 22:00 MDT
Adams
 
Thursday, October 5
 

08:00 MDT

Open Content: Luke Valenty - "groov: Designing a generic hardware register abstraction library"
Firmware, driver, and BIOS developers all have one thing in common: the need to understand and interface with hardware. The primary mechanism we use to access hardware is through hardware registers exposed on our memory or I/O interfaces. Even performing DMA transfers requires register operations to set up the hardware.

Hardware register definitions are like the API for that component. However, this HW API lacks any sort of type safety, is not easy or obvious how to use, and is fraught with peril if not accessed very carefully.

The Generic Register Operation Optimizer V is the 5th incarnation of a C++ register abstraction library at Intel. It is being developed as an open source project on GitHub from the beginning. Please join Luke as he covers the challenges, requirements, constraints, and current design of this new library.

Speakers
avatar for Luke Valenty

Luke Valenty

FW Architect, Intel
Luke Valenty is a senior firmware engineer at Intel working on power management. He utilizes compile-time programming techniques to improve correctness and runtime efficiency of his team's code.


Thursday October 5, 2023 08:00 - 08:45 MDT
Cottonwood 2/3

09:00 MDT

Coroutine Patterns and How to Use Them: Problems and Solutions Using Coroutines In a Modern Codebase
In over 30 years of experience the C++ community have developed patterns that are effective in writing complex systems.  The introduction of coroutines introduced a brand new paradigm, but it changes many of the assumptions of the past. In this talk we'll see common patterns and pitfals that arise using coroutines, and what solutions are needed to address them.

Based on the experience working with a heavily coroutinized codebase, this talk will show a collection of common patterns that arise using coroutines. The patterns will cover from code that the compilers today block, to effectively managing resources with RAII, to the need and risks of synchronization. It will present ways to make the code correct, workarounds to obtain the same outcome, or will warn about potential issues that can arise from such patterns.

The code shown is going to be based on Facebook's Folly implementation of coroutines, but the concepts presented are common across other implementations as well (no previous knowledge of Folly is required).

This talk is perfect for practitioners that already are trying coroutines in their codebase and want to ensure the code they're writing doesn't contain hidden bugs, but also for people that haven't used coroutines yet and they are evaluating introducing them in their codebase.

Do you want to discover the new patterns to write correct code with coroutines? Join us for this exciting talk!

Speakers
avatar for Francesco Zoffoli

Francesco Zoffoli

Staff Software Engineer, Meta
Author of the book “C++ Fundamentals”, passionate about programming languages, maintainable software and distributed systems, he has been using C++ throughout his career and personal projects. Graduated in 2016 with a MSc in Computer Systems Engineering, he joined the industry... Read More →


Thursday October 5, 2023 09:00 - 09:30 MDT
Maple 3/4/5

09:00 MDT

Undefined Behavior: What Every Programmer Should Know and Fear
This talk is about You-Know-What, the thing in our programs we don’t mention by name.
What is this undefined behavior every C++ programmer has grown to fear? Just as importantly, what it isn’t? If it’s so scary, why is it allowed to exist in the language?
The aim of this talk is to approach undefined behavior rationally: without fear but with due caution. We will learn why the standard allows undefined behavior in the first place, what actually happens when a program does something the standard calls “undefined,” and why it must be taken seriously even when the program “works as-is.” As this is a practical talk, we will have live demos of programs with undefined behavior and sometimes unexpected outcomes (if you are very lucky, you might see demons fly out of the speaker’s nose). Also, as this is a practical talk, we will learn how to detect undefined behavior in one’s programs, and how to take advantage of the undefined behavior to gain better performance.

Speakers
avatar for Fedor Pikus

Fedor Pikus

Technical Fellow, Siemens
Fedor G Pikus is a Technical Fellow and head of the Advanced Projects Team in Siemens Digital Industries Software. His responsibilities include planning the long-term technical direction of Calibre products, directing and training the engineers who work on these products, design... Read More →


Thursday October 5, 2023 09:00 - 09:30 MDT
Adams

09:00 MDT

Back to Basics: Testing
If we’re writing tests for our code we probably think we should write more - or write better tests. If we’re not already writing tests perhaps we think we should start. Or perhaps we are not, yet, convinced they are worth it?

This session will introduce you to the benefits of testing and how to get started and be effective.

We’ll look at:

* What does testing even mean?
* What types of testing are there, and what should I focus on?
* Should I use a test framework? If so which one?
* What are the testing best practices?
* What are some common challenges and pitfalls to overcome?

Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, Sonar
Phil is the original author of the C++ test framework, Catch2, and composable command line parser, Clara. As Developer Advocate at Sonar he's involved with SonarQube, SonarLint and SonarCloud, particularly in the context of C++. He's also a member of the ISO C++ standards committee... Read More →


Thursday October 5, 2023 09:00 - 10:00 MDT
Cottonwood 2/3

09:00 MDT

Monads in Modern C++
Monads are a common technique in functional programming languages to reduce boilerplate and abstract detail in order to produce simple, pure pipelines. While traditionally associated with languages like Haskell, monads are making their way into more mainstream languages, including C++ - with monadic operations being added in C++23. Due to their increasing applicability in real-world situations as alternatives to more traditional paradigms, these functional techniques may become core pillars of C++ development.

To many developers, monads are either unknown or confusing - they have a reputation as being notoriously difficult to understand. This talk will combine both theory and coding examples inspired by our day-to-day work on a large-scale enterprise financial risk system. The aim is to demystify the monad and enable attendees to gain a practical insight into its internal workings.

While the focus of our talk will be on C++, the ideas are relevant to any other programming language - the shift towards these functional features is not unique to C++.

No functional programming knowledge required.

Speakers
avatar for Georgi Koyrushki

Georgi Koyrushki

Software Engineer, Bloomberg LP
Georgi Koyrushki is a Senior Software Engineer at Bloomberg, where he works in the Multi-Asset Risk System (MARS) Engineering team. He has worked at the company for nearly five years, prior to which he earned a bachelor's degree in software engineering from the University of Glasgow... Read More →
avatar for Alistair Fisher

Alistair Fisher

Alistair Fisher is an Engineering Team Lead at Bloomberg. He works in the Multi-Asset Risk System (MARS) Pricing group in London, where he is focused on building scalable and reliable components for portfolio pricing and risk analysis. He is interested in the use of functional programming... Read More →


Thursday October 5, 2023 09:00 - 10:00 MDT
Cottonwood 8/9

09:35 MDT

The Absurdity of Error Handling: Finding a Purpose for Errors in Safety-Critical SYCL
C++ is hard. Error handling is hard. Safety-critical software is very hard. Combine the three, and you get just one of the exciting problems faced by the SYCL SC working group.
 
SYCL is one of the most widely supported abstraction layers for programming GPUs and other hardware accelerators using ISO C++. As of March 2023, the Khronos Group has a working group tasked with specifying SYCL SC --- a variant of SYCL that is compatible with safety-critical systems. One of the key features of a safety-critical system is that its behavior must be well understood not just in normal operation, but also in the presence of faults. This raises some difficult technical questions, such as, "How do I implement deterministic error handling?" but also some more philosophical ones, like, “What does an error actually mean, and is the error even theoretically actionable?”
 
Much of the information on C++ error handling in safety-critical contexts focuses on RTTI and the pitfalls of stack unwinding. Although these are important considerations, I will argue that a far greater problem is a lack of agreement on what *safety* even means. This talk will focus on how *safety* in a safety-critical context differs from *safety* from a programming language design perspective. While the talk is inspired by the pain-points of C++ error handling in safety-critical contexts, the conclusions are relevant to C++ software in general. The talk will challenge the audience to rethink the situations that can be considered erroneous and to carefully consider the expected behavior of their software in the presence of errors.
 
I am a member of the SYCL SC working group, but this talk will contain my own opinions.

Speakers
avatar for Erik Tomusk

Erik Tomusk

Senior Safety Architect, Codeplay Software
Erik Tomusk is the Senior Safety Architect at Codeplay Software, where he is working to bring functional safety to the SYCL API. In a previous role, he spent a few years writing C++ and CMake for Codeplay's OpenCL runtime.Before joining Codeplay, Erik researched CPU architectures... Read More →


Thursday October 5, 2023 09:35 - 10:05 MDT
Maple 3/4/5

09:35 MDT

Powered by AI: A Cambrian Explosion for C++ Software Development Tools
Large language models like GPT-4 are achieving state of the art results in a wide variety of well-studied areas, eclipsing past work in well-studied areas like auto-completion. I argue that they should also presage a "Cambrian explosion" – a wave of radically new kinds of software development tools, all powered by AI, that will make all our lives easier. This talk will focus on several tools of particular interest to C++ developers. First, as any C++ developer knows, C++ compiler errors are notoriously verbose and can be hard to decode even for experts. To address this challenge, we created CWhy, a compiler wrapper that translates C or C++ compiler errors into readable explanations, and even proposes potential fixes. Beyond compile-time errors, C++ developers must also spend considerable time in debuggers (like `gdb` or `lldb`) trying to track down the root cause of runtime errors. To simplify this task, we created ChatDBG, a system that augments debuggers with a new command you can run for post-mortem debugging: `why`. This command performs a root cause analysis of the issue leading to the error (e.g., a segfault) and proposes a fix. For both of these projects, we share some details about their internal workings, describe how they can effectively leverage large language models, and present examples of them in action.

Speakers
avatar for Emery Berger

Emery Berger

Professor, University of Massachusetts Amherst
Emery Berger is a Professor of Computer Sciences at the University of Massachusetts Amherst, the flagship campus of the UMass system. Emery and his collaborators have built numerous widely adopted software systems including Hoard, a fast and scalable memory manager that accelerates... Read More →


Thursday October 5, 2023 09:35 - 10:05 MDT
Adams

10:30 MDT

Thursday Plenary: Herb Sutter "Cooperative C++ Evolution – Toward a Typescript for C++"
C++23 is done. But C++ is not! In this talk I’ll give my personal perspectives on:
  • C++’s ongoing and very active evolution;
  • The latest progress updates on my cppfront experimental compiler, and what I’ve learned about modern ISO C++20 and C++23 in the experiment;
  • Why compatibility (and what kind, and how much) is essential; and
  • Why we should aim to keep bringing C++ forward successfully by cooperating and being part of C++’s ongoing true evolution via WG 21, even though that’s more work than pursuing a new fresh-but-competing evolutionary path.

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++.


Thursday October 5, 2023 10:30 - 12:00 MDT
Adams

12:00 MDT

Author Book Signing: Marc Gregoire: "Professional C++, 5th Edition"
Author: Marc Gregoire, "Professional C++, 5th Edition"
In our bookstore or bring your own from home





Speakers
avatar for Marc Gregoire

Marc Gregoire

Software Architect, Nikon Metrology
MARC GREGOIRE is a software project manager and software architect from Belgium. He graduated from the University of Leuven, Belgium, with a degree in "Burgerlijk ingenieur in de computer wetenschappen" (equivalent to a master of science in engineering in computer science). The... Read More →


Thursday October 5, 2023 12:00 - 12:30 MDT
‍Adams Foyer

12:30 MDT

Program Committee Informational
Come hear about what the program committee does, why it is important and how you can be apart of making CppCon the premiere C++ conference.

This will be an informal discussion with the CppCon's Program Chair, Dr. Daisy Hollman.

Speakers
avatar for Daisy Hollman

Daisy Hollman

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 →


Thursday October 5, 2023 12:30 - 13:00 MDT
Spruce 3

12:30 MDT

Open Content: Alon Wolf "Generative C++"
Currently, there are two main ways to generate code in C++ - templates and macros. While macros can manipulate text, they lack the compile time information and constraints that the compiler provides. Templates on the other hand are incredibly powerful especially with C++20’s concepts, non type template parameters and increased constexpr support, however, while they work great with types and compile time constants they can't be used with identifiers, keywords and other C++ syntax elements. The metaclasses proposal by Herb Sutter aims to give more powerful code generation tools, but it is not part of the standard yet. We will also compare these features to code generation features in other languages. So what can we do right now in C++ in terms of generative code? Well... the answer is anything we want.

In this talk, we will go over a different approach for compile time code generation that can be used right now with C++ 20. We will use it to implement the examples from Herb Sutter's metaclasses talk, generate consistent C++ and vulkan shader code, and extend it to support arbitrary compile time execution (yes, it can even run minecraft).

We will cover key compile time development topics:
1. What are the pros and cons of the possible compile time input validation methods (static assert, constexpr throw, concepts) and which one should you choose for your compile time library.
2. Working in constexpr context and easily converting between dynamic containers (vector, string) and static containers (array).
3. Designing expressive APIs with non type template parameters.

To achieve our goal of code generation we will also dive into some less known topics like the behavior of std::source_location in templates, compile time printing of constexpr strings, DLL injection, function hooks and some pitfalls of C++20's modules build process and how to avoid them.

In the end you will have all the tools to create your own compile time code generation library or just download the library with the examples from GitHub and use it.

Speakers
avatar for Alon Wolf

Alon Wolf

Software Engineer, Medtronic
Alon is a Senior Software Engineer at Medtronic specializing in 3D and computer graphics with a passion for high performance. He has developed many custom simulation and rendering engines for different platforms using modern C++. He also writes a C++ technical blog and participates... Read More →


Thursday October 5, 2023 12:30 - 13:30 MDT
Maple 3/4/5

12:30 MDT

Open Content: Dr. Walter E Brown "Talks That Don't Fit Elsewhere (part 2)"
This is the second of a collection of presentations that are individually too short for a full hour yet too long for a 5-minute lightning talk.  Come join us (bring your lunch!) as we explore these three topics for about 20 minutes each:
- "A Review of Published C++ Code"
- "Tales of Subscripting"
- "What Does C++ Owe to a 20th-Century Mathematician?"

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 almost 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 October 5, 2023 12:30 - 13:30 MDT
Cottonwood 2/3

12:30 MDT

Open Content: Shachar Shemesh - "Undefined Behavior: The Compiler's Perspective"
Beware the Undefined Behavior!
But why? What's so bad about them? And if they are so bad, why are they even there? What good do they do?

This talk tries to view undefined behavior from the other end. We'll go over what the compiler does in the face of UB, and how that creates the dangers everybody loves to warn us about.

We'll also try to tackle the question: can they be fixed?

Speakers
avatar for Shachar Shemesh

Shachar Shemesh

Chief Content Creator, Some Assembly Required
Shachar Shemesh has been programming computers since the 8-bit era, and still finds passion in it today. Shachar's professional career has taken him to security, networking, storage and video streaming.Outside his professional career Shachar is... also programming. He has several... Read More →


Thursday October 5, 2023 12:30 - 13:30 MDT
Cottonwood 8/9

14:00 MDT

Back to Basics: Concurrency
Concurrent programming unlocks the full performance potential of today's multicore CPUs, but also introduces the potential pitfalls of data races and random, difficult-to-debug application failures. This back-to-basics session will provide a foundation for concurrent programming, focusing on std::thread and mentioning other ways to introduce concurrency and parallelism. A lot of time will be spent on how to recognize data races, and how to avoid them using mutexes, atomic variables, and other standard constructs.

Attendees will come away knowing how to write simple and correct concurrent programs and will have a foundation to build on when developing more complex concurrent applications.

Speakers
avatar for David Olsen

David Olsen

Software engineer, NVIDIA
David Olsen has more than two decades of software development experience in a variety of programming languages and development environments. For the last seven years he has been the lead engineer for the NVIDIA HPC C++ compiler, focusing on running standard parallel algorithms on... Read More →


Thursday October 5, 2023 14:00 - 15:00 MDT
Adams

14:00 MDT

Single Producer Single Consumer Lock-free FIFO From the Ground Up
In this session we will construct a Single Producer Single Consumer Lock-free Wait-free Fifo from the ground up. But why write our own if we can get one from reliable sources such as Boost.Lockfree? There are a couple of answers to this question.

* Writing such a fifo is a fairly gentle introduction to lock free programming.
* There are some interesting performance optimizations that can be made.
* There may be some specific requirements that are not met in out-of-the box implementations.

In the presentation we will first develop a simple circular fifo. Next we will make it thread-safe as well as lock-free and wait-free. After that we will address issues associated with cache coherency and false sharing in particular. We will show a few additional optimizations that can be added as needed to meet specific requirements. Finally, the performance of our fifo will be compared with a few out of the box implementations. Along the way we will touch on subjects such as thread safety, data-races, false sharing, object lifetime, and relaxed atomics.

Speakers
avatar for Charles Frasch

Charles Frasch

Senior Core Developer, IEX Trading
Charles Frasch is a Senior Core Developer with the IEX Group where he is working to re-platform their core trading infrastructure in modern c++. Charles has worked in the financial technology world for more than twenty years in areas such as high-frequency trading and low-latency... Read More →


Thursday October 5, 2023 14:00 - 15:00 MDT
Maple 3/4/5

14:00 MDT

Advancing cppfront with Modern C++: Refining the Implementation of is, as, and UFCS
In this session, we'll explore the rich landscape of Modern C++ and its intersection with the development of cppfront, specifically focusing on the implementation of 'is', 'as', and UFCS (Uniform Function Call Syntax). We'll discuss the capabilities and limitations of current C++ standards (C++20, C++23), and how they shape our ability to implement these features, with insights drawn from the current state of compilers like Clang, GCC, and MSVC.

We'll dive deep into how cppfront is leveraging modern C++ to bridge the gaps in these implementations, building upon the discussions from last year's conference. Attendees will understand the challenges and achievements in cppfront's journey and learn about the future directions in refining these key functionalities. Whether you're a seasoned C++ developer or a newcomer to the field, this session offers valuable insights into the evolving landscape of C++ and the innovative role of cppfront in enhancing the programming experience.

Speakers
avatar for Filip Sajdak

Filip Sajdak

Filip Sajdak's career in software development since 2007 has spanned various domains, including embedded platforms and User Interface applications. With a master's degree in robotics, he has often worked on technically challenging projects, employing modern C++ for code simplification... Read More →


Thursday October 5, 2023 14:00 - 15:00 MDT
Cottonwood 2/3

14:00 MDT

Can Data-oriented-design be Improved?
Can data-oriented-design be improved?
Yes, it can.
As a design paradigm, data-oriented-design focuses on creating optimal "transformations" of data and modelling programs as said transformations. This technique gained popularity in recent years. We introduce a new way to implement this concept using the recent possibilities of modern C++.
This talk will present code organization and optimization techniques we discovered to improve this paradigm. We will show that this new approach creates better software organization and new opportunities to optimize code.
Theses ideas can be generalized to many other applications and aren't limited to data-oriented-design. The programmer will obtain a greater flexibility and ease of extending and maintaining C++ code.

Speakers
avatar for Ollivier Roberge

Ollivier Roberge

Student, Collège Jean-de-Brébeuf
Ollivier Roberge was enthralled by C++ at quite a young age. He is mainly interested in making more efficient code, both for the machine and the programmer. His mentor, who wrote C++ for more than 35 years and still continues to this day, helped this enthusiasm. He intends to actively... Read More →



Thursday October 5, 2023 14:00 - 15:00 MDT
Cottonwood 8/9

15:15 MDT

Advanced SIMD Algorithms in Pictures
Consider the difference between explaining the gist of quick-sort and actually writing a production implementation. The first is very quick and can be done in 5 minutes while the second can easily take you months. We will firmly plant ourselves in the first category and look at the basic ideas behind some non-trivial SIMD (i.e. vectorized) algorithms. The plan is to cover memcmp, copy_if and set_intersection. The talk does not expect you to know anything but some CS101 algorithms. Afterwards, hopefully, SIMD will not seem like such a mysterious art. 

Speakers
avatar for Denis Yaroshevskiy

Denis Yaroshevskiy

Software Engineer, Meta
Denis Yaroshevskiy is a performance engineer at meta and a semi-active member of the C++ community. He has a number of contributions in the very foundational libraries, such as libc++, folly, Chromium/base. Denis has a keen interest in SIMD and maintains algorithms in eve SIMD li... Read More →


Thursday October 5, 2023 15:15 - 15:45 MDT
Adams

15:15 MDT

Leveraging the Power of C++ for Efficient Machine Learning on Embedded Devices
In this talk, we will explore, from a practical point of view, how C++ and TensorFlow Lite can be combined to enable efficient machine learning on embedded devices.

I will showcase image classification in C++ on a Raspberry Pi and demonstrate how a classic game can be implemented using hand gesture recognition.

No prior knowledge of machine learning or embedded devices is required to attend this talk.

Speakers
avatar for Adrian Stanciu

Adrian Stanciu

Software Engineer, Bitdefender
Adrian Stanciu is a software engineer from Romania, with more than 10 years of professional experience in Linux system programming.He has a bachelor's degree in computer science from Politehnica University of Bucharest and a master's degree in computer and network security from the... Read More →



Thursday October 5, 2023 15:15 - 16:15 MDT
Cottonwood 2/3

15:15 MDT

From Your First Line of Code to Your Largest Repo: How Visual Studio Code Can Help You Develop More Efficiently in C++
Visual Studio Code continues to evolve to be a powerful yet lightweight code editor that can solve all of your complex C++ needs. This can be anything from remote development to debugging build scripts, whether for small hobby projects or repos with hundreds of contributors. Join us to learn more about the newest productivity features added to Visual Studio Code such as easy compiler configuration for IntelliSense, accessing your code’s call hierarchy, creating declarations and definitions, and debugging your CMake build scripts. We will be covering everything from techniques for setting up a C++ environment faster from scratch to working with remote development environments at scale. After this talk, you will know all about how to make the most of the latest C++ Visual Studio Code tools to understand your codebase more quickly.


Speakers
avatar for Alexandra Kemper

Alexandra Kemper

Alexandra Kemper graduated from the University of Virginia with a BS in Computer Science. She works at Microsoft as the PM of the C++ Extension.
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 October 5, 2023 15:15 - 16:15 MDT
Cottonwood 8/9

15:15 MDT

Regular, Revisited
“Regular” is not exactly a new concept. If we reflect back on STL and its design principles, as best described by Alexander Stepanov in his “Fundamentals of Generic Programming” paper, we see that regular types naturally appear as necessary foundational concepts in programming. Why do we need to bother with such taxonomies? Because STL assumes such properties about the types it deals with and imposes such conceptual requirements for its data structures and algorithms to work properly.
STL vocabulary types such as string_view, span, optional, expected etc., raise new questions regarding values types, whole-part semantics, copies, composite objects, ordering and equality.
Designing and implementing regular types is crucial in everyday programming, not just library design. Properly constraining types and function prototypes will result in intuitive usage; conversely, breaking subtle contracts for functions and algorithms will result in unexpected behavior for the caller.
This talk will explore the relation between Regular types (plus other concepts) and STL constructs, with examples, common pitfalls and guidance.

Speakers
avatar for Victor Ciura

Victor Ciura

Principal Engineer, Visual C++ / Microsoft
Victor Ciura is a Principal Engineer on the Visual C++ team, helping to improve the tools he’s been using for years. Leading engineering efforts across multiple teams working on making Visual Studio the best IDE for C++ Game developers.   Before joining Microsoft, he programmed... Read More →


Thursday October 5, 2023 15:15 - 16:15 MDT
Maple 3/4/5

15:50 MDT

Evolution of a Median Algorithm
You won’t find std::median in <algorithm>. Should it be? Come on a journey to explore various implementations of median(), starting from specific use cases to progressively more generic versions. We’ll tune for performance and integrate more advanced features like execution policies and concepts. We’ll discuss the pros and cons of various approaches, and you can make your own decision about whether this algorithm and related statistical functions belong in the Standard Library.

Speakers
avatar for Pete Isensee

Pete Isensee

Engineering Director, Meta
Pete Isensee has been in the digital entertainment business since 1994. He's programmed video games, shipped three generations of Xbox consoles at Microsoft, created VR experiences at HBO, published dozens of technical articles, and taught C++ tips & tricks to game developers worldwide... Read More →


Thursday October 5, 2023 15:50 - 16:20 MDT
Adams

16:45 MDT

C++23: An Overview of Almost All New and Updated Features
As I have done for previous C++ Standard versions, I will explore almost all new and updated C++ features that come with the C++23 standard. C++23 is not as big of an update as C++20 was, but it does contain numerous new and updated features to both the core language and the Standard Library. The goal of this session is not to discuss all new and changed features in detail, as that is not possible in a one-hour session. Instead, at the end of the session, you should have a high-level overview of everything that's new or changed in C++23, and it might even change how you are using existing features.

The session will touch on the following core language and Standard Library topics.

C++23 core language changes include explicit object parameters (deducing this), if consteval, multidimensional subscript operators, built-in decay copy support, ability to mark unreachable code, support for specifying platform-independent assumptions, named universal character escapes, and more.

C++23 Standard Library changes include string formatting improvements, formatting of entire ranges, standard named modules std and std.compat, new containers flat_map and flat_set, multidimensional span aka mdspan, a standard generator coroutine, monadic operations on optionals, working with stacktraces at run time, many changes to the ranges library, std::expected as an alternative to exceptions, and more.

Throughout the session, the slides will contain references to other CppCon sessions with more details on specific topics.

Speakers
avatar for Marc Gregoire

Marc Gregoire

Software Architect, Nikon Metrology
MARC GREGOIRE is a software project manager and software architect from Belgium. He graduated from the University of Leuven, Belgium, with a degree in "Burgerlijk ingenieur in de computer wetenschappen" (equivalent to a master of science in engineering in computer science). The... Read More →


Thursday October 5, 2023 16:45 - 17:45 MDT
Adams

16:45 MDT

Building Bridges: Leveraging C++ and ROS for Simulators, Sensor Data and Algorithms
When talking about developing mission-critical software in robotics, it becomes imperative to have a robust foundation of validation and verification. Collecting data from test runs and setting up the infrastructure and logistics can take a lot of time and resources. Simulation and testing of different scenarios is a very robust alternative and is easily scalable. It is also very convenient for testing scenarios that would be difficult to replicate on the actual machine owing to safety concerns. To develop the simulation software for any production intent system, the natural language of choice will be C++ due to supporting cross-platform compatibility and real-time performance.

There are a wide array of vendors offering simulators, but each simulator implementation exposes a different interface and works with different data types. Since the application should not have to be modified to run in simulation, a software component is needed that can translate communications between the simulator and client applications. This component, known as a communication bridge, is responsible for translating data from virtual sensors in the simulator including commands and control signals from the application. Often, simulators from different vendors come with some type of communication bridge, but they are not standardized and make it difficult to switch simulators or use them for co-simulation. If we can design an extensible framework where different simulators can be integrated easily, we can greatly simplify these use cases.

To address this issue, we propose an approach for developing communication bridges that will have well-defined interfaces to easily integrate with a variety of robotics simulators using C++ and ROS 2, a very widely used middleware framework in robotics. With the design presented, we will be able to generalize the logic of data exchange and command feedback loops for a reference autonomous driving application and leave simulator-specific details like user-facing APIs, supported sensors and environments to be handled by classes that will implement the defined abstractions. We will also talk about a crucial requirement that motivates simulation scenarios and testing called deterministic execution. In a deterministic environment, the tests are reproducible as well as the deterministic nature simplifies debugging by executing the software in a known state at every instant. We will elaborate on how we were able to achieve this by walking through a specific implementation of the communication bridge and using our execution management framework in C++.

Speakers
avatar for Cesar Gerardo Bravo Conejo

Cesar Gerardo Bravo Conejo

Robotics Software Engineer, Apex.AI
Cesar Gerardo Bravo Conejo is an autonomous and mobile robotics application passionate.Gerardo currently works for Apex.AI specializing in autonomous driving stack performance optimization using ROS 2. Gerardo has also worked for the automotive industry implementing computer vision... Read More →
avatar for Divya Aggarwal

Divya Aggarwal

Software Engineer, Apex.AI
Divya Aggarwal is an application engineer working for Apex.AI building safety critical real time robotics software. She is an expert in C++11/14/17 and robotics software frameworks like ROS 2. She is experienced in the entire self-driving software stack from building interfaces with... Read More →


Thursday October 5, 2023 16:45 - 17:45 MDT
Cottonwood 8/9

16:45 MDT

Khronos APIs for Heterogeneous Compute and Safety: SYCL and SYCL SC
ISO C++ mdspan/executors

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 Nevin  Liber

Nevin Liber

Nevin “🙂” Liber is a Computer Scientist in the ALCF (Argonne Leadership Computing Facility) division of Argonne National Laboratory, where he works on Kokkos and Aurora. He also represents Argonne on the SYCL and C++ Committees, the latter as Admin Chair, Vice Chair of LEWGI/SG18... Read More →
avatar for Verena Beckham

Verena Beckham

VP of Safety Engineering, Codeplay Software
Verena Beckham is the VP of Safety Engineering at Codeplay Software. She helped initiate and is now the chair of the SYCL SC Working Group within Khronos, which is defining a version of SYCL that can be more easily safety-certified. Before becoming VP she was a compiler engineer... Read More →


Thursday October 5, 2023 16:45 - 17:45 MDT
Cottonwood 2/3

16:45 MDT

Tracy: A Profiler You Don't Want to Miss
Traditional profilers are prone to skew profiling results due to overhead and time resolution constraints. Moreover, results are commonly presented in some aggregated fashion (e.g., symbol tables, flame graphs, call graphs, etc.) which are unable to pin-point anomalies in a timeline. While insightful, this methodology obfuscates the "when and where" aspect of performance issues, which can lead to rabbit holes and your time wasted.

The Tracy profiler takes a different stance, putting the timeline in the front row. This helps on the identification of pathological cases, and on the performance analysis of specific portions of the program execution. Tracy also enables real-time performance analysis: you can interact with the profiler on-the-fly, as your program runs. While Tracy encourages manual code instrumentation through its minimally invasive, low-overhead, nanosecond resolution annotations, it still supports the more traditional, automatic call stack sampling approach; what's more, there is support for "selective" call stack sampling instrumentation. Even GPU activity can be instrumented and correlated alongside with the CPU timeline. Besides its performance profiling capabilities, Tracy also provides a variety of useful tracing utilities, such as plots, frame delimiters, memory allocation trackers, messages, and plenty more.

This talk will showcase Tracy and make a case as to why it has been an unparalleled tool to assist with research tech transfers at Adobe, as well as in production code, to locate, understand and optimize hot-spots. Tracy is also free and open source, so there's no excuse not to give it a try!

Speakers
avatar for Marcos Slomp

Marcos Slomp

Senior Research Engineer, Adobe
Marcos Slomp is a research engineer at Adobe focused on transferring research to products. He is particularly interested in getting the most out of GPU hardware for interactive image processing, 3D graphics and computer vision tasks. Making pixels look prettier and refresh quickly... Read More →


Thursday October 5, 2023 16:45 - 17:45 MDT
Maple 3/4/5

18:00 MDT

Meet the Presenters Banquet
The Meet the Speakers Banquet is open to all attendees. Ticket required. Invitation is included with "Full" conference registration and is also available as a separate, stand-alone registration.

This is your opportunity to meet and discuss with the main program speakers 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 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 Daisy Hollman

Daisy Hollman

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 →


Thursday October 5, 2023 18:00 - 20:00 MDT
Adams

20:30 MDT

Lightning Talks
5 minute "byte" size talks V2.0

Register to give a Lightning talk! Remember to select October 5th for the time slot.

Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, Sonar
Phil is the original author of the C++ test framework, Catch2, and composable command line parser, Clara. As Developer Advocate at Sonar he's involved with SonarQube, SonarLint and SonarCloud, particularly in the context of C++. He's also a member of the ISO C++ standards committee... Read More →


Thursday October 5, 2023 20:30 - 22:00 MDT
Adams

20:30 MDT

Open Content: Jon Kalb, Eduardo Madrid: - "Empower Your Code With Programmable Money: Bitcoin"
Software applications are not self-sufficient for the vital aspect of collecting money or payment, they require "payment rails" that are unreliable (charge-backs, freezes, counterparty risk, lack of inclusivity, ...). These problems show the need for an internet-native form of money: Bitcoin

An application that uses Bitcoin achieves transaction finality and has no exposure to counterparty risk which are impossible with traditional monies.  At the same time it is open to all users including the unbanked and non-persons such as internet services without the limit of national borders. 

In addition to building on top of the Bitcoin protocol, Bitcoin itself is programmable through Bitcoin Script. This creates the opportunities for us, as software engineers, to build applications that will continue to change the world.

We’ll open the discussion by telling you the Bitcoin Origin Story and explaining the Bitcoin White Paper.

We cover the basics of bitcoin programming with simple examples and move on to more advanced topics like "Hash Timed Lock Contracts", (HTLCs) to understand the remarkably simple, yet powerful Lightning Network. 

We invite you to join us to give it a new meaning to "programming with Value Semantics"!


Speakers
avatar for Eduardo Madrid

Eduardo Madrid

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 →
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 →


Thursday October 5, 2023 20:30 - 22:00 MDT
Cottonwood 8/9
 
Friday, October 6
 

08:00 MDT

Open Content: Elmar Westphal - "Using Fixed Precision Accumulators for Better Reproducibility"
In floating point calculations, the order of operations can change the results and the assertion (a+b)+c==a+(b+c) often fails. Similar problems may arise in parallel or distributed environments, where i.e. the distribution of data, the grouping of threads or the undefined order of atomic operations may influence the results. While the results are often "good enough", they may differ on different computers or between different runs, making debugging even more difficult and raising suspicion among customers and management about the correctness of the code. In this talk I will show by simple examples that these differences exist and explain where they come from. And, of course, why simply replacing float by double is often a non-solution. Afterwards I will introduce fixed precision addition as a possible remedy for certain use-cases. I will present a simple-to-use class template that will return bit-perfect results for a series of additions, regardless of order, architecture etc., as long as all (intermediary) results stay within a pre-set range. I will explain how significant parts of the necessary conversions can be done at compile time to keep the runtime and memory overhead low. Furthermore, I will discuss where the use of this class may or must fail.

Speakers
avatar for Elmar Westphal,

Elmar Westphal,

Scientific Programmer, Forschungszentrum Juelich
Elmar Westphal has been working as a programmer and cluster architect at Forschungszentrum Juelich for more than 15 years. He's most recently ported simulation programs from different fields of computational physics to single- and multi-GPU systems and developed CUDA-based building... Read More →


Friday October 6, 2023 08:00 - 08:45 MDT
Cottonwood 8/9

09:00 MDT

C++ in the Developing World: Why it Matters
The talk is an exploration of the importance of C++ as a language for writing
efficient code for older hardware which is easier to access in the developing world.

It will also look into the C++ language as a platform for education about
software due to the large amount of “real world” software that has already been
written in the language.

It will also touch on tooling and resources for programming on resource con-
strained systems

Speakers
avatar for Mathew Benson

Mathew Benson

Software Engineer, Independent
Mathew Benson is a graduate computer scientist and entrepreneur living in Nairobi, Kenya. He has been working with and researching on computers and programming and how to practically apply it well for several years, still learning and enjoying the journey. Mathew has worked with several... Read More →


Friday October 6, 2023 09:00 - 09:30 MDT
Cottonwood 2/3

09:00 MDT

Optimizing Away Virtual Functions May Be Pointless
We all know that Virtual Functions Should Be Avoidedâ„¢. A great many tutorials exist for replacing virtual functions with compile-time polymorphism mechanisms, such as std::variant and templates. But is that feeling justified? Are virtual functions truly slower? By how much? Does it matter for your particular use case? What costs do their alternatives carry?

In this lecture we'll try and understand where that impression came from, what virtual functions do that make them slower and how all of that interacts with modern CPU architectures. We'll also explore the limits of benchmarks for answering those questions.

This lecture may not supply you with answers, but it will supply you with better questions.

Speakers
avatar for Shachar Shemesh

Shachar Shemesh

Chief Content Creator, Some Assembly Required
Shachar Shemesh has been programming computers since the 8-bit era, and still finds passion in it today. Shachar's professional career has taken him to security, networking, storage and video streaming.Outside his professional career Shachar is... also programming. He has several... Read More →


Friday October 6, 2023 09:00 - 09:30 MDT
Adams

09:00 MDT

Back to Basics: The Rule of Five
Designing a class to behave correctly when copied and moved takes a lot of thought. The Core Guidelines provide guidance to streamline that work. In this talk we are going to look at the Core Guideline known as "the Rule of Five", how it came about, and is there anything better.

Speakers
avatar for Andre Kostur

Andre Kostur

Software Engineer, Arista Networks
Andre Kostur has been a professional C++ developer for nearly 30 years, and was responsible for introducing and championing the use of C++ in his previous company. He is responsible for forming and leading a C++ Users Group as his current company, routinely presenting on all topics... Read More →


Friday October 6, 2023 09:00 - 10:00 MDT
Maple 3/4/5

09:00 MDT

Iteration Revisited: A safer iteration model for C++
“Safety” is the word on everyone’s lips at the moment. Unfortunately for C++ programmers, one of our most fundamental abstractions — iterators — are fraught with danger. Prone to out-of-bounds memory accesses, unexpected invalidation and dangling, iterators are a UB minefield in which even experts can find themselves in trouble.
Fortunately there is something we can do about it.

In this talk we’ll look at an alternative, safer abstraction for iterating over sequences and introduce Flux, a new C++20 library implementing these ideas. We’ll see how Flux retains all of the power and flexibility of the existing STL, but greatly reduces the potential for UB through careful design and implementation choices — all while offering compatibility with existing code. We’ll also take a look at performance and examine the cost of universal bounds checking. Spoiler: it’s probably a lot less than you’d think. In fact, we’ll see how Flux code can actually outperform equivalent C++20 Ranges code in some common situations. Finally, we’ll take a quick look at some other quality-of-life improvements that Flux brings.

If you’re interested in the STL and the ranges and algorithms in C++20 and are looking for an easy-to-use way of making your codebase more resilient, then this is the talk for you.

Speakers
avatar for Tristan Brindle

Tristan Brindle

C++ London Uni
Tristan Brindle is a C++ consultant and trainer based in London. With over 15 years C++ experience, he started his career working in high-performance computing in the oil industry in Australia before returning home to his native UK in 2018. He is an active member of the ISO C++ Standards... Read More →


Friday October 6, 2023 09:00 - 10:00 MDT
Cottonwood 8/9

09:35 MDT

Building Consensus on a Set of Rules for Our Massive C++ Codebase
In this talk, we will trace our efforts to build consensus across our Engineering department on how we use C++ at Bloomberg. We will use the example of how we are introducing broader naming conventions across the company’s massive C++ codebase, impacting our package management infrastructure and build tools. We will describe the lessons we’ve learned and the pitfalls we fell into as we were trying to achieve that goal, so that attendees can apply these lessons within their own organizations when introducing their own set of C++ rules.

This will also highlight the value of journalism skills in approaching engineering questions. Most important are the willingness to seek out all sides of a question; being humble enough to truly listen to even your loudest critics; and the endurance to keep asking questions until the issues become completely clear.

Our effort involved input from more than 150 people across many different application and infrastructure teams, many with different needs and coding styles. We then developed a set of rules that worked, though we also realize that the right answer will likely require ongoing flexibility.

Speakers
avatar for Sherry Sontag

Sherry Sontag

Technical Expert, Bloomberg LP
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 →


Friday October 6, 2023 09:35 - 10:05 MDT
Cottonwood 2/3

09:35 MDT

Designing Fast and Efficient List-like Data Structures
Ordered data structures like lists, queues, or stacks consume large shares of compute and memory footprints of many applications. However, the design of such containers, including the containers in the C++ STL, has mostly stayed the same in the past few decades. With computer architectures and performance shifting towards multi-core with multiple layers of caching in the past 10-15 years, these fundamental data structures designed for single-core architectures often become performance hot spots. This talk describes the process of designing an ordered, list-like data structure well suited for modern CPUs starting with the naive approach for a linked list and ending with a design optimized for today's computers, showing a drastic reduction in cache misses and thus showing 2+ times better performance compared to their STL equivalents.

Speakers
YB

Yannic Bonenberger

EngFlow
Yannic Bonenberger is a Software Engineer at EngFlow working on distributing builds across 10,000s of CPU cores. During his career, he has worked with many customers to reduce build times of large C++ applications from 3 hours or more to less than 20 minutes.Before EngFlow, Yannic... Read More →


Friday October 6, 2023 09:35 - 10:05 MDT
Adams

10:30 MDT

Back to Basics: Forwarding References
This talk is a part of the Back To Basics track and provides the introduction to Forwarding References. During the talk, we will learn why those references are so important that they got a special name and how to use `std::forward` with them. We will put a lot of effort into understanding when we are dealing with them in the source code, and when it is not the case. We will also try to answer the question if they really deserve a "universal reference", as some people call them, and see how they may improve the overload set we write. Finally, we will learn about potential pitfalls they may introduce and how to handle them.

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 →


Friday October 6, 2023 10:30 - 11:30 MDT
Maple 3/4/5

10:30 MDT

Surveying the Community: What Could Possibly Go Wrong?
There are 3 major researches in C++ community nowadays. Developer Ecosystem research by JetBrains is conducted yearly, with the infographics and the raw data published for free for everyone. Since launch we learnt many insights on how to collect and process the data to get the results which are not presenting our thoughts on state of the art but close to the real world. The knowledge starts from the way to ask questions and goes to the way we interpret the answers, including the “facepalm” issues we meet yearly.

In this talk, I'll feature the results of the recent C++ community surveys, make some comparisons, and will try to showcase how to treat the differences. We'll also dive into the survey methodology aspects, learning how to remove brand, targeting and sampling biases, as well as see how a "properly" asked question changes the data in our C++ reality. This knowledge is crucial for everyone who rely on such researches and want to use them in a correct way. Come and learn how the magic numbers are collected and how to apply them to your decisions!

Speakers
avatar for Anastasia Kazakova

Anastasia Kazakova

PMM, Marketing Lead, JetBrains
As a C and C++ software developer, Anastasia Kazakova created real-time *nix-based systems and pushed them to production for 8 years. She worked as an intern in Microsoft Research, Networking department, outsourced in Telecom, and launched the 4G network. She has a passion for networking... Read More →



Friday October 6, 2023 10:30 - 11:30 MDT
Cottonwood 8/9

10:30 MDT

C++ Memory Model: from C++11 to C++23
In the realm of C++ development, threading and memory management play a crucial role in crafting highly parallel and optimized programs. However, the absence of a memory model in C++98 posed challenges. Thankfully, with the advent of C++11, significant changes were introduced, including the introduction of a memory model, which brought forth a plethora of new and exciting tools for developers to leverage. This talk aims to delve into the realm of the C++ memory model, showcasing the arsenal of tools at our disposal. Attendees will gain insights into how CPUs and compilers optimize code and understand the criticality of adhering to the memory model correctly. Practical guidelines on utilizing these tools effectively will also be explored.

Throughout the talk, we will illustrate practical examples and share best practices for utilizing the diverse set of tools now available to us. From atomic operations to memory barriers, we will explore the range of techniques that allow us to develop robust and thread-safe code.

This talk will also illustrate the newer tools from newer C++ standards like JThread and so this talk will show how memory model is used and how it advanced since C++11

Speakers
avatar for Alex Dathskovsky

Alex Dathskovsky

Director of SW eng, Speedata.io
Alex has over 16 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... Read More →


Friday October 6, 2023 10:30 - 11:30 MDT
Adams

10:30 MDT

Abstraction Patterns for Cross Platform Development
Writing code that's intended to work across multiple platforms; be it hardware, graphics APIs, online storefronts or operating systems can be rather difficult. Many software engineers struggle when it comes to abstracting code especially junior engineers be it for a commercial software or a hobby project. To make matters worse, there's often not a lot of materials covering such as advance topic. This presentation aims to discuss several abstraction patterns that can be used to write cross platform code using the features and tools that C++ and operating system offers, from the bad to the good as well as the benefits and pitfalls of each method in terms of complexity, maintainability and performance. A case study of several cross-platform frameworks will also be included in the presentation. Hopefully this presentation will serve as a starting point and become the main reference for engineers across multiple experience levels across various industries when writing cross platform code.

Speakers
avatar for Al-Afiq Yeong

Al-Afiq Yeong

Senior Systems Programmer, Criterion Games | Electronic Arts
Al-Afiq Yeong is a Software Engineer currently working in the Engine team at Criterion. His day to day involves performance monitoring games, making sure memory gets managed efficiently and developing new technologies that will empower future games developed with Frostbite. Prior... Read More →


Friday October 6, 2023 10:30 - 11:30 MDT
Cottonwood 2/3

12:00 MDT

Open Content: Dr. Walter E Brown "Talks That Don't Fit Elsewhere (part 3)"
This is the third of a collection of presentations that are individually too short for a full hour yet too long for a 5-minute lightning talk.  Come join us (bring your lunch!) as we explore these three topics for about 20 minutes each:
- "Neither East nor West const"
- "Why Are They Called lambdas?"
- "Tips to Improve Technical Writing"

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 almost 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 →


Friday October 6, 2023 12:00 - 13:00 MDT
Cottonwood 2/3

13:30 MDT

Getting Started with C++
Getting started with C++ can be intimidating, especially if you are learning on your own. Where do you even start?!

This talk walks you through getting started with C++, from obtaining a compiler toolchain and useful libraries, to finding learning resources and deciding whether you should be using source control and continuous integration. If you are already on your C++ journey, there’s likely stuff you weren’t familiar with that could make your life a bit easier. If you are a C++ expert, it’s useful to remind yourself of the challenges that beginners face so that we can help them avoid all the mistakes we made along the way.

Speakers
avatar for Michael Price

Michael Price

Senior Product Manager, Microsoft
Michael Price (he/him) is an experienced software engineer, currently working as a Product Manager with the Microsoft C++ team. His experience working at major software companies for over 18 years informs his thinking about how to enable C++ developers around the world to achieve... Read More →


Friday October 6, 2023 13:30 - 14:30 MDT
Cottonwood 2/3

13:30 MDT

Building Effective Embedded Systems: Architectural Best Practices
Embedded development is a complex process that brings together software, electronics, physics, mechanics, and algorithms.
Designing a system with embedded components requires careful consideration of multiple factors.
However, there is a lack of knowledge regarding correct practices in building embedded systems.
In my talk, I will offer valuable insights to enhance the effectiveness of embedded development,
focusing on improving robustness, speed, and maintainability.
By addressing the challenges in this field, attendees will gain a deeper understanding of how to design and build embedded systems correctly.
Through practical advice and best practices,
I aim to empower developers to overcome obstacles and achieve successful outcomes in their projects.

Speakers
avatar for Gili Kamma

Gili Kamma

R&D Manager, Blitz electric motors
Gili Kamma has a B.S.c in electrical engineering from Tel-Aviv University, Israel. With almost 20 years of experience developing embedded systems, she has worked across plenty of technical environments, BSP and low-level drivers in C, C++, Python, C#, Java, DB, and Cloud.She is an... Read More →


Friday October 6, 2023 13:30 - 14:30 MDT
Cottonwood 8/9

13:30 MDT

Writing Python Bindings for C++ Libraries: Easy-to-use Performance
The unix philosophy encourages writing small applications that compose well, and unix / linux / sh have provided us with nice chaining tools that let us achieve this. This works well enough, but chaining of processes makes it complicated to actually share memory space, library versions, and memory layouts of various objects. Working within a single programming language (Python for instance), we can script and keep local memory state and chain together things however we like. Think of numpy or pandas as examples.

In this talk we will discuss how we can use boost::python and friends to help us build our C++ libraries as dynamically linked libraries that can be exposed safely as python functions and objects in python programs. This will be done entirely in C++, with Python being the equivalent of a shell for us (helping us invoke our library's methods).

We will use some real-world-inspired examples of libraries as case studies to explore how to design the user facing API for such software, and what kind of nuances to think about while doing so. As a result, the attendees will learn how to go about designing python bindings for their own applications, and how to consider the performance implications of each design choice.

We will discuss, among other things, the following topics:
1. Managing memory to inter-op smoothly with Python, which is garbage collected
2. Inter-operability and conversion between C++ and python data containers
3. Handling multiple threads and background processing
4. Sharing data and pointers across modules
5. Ensuring build system consistency to avoid incompatibility across build environments
6. Some common API design ideas tried and tested in actual applications.

Speakers
avatar for Saksham Sharma

Saksham Sharma

Director, Tower Research Capital
Saksham Sharma is a Director of Quantitative Research Technology at Tower Research Capital LLC, a high frequency trading firm based out of New York. He develops low latency and high throughput trading systems and strategies used for the firm's global quantitative trading. In addition... Read More →


Friday October 6, 2023 13:30 - 14:30 MDT
Maple 3/4/5

13:30 MDT

Better Code: Contracts
Are you confident that the code you write, and the changes you make, are correct? What does “correct” even mean? How do we know the code we write today won’t become a long-term liability? These persistent questions can be enough to suck all the fun out of programming, but it doesn’t have to be that way. In this talk, we’ll look at the connective tissue of good code and show how to keep it strong and supple. There is no need to wait for language features to start using contracts. We’ll suggest replacing code reviews with something better and charting the path to a more hopeful future of software.

Speakers
avatar for Sean Parent

Sean Parent

Sr. Principal Scientist, Adobe
Sean Parent is a senior principal scientist and software architect managing Adobe's Software Technology Lab. Sean first joined Adobe in 1993 working on Photoshop and is one of the creators of Photoshop Mobile, Lightroom Mobile, and Lightroom Web. In 2009 Sean spent a year at Google... Read More →
avatar for Dave Abrahams

Dave Abrahams

Principal Scientist, Adobe
Dave Abrahams is a founding contributor of the Boost C++ Libraries project and the founder of the first annual C++ conference, BoostCon/C++Now. He is a contributor to the C++ standard, and was a principal designer of the Swift programming language. He recently spent seven years at... Read More →


Friday October 6, 2023 13:30 - 14:30 MDT
Adams

14:45 MDT

Behavioral Modeling in HW/SW Co-design Using C++ Coroutines
Faced with the challenge of modeling a hardware IP that is controlled by a processor running C code, we developed two key methodologies that we want to share with the C++ community. The first is “Register Hooking”, where we use the preprocessor to alter the behavior of primitive data type interactions to allow for a model interaction without extensive code alteration. The second methodology is the use of coroutines to define side effects through behavioral models, which constitutes the majority of this talk.

Coroutines have the advantage of representing the parallel nature of hardware in a syntactically friendly way. Using coroutines also avoids several potential synchronization problems that arise with multi-threaded approaches or extensive and nested use of async/future. Complex hardware interactions can be represented with relative ease using coroutines.

Speakers
avatar for Jeffrey Erickson

Jeffrey Erickson

HW/SW Co-Design Architect, Intel FPGA
Jeffrey E Erickson works in HW/SW Codesign Architecture in the Programmable Solutions Group at Intel Corporation. He holds a BS in Electrical and Computer Engineering from the University of Virginia and a doctorate from Rutgers University and UMDNJ. For 15 years he has worked in embedded... Read More →
SS

Sebastian Schoenberg

Sebastian Schoenberg is a Principal Engineer at Intel Corporation and responsible for Intel’s FPGA and eAsic firmware software architecture. After completing his PhD in computer science at the University of Technology in Dresden, Germany, Sebastian joined Intel’s Research Labs... Read More →


Friday October 6, 2023 14:45 - 15:45 MDT
Cottonwood 8/9

14:45 MDT

Great C++ is_trivial
There are many ways to initialize an object in C++, and much time spent analyzing the efficiency of the many options. We then think and rethink and overthink how to avoid copies and if a `std::move` would be more efficient in a certain case.

But if we understand what it means for a type to be trivial most of these questions now become meaningless. We can get all of the efficiency we could hope for, and probably more.

We will look at the trivial type traits, what they mean, and how they affect our code. Will will then examine the benefits of using trivial types and the impact on performance.

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Friday October 6, 2023 14:45 - 15:45 MDT
Cottonwood 2/3

14:45 MDT

CMake Successor Build Systems: A World Tour of Build Systems Towards Better C++ Builds
Recently the C++ community is all about safety and new “successors” programming languages are popping up like Cpp2, Carbon, Val and others to complement C++ towards software security and memory safety.

While it’s very beneficial to design new languages features to support safety, it is equally important to have proper tooling. One key aspect of a programming language’s usability and safety is how the code written can be shipped to end-users and how the software supply chain security can be guaranteed.

Happily the C++ community has been unifying in the last decade from various build systems on CMake. Despite it’s massive adoption it is still criticized for reasons ranging from it’s turing-completeness to the fragmentation of the different CMake styles across codebases. It also lacks important features than newer build systems provide: dependency management, SBOM (Software Bill Of Material) generation, reproducible, hermetic and remote builds.

Newer potential “successors” build systems for C++ (e.g. bpt, GN, Meson, BuildCC) but also polyglot build systems like Bazel and Gradle have been designed to overcome these issues. In this talk we will analyze which choices were made and which benefits they offer. Finally looking at how software supply chain security, static+dynamic code analysis, reproducible, hermetic and remote builds are achieved in their ecosystem.

After looking at an overview of the design decisions and benefits that these “successors” build systems provides, we will identify best practices and provide pragmatic solutions to get all of this today with CMake.

To prove our point we will finally demo SBOM generation, build reproducibility to the single byte and remote builds on a large CMake codebase.

Speakers
avatar for Antonio Di Stefano

Antonio Di Stefano

Software Developer, Software Developer
Antonio (@TheGrizzlyDev) is a DevEx engineer at EngFlow, his main focus is elevating the happiness and productivity of software engineers. Open Source contributor to Natalie, a fast Ruby to C++ transpiler, he spends his spare time on Snazel : the only way to get Snake and Doom run... Read More →
avatar for Damien Buhl

Damien Buhl

co-founder, tipi.build
Damien (alias daminetreg) co-founder and CEO tipi.build is an enthusiast C++ developer. Opensource entrepreneur, CppCon Speaker, GameMaker.fr community founder, Qt for Android contributor, Boost.Fusion maintainer since 2014.


Friday October 6, 2023 14:45 - 15:45 MDT
Maple 3/4/5

14:45 MDT

Better Code: Exploring Validity
Better Code: Exploring Validity

Most developers have at least some notion of the meaning of object, state,
invariant, value, and invalid. On the other hand, it can be surprisingly
difficult to precisely define these words in a way that matches both
intuition and common usage. This difficulty has even led to
divergence within the C++ standard library!

This talk is a journey of discovery where we not only find satisfactory
definitions, but identify practical, good coding practices along the way.
At the end of this talk you'll be able to name implicit contracts,
understand the deep connection between move semantics and exception safety,
and, in general, have a greater appreciation for the meaning of the programs
we write every day.

Speakers
avatar for David Sankel

David Sankel

Principal Architect, Adobe
David Sankel is a Principal Scientist at Adobe and an active member of the C++ Standardization Committee. His experience spans microservice architectures, CAD/CAM, computer graphics, visual programming languages, web applications, computer vision, and cryptography. He is a frequent... Read More →


Friday October 6, 2023 14:45 - 15:45 MDT
Adams

16:15 MDT

Closing Keynote: Andrei Alexandrescu: "Robots Are after Your Job (or at Least the Boring Parts of It): Exploring Generative AI for C++"
Almost a year since the launch of ChatGPT – considered by many as the first truly compelling code generator that translates free-form human language into code – the C++ community continues to grapple with the implications. Reactions range from indifference or skepticism to genuine concern about the future of human programmers.

Although some advanced C++ techniques are already accessible to tools like ChatGPT, certain fundamental aspects remain outside the reach of current and possibly next-generation generative AI tools. This disparity raises pivotal questions: Which parts of the intricate C++ ecosystem can we confidently delegate to generative AI? What uniquely human skills must we retain and refine?

We'll probe the potential and limits of contemporary AI, taking a novel look at the age-old binary search algorithm. Although this algorithm has long been held up as a paragon of efficiency, we challenge that notion. What would ChatGPT have to say about it, and how might it partner with us to refine this cornerstone of algorithmic logic? The conversation opens a window into a future where developers become the "one percenters" of programming—focusing solely on the most cerebral and high-level challenges, while AI takes care of the everyday tasks. Join us to explore this fascinating paradigm shift and reflect on what it means for your own work in and with 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 →


Friday October 6, 2023 16:15 - 18:00 MDT
Adams
 
Saturday, October 7
 

09:00 MDT

Workshop-Onsite "C++ Best Practices" with Jason Turner
C++ Best Practices is a two-day onsite training course with programming examples, taught by Jason Turner. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
“C++ Best Practices” is designed to help programmers elevate the quality of their C++ code. This course is intended for developers who have a beginner to intermediate knowledge of C++. You will learn how to write programs that perform well by default, are easier to maintain, memory safe, and have better compile times. We will cover best practices for new features added in C++17/20/23 and how to use the tools available to maintain code quality. Come prepared to interact and discuss.

Please see: https://cppcon.org/class-2023-best-practices/

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Saturday October 7, 2023 09:00 - 17:00 MDT
Cottonwood 2

09:00 MDT

Workshop-Onsite "Performance and Efficiency in C++ for Experts, Future Experts, and Everyone Else" with Fedor Pikus
Performance and Efficiency in C++ for Experts, Future Experts, and Everyone Else is a two-day onsite training course with programming exercises, taught by Fedor Pikus. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
This class is about performance and efficiency, spanning the entire range from the fundamentals of the hardware to the peculiarities of compiler optimizations. You will learn, on practical examples extracted from real-life programs, how to measure, analyze, and improve the performance of your programs. But most importantly, you will learn how to understand why your programs, compilers, and hardware behave the way they do. Some of the material will be basic and fundamental, some cutting-edge and esoteric, and the rest somewhere in between. All explanations will be reinforced with hands-on exercises, which you get to do in the classroom and can explore later in detail if you want to learn more.

In the early days of computing, programming was hard. The processors were slow, the memory was limited, the compilers were primitive, and nothing could be achieved without a significant effort. The programmer had to know the architecture of the CPU, the layout of the memory, and when the compiler did not cut it, the critical code had to be written in assembler.

Then things got better. The processors were getting faster every year, the number that used to be the capacity of a huge hard drive became the size of the main memory in an average PC, and the compiler writers learned a few tricks to make programs faster. The programmers could spend more time actually solving problems. This was reflected in the programming languages and design styles: between the higher-level languages and evolving design and programming practices, the programmers’ focus shifted from what they wanted to say in code to how they wanted to say it.
[..]

Please see: https://cppcon.org/class-2023-performance-and-efficiency/

Speakers
avatar for Fedor Pikus

Fedor Pikus

Technical Fellow, Siemens
Fedor G Pikus is a Technical Fellow and head of the Advanced Projects Team in Siemens Digital Industries Software. His responsibilities include planning the long-term technical direction of Calibre products, directing and training the engineers who work on these products, design... Read More →


Saturday October 7, 2023 09:00 - 17:00 MDT
Cottonwood 7

09:00 MDT

Workshop-Onsite "Structured Concurrency in C++" with Mateusz Pusz
Structured Concurrency in C++ is a two-day onsite training course with programming examples, taught by Mateusz Pusz. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
Today, C++ software is increasingly asynchronous and parallel, a trend that is likely only to continue going forward. While the C++ Standard Library has a rich set of concurrency primitives and lower-level building blocks, we lack a standard framework for asynchrony and parallelism that C++ programmers desperately need.

Asynchrony and parallelism appear everywhere, from processor hardware interfaces to networking, to file I/O, to GUIs, to accelerators. Every C++ domain and every platform needs to deal with asynchrony and parallelism, from scientific computing to video games to financial services, from the smallest mobile devices to your laptop to GPUs in the world’s fastest supercomputer.

This training shows that concurrency is not only about the C++ Standard Library threading and synchronization low-level tools. During the workshop, you will learn how to write efficient, asynchronous, and highly concurrent code without the need for any manual synchronization between threads, leading to simpler code and faster runtimes. During the hands-on exercises, you will implement coroutine tools from scratch and create parallel processing pipelines with a new framework called Senders/Receivers proposed for standardization as a part of C++26. The Senders/Receivers framework is publicly available on GitHub so that it can be used in production immediately without the need to wait for the next C++ release.

During the workshop, we will work with the latest version of the compiler thanks to the Compiler Explorer, so no special environment preparation is needed.

Please see: https://cppcon.org/class-2023-structured-concurrency/

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 →


Saturday October 7, 2023 09:00 - 17:00 MDT
Cottonwood 3
 
Sunday, October 8
 

09:00 MDT

Workshop-Onsite "C++ Best Practices" with Jason Turner
C++ Best Practices is a two-day onsite training course with programming examples, taught by Jason Turner. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
“C++ Best Practices” is designed to help programmers elevate the quality of their C++ code. This course is intended for developers who have a beginner to intermediate knowledge of C++. You will learn how to write programs that perform well by default, are easier to maintain, memory safe, and have better compile times. We will cover best practices for new features added in C++17/20/23 and how to use the tools available to maintain code quality. Come prepared to interact and discuss.

Please see: https://cppcon.org/class-2023-best-practices/

Speakers
avatar for Jason Turner

Jason Turner

Trainer/Speaker/YouTuber, 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!


Sunday October 8, 2023 09:00 - 17:00 MDT
Cottonwood 2

09:00 MDT

Workshop-Onsite "Performance and Efficiency in C++ for Experts, Future Experts, and Everyone Else" with Fedor Pikus
Performance and Efficiency in C++ for Experts, Future Experts, and Everyone Else is a two-day onsite training course with programming exercises, taught by Fedor Pikus. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
This class is about performance and efficiency, spanning the entire range from the fundamentals of the hardware to the peculiarities of compiler optimizations. You will learn, on practical examples extracted from real-life programs, how to measure, analyze, and improve the performance of your programs. But most importantly, you will learn how to understand why your programs, compilers, and hardware behave the way they do. Some of the material will be basic and fundamental, some cutting-edge and esoteric, and the rest somewhere in between. All explanations will be reinforced with hands-on exercises, which you get to do in the classroom and can explore later in detail if you want to learn more.

In the early days of computing, programming was hard. The processors were slow, the memory was limited, the compilers were primitive, and nothing could be achieved without a significant effort. The programmer had to know the architecture of the CPU, the layout of the memory, and when the compiler did not cut it, the critical code had to be written in assembler.

Then things got better. The processors were getting faster every year, the number that used to be the capacity of a huge hard drive became the size of the main memory in an average PC, and the compiler writers learned a few tricks to make programs faster. The programmers could spend more time actually solving problems. This was reflected in the programming languages and design styles: between the higher-level languages and evolving design and programming practices, the programmers’ focus shifted from what they wanted to say in code to how they wanted to say it.
[..]

Please see: https://cppcon.org/class-2023-performance-and-efficiency/

Speakers
avatar for Fedor Pikus

Fedor Pikus

Technical Fellow, Siemens
Fedor G Pikus is a Technical Fellow and head of the Advanced Projects Team in Siemens Digital Industries Software. His responsibilities include planning the long-term technical direction of Calibre products, directing and training the engineers who work on these products, design... Read More →


Sunday October 8, 2023 09:00 - 17:00 MDT
Cottonwood 7

09:00 MDT

Workshop-Onsite "Structured Concurrency in C++" with Mateusz Pusz
Structured Concurrency in C++ is a two-day onsite training course with programming examples, taught by Mateusz Pusz. It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, October 7th and 8th, 2023 (immediately following the conference). Lunch is included.

Course Description
Today, C++ software is increasingly asynchronous and parallel, a trend that is likely only to continue going forward. While the C++ Standard Library has a rich set of concurrency primitives and lower-level building blocks, we lack a standard framework for asynchrony and parallelism that C++ programmers desperately need.

Asynchrony and parallelism appear everywhere, from processor hardware interfaces to networking, to file I/O, to GUIs, to accelerators. Every C++ domain and every platform needs to deal with asynchrony and parallelism, from scientific computing to video games to financial services, from the smallest mobile devices to your laptop to GPUs in the world’s fastest supercomputer.

This training shows that concurrency is not only about the C++ Standard Library threading and synchronization low-level tools. During the workshop, you will learn how to write efficient, asynchronous, and highly concurrent code without the need for any manual synchronization between threads, leading to simpler code and faster runtimes. During the hands-on exercises, you will implement coroutine tools from scratch and create parallel processing pipelines with a new framework called Senders/Receivers proposed for standardization as a part of C++26. The Senders/Receivers framework is publicly available on GitHub so that it can be used in production immediately without the need to wait for the next C++ release.

During the workshop, we will work with the latest version of the compiler thanks to the Compiler Explorer, so no special environment preparation is needed.

Please see: https://cppcon.org/class-2023-structured-concurrency/

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Principal Engineer | C++ Trainer, Epam Systems | Train IT
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 →


Sunday October 8, 2023 09:00 - 17:00 MDT
Cottonwood 3
 
Monday, October 9
 

09:00 MDT

Workshop-Online "Advanced and Modern C++ Programming: The Tricky Parts" with Nicolai Josuttis
Advanced and Modern C++ Programming: The Tricky Parts is a three-day online training course with programming examples, taught by Nicolai Josuttis. It has been one of our most popular classes. It is offered online Monday, Tuesday and Wednesday, October 9th – 11th, 2023, from 09:00 to 17:00 Aurora time (MDT), 11:00 to 19:00 EDT, 17:00 to 01:00 CEST, (following the conference).

Course Description
Whenever I give C++ training I run into the same topics of “half knowledge”. We use a lot of pretty complicated features (e.g., templates, move semantics, and smart pointers) in our day-to-day programming without full understanding. Most of the time this works fine, but sometimes not. Even vectors and strings may cause surprises (e.g., to understand when and how memory is allocated).

This tutorial will discuss all these “tricky fundamental” C++ features application programmers see and use day by day. We will motivate them, understand them, and see how they should be used in practice. As a result, you will understand C++ a lot better and advance to the next level of an experienced C++ programmer.

As a long-time member of the C++ standards committee and experienced trainer, Nicolai will also give useful background information about purpose and design decisions.

Please see: https://cppcon.org/class-2023-tricky-parts/

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Monday October 9, 2023 09:00 - 15:00 MDT
_1
 
Tuesday, October 10
 

09:00 MDT

Workshop-Online "Advanced and Modern C++ Programming: The Tricky Parts" with Nicolai Josuttis
Advanced and Modern C++ Programming: The Tricky Parts is a three-day online training course with programming examples, taught by Nicolai Josuttis. It has been one of our most popular classes. It is offered online Monday, Tuesday and Wednesday, October 9th – 11th, 2023, from 09:00 to 17:00 Aurora time (MDT), 11:00 to 19:00 EDT, 17:00 to 01:00 CEST, (following the conference).

Course Description
Whenever I give C++ training I run into the same topics of “half knowledge”. We use a lot of pretty complicated features (e.g., templates, move semantics, and smart pointers) in our day-to-day programming without full understanding. Most of the time this works fine, but sometimes not. Even vectors and strings may cause surprises (e.g., to understand when and how memory is allocated).

This tutorial will discuss all these “tricky fundamental” C++ features application programmers see and use day by day. We will motivate them, understand them, and see how they should be used in practice. As a result, you will understand C++ a lot better and advance to the next level of an experienced C++ programmer.

As a long-time member of the C++ standards committee and experienced trainer, Nicolai will also give useful background information about purpose and design decisions.

Please see: https://cppcon.org/class-2023-tricky-parts/

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Tuesday October 10, 2023 09:00 - 15:00 MDT
_1
 
Wednesday, October 11
 

09:00 MDT

Workshop-Online "Advanced and Modern C++ Programming: The Tricky Parts" with Nicolai Josuttis
Advanced and Modern C++ Programming: The Tricky Parts is a three-day online training course with programming examples, taught by Nicolai Josuttis. It has been one of our most popular classes. It is offered online Monday, Tuesday and Wednesday, October 9th – 11th, 2023, from 09:00 to 17:00 Aurora time (MDT), 11:00 to 19:00 EDT, 17:00 to 01:00 CEST, (following the conference).

Course Description
Whenever I give C++ training I run into the same topics of “half knowledge”. We use a lot of pretty complicated features (e.g., templates, move semantics, and smart pointers) in our day-to-day programming without full understanding. Most of the time this works fine, but sometimes not. Even vectors and strings may cause surprises (e.g., to understand when and how memory is allocated).

This tutorial will discuss all these “tricky fundamental” C++ features application programmers see and use day by day. We will motivate them, understand them, and see how they should be used in practice. As a result, you will understand C++ a lot better and advance to the next level of an experienced C++ programmer.

As a long-time member of the C++ standards committee and experienced trainer, Nicolai will also give useful background information about purpose and design decisions.

Please see: https://cppcon.org/class-2023-tricky-parts/

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (www.josuttis.com) is well-known in the community for his authoritative books and talks. For more than 20 years he has been a member of the C++ Standard Committee. He is the author of several worldwide best-sellers, including:- C++20: The Complete Guide- C++17: The... Read More →


Wednesday October 11, 2023 09:00 - 15:00 MDT
_1
 
  • Timezone
  • Filter By Date CppCon 2023 Sep 27 -Oct 11, 2023
    • September 2023
      SunMonTueWedThuFriSat
       12
      3456789
      10111213141516
      17181920212223
      24252627282930
      October 2023
      SunMonTueWedThuFriSat
      1234567
      891011121314
      15161718192021
      22232425262728
      293031 
  • Filter By Venue 6700 North Gaylord Rockies Boulevard, Aurora, CO 80019, USA
  • Filter By Type
  • • Back to Basics
  • • Business
  • • Education/Coaching
  • • Embedded
  • • Implementation Issues
  • • ISO Meeting
  • • Modern Features
  • • Open Content
  • • Reasoning About Code
  • • Robotics
  • • Safe and Secure
  • • Scientific Computing
  • • Social
  • • Software Design
  • • Tooling
  • • Workshop
  • Author Book Signing


Filter sessions
Apply filters to sessions.