Loading…
Attending this event?
CppNorth 2024, The Canadian C++ Conference
July 21-24, 2024 • Toronto, Canada
At the Microsoft Canadian Headquarters (Suite 4400)
In: CIBC SQUARE, 81 Bay St., Toronto, ON M5J 0E7, Canada
Sunday, July 21
 

17:30 EDT

Registration/Reception
Sunday July 21, 2024 17:30 - 19:30 EDT
Welcome to the conference.  See your friends, get your badge, and have drinks and snacks.
Sunday July 21, 2024 17:30 - 19:30 EDT
 
Monday, July 22
 

08:45 EDT

Opening Keynote: The Aging Programmer by Kate Gregory
Monday July 22, 2024 08:45 - 10:30 EDT
We all get older every day. But when are you old? Do the natural changes of aging make it harder to be a good programmer? Do you have to stop or can you keep going? What can you do to make both aging and programming more pleasant for yourself? How can you help the older people you know, and set up systems that will help you when you need it? When it comes to ensuring a pleasant and long old age, it's not too late -- and it's also never too soon.
Speakers
avatar for Kate Gregory

Kate Gregory

Partner, Gregory Consulting
Kate Gregory is an author, sought-after conference speaker, trainer, and partner at Gregory Consulting. Kate has been using C++ since before Microsoft had a C++ compiler. She is an early adopter of many software technologies and tools, and a well-connected member of the software development... Read More →
Monday July 22, 2024 08:45 - 10:30 EDT
Track B

10:30 EDT

Break
Monday July 22, 2024 10:30 - 11:00 EDT
TBA
30 minute Snack & Beverage break;
Monday July 22, 2024 10:30 - 11:00 EDT
TBA

11:00 EDT

C++ is a metacompiler
Monday July 22, 2024 11:00 - 12:00 EDT
C++17 and higher offer enough grammatical tools to support meta compilation.

A meta compiler is a paradigm of self similarity where at compile time one can lex, parse, and translate domain specific languages (embedded in string literals) to meta assembly code analogous to object code. This meta assembly can further be passed to a general purpose compile time engine creating constexpr functions for use at either compile time or run time.

This talk will demonstrate how this is possible, as well as the benefits in doing so.
Speakers
avatar for Daniel Nikpayuk

Daniel Nikpayuk

Daniel Nikpayuk
I am an Inuvialuk from Inuvik/Aklavik. I have a bachelors degree in mathematics. My personal technology goal is to build a programming language to assist in Indigenous multimedia/storytelling.
Monday July 22, 2024 11:00 - 12:00 EDT
Track A

11:00 EDT

A Study of Plugin Architectures for Supporting Extensible Software
Monday July 22, 2024 11:00 - 12:00 EDT
Building extensible software is a goal and a often a metric of good software design. It is becoming more and more common for users to also contribute to the development of the software that they use--especially in the domains of computer graphics and gaming. Terms like 'modding' software have been around since at least the early 90s when the popular game Doom allowed for users to create their own content and modify the behavior of the program. Behind these programs there thus must be a mechanism for allowing users to 'hook' into the main program. In this talk, I will be showing several software developer kits including Autodesk Maya 3D (C++), Unity3D (C#), Unreal Engine (C++), and QT Modeler(C), and present a case study of how they are designed. At the end of the design discussion I will present how to get started building your own plugin system, and what considerations must be taken in mind (e.g. does the application or plugin manage resources, what should be exposed in the API, how do you embed a scripting language, and how should you distribute your plugins). Attendees will leave the presentation with practical knowledge on how to build software that can be extended by their user base.
Speakers
avatar for Mike Shah

Mike Shah

Professor / (occasional) 3D Graphics Engineer
Mike Shah is currently a teaching faculty with primary teaching interests  in computer systems, computer graphics, and game engines. Mike's research interests are related to performance engineering (dynamic analysis), software visualization, and computer graphics. Along with teaching... Read More →
Monday July 22, 2024 11:00 - 12:00 EDT
Track B

11:00 EDT

C++ Insights: Peek behind the curtains of your C++ compiler
Monday July 22, 2024 11:00 - 12:00 EDT
C++ is not an easy language. While its intention, especially with the new Standards since C++11, is to shift more work from the developer to the compiler, this is sometimes perceived as opaque. Knowing what a statement does is vital not only in embedded software development. It is also essential while teaching C++ when questions come up like "when and where are operators involved" or "in which places do we get an implicit type conversion".

Some tools, like Matt Godbolt's Compiler Explorer or Clang's AST dump, can show us the resulting output. However, the resulting output is not C++. This makes it hard for a C++ developer to understand. As a C++ programmer, my first language is, after all, C++. The Clang-based tool C++ Insights (https://cppinsights.io) addresses this. It aims to show the source code with the eyes of a compiler through a source-to-source transformation where the resulting output is still C++. All the intentionally hidden things become visible.

In this talk, I will present how C++ Insights has evolved in the last few years. You will learn how C++ Insights can assist you with teaching or programming. Some awesome new educational transformations can help you understand constructs like C++20's coroutines or visualize object lifetime.
Speakers
avatar for Andreas Fertig

Andreas Fertig

Unique Code GmbH
Andreas Fertig, CEO of Unique Code GmbH, is an experienced trainer and consultant for C++ for standards 11 to 23.Andreas is involved in the C++ standardization committee, developing the new standards. At international conferences, he presents how code can be written better. He publishes... Read More →
Monday July 22, 2024 11:00 - 12:00 EDT
Track C

12:00 EDT

Lunch
Monday July 22, 2024 12:00 - 13:00 EDT
TBA
Monday July 22, 2024 12:00 - 13:00 EDT
TBA

13:00 EDT

The Shoulders We Stand On
Monday July 22, 2024 13:00 - 14:00 EDT
Join us as we explore pivotal milestones in computer science, spotlighting visionary scientists and engineers whose work resonates in today's software landscape. From architecture to programming languages, GUI, web, and AI, we'll bridge historical breakthroughs to their enduring impact on modern software engineering. As we dive into Alan Turing's AI contributions, David Parnas's modular design principles, Grace Hopper's revolutionary compiler, Nasir Ahmed's image compression algorithm and more, we discuss how algorithms from the past continue to influence contemporary software practices and demonstrate how theoretical concepts from earlier eras manifest in today's complex distributed systems.

This talk transcends timelines, connecting past innovations to contemporary impacts. In light of the influential discoveries, we highlight how they impact what we build today in more ways than we can count and how this knowledge can inform our decision making process in our day to day jobs as we work on products that transform the world as we know it.
Speakers
avatar for Furkan Uzumcu

Furkan Uzumcu

Autodesk
Furkan Uzumcu is a senior software engineer at Autodesk. He has worked with many languages onbackend, frontend systems, mobile and desktop to solve problems. He's passionate about good UX,software architecture, and design. For the last 5 years, he's been working on Alias to helpindustrial... Read More →
avatar for Quinn Hou

Quinn Hou

Software Engineer, Dapper Labs
After five years as a software engineer at Dapper Labs, Quinn recently stepped into the role of engineering manager for a team she deeply values. She has been involved in numerous projects, fondly remembering the initial days of whiteboarding the architecture of NBA TopShot. For Quinn... Read More →
Monday July 22, 2024 13:00 - 14:00 EDT
Track A

13:00 EDT

Beginner's mind, expert's mind—How we think about, read, write and teach code
Monday July 22, 2024 13:00 - 14:00 EDT
We are all born with the innate ability to count and to learn languages. Sadly, the same cannot be said for programming. What's more, neither linguistic nor math prowess seem to translate into coding skills. Similarly, just because you are an expert in C++ concurrency doesn't mean you won't have a hard time deciphering a textbook Haskell program. So what is it that makes us adept at reading, writing and reasoning about code? Crucially, can the journey on the path to become a better programmer be facilitated?

In this talk we will try to answer this question by exploring the cognitive processes involved in reading, producing and reasoning about code. We will discuss the role of short- and long-term memory, and introduce terms such as cognitive load, beacons and chunks. Enriched with live experiments and illustrated with examples in C++, we will see how these concepts interplay with our programming abilities. Finally, we will discuss how we can use this knowledge to write better code, grow as programmers, facilitate collaboration between developers of different levels, or improve the onboarding of new team members.
Speakers
avatar for Dawid Zalewski

Dawid Zalewski

I'm a computer engineer and a passionate teacher with over 25 years of programming experience. I have co-evolved together with various languages including Basic, Turbo Pascal and 8051 assembly to finally settle in the land of C++ (with occasional visits to Python, C# and a few others... Read More →
Monday July 22, 2024 13:00 - 14:00 EDT
Track B

13:00 EDT

Think Parallel
Monday July 22, 2024 13:00 - 14:00 EDT
By default, we think sequentially. Parallelism and asynchrony are often seen as challenging and complex. Tools to be used sparingly and cautiously, and only by experts.

But we must shatter these assumptions, for today, we live in a parallel world. Almost every hardware platform is parallel, from the smallest embedded devices to the largest supercomputers.

We must change our mindset. Anyone who writes code has to think in parallel. Parallelism must become our default.

In this example-driven talk, we will journey into the world of parallelism. We'll look at four algorithms and data structures in depth, comparing and contrasting different implementation strategies and exploring how they will perform both sequentially and in parallel.

During this voyage, we'll uncover and discuss some foundational principles of parallelism, such as latency hiding, localizing communication, and efficiency vs performance tradeoffs. By the time we're done, you'll be thinking in parallel.
Speakers
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

HPC Programming Models Architect, Principal Architect at NVIDIA, Standard C++ Library Evolution Chair
Bryce Adelstein Lelbach has spent over a decade developing programming languages, compilers, and software libraries. He is a Principal Architect at NVIDIA, where he leads HPC programming language efforts and drives the technical roadmap for NVIDIA's HPC compilers and libraries. Bryce... Read More →
Monday July 22, 2024 13:00 - 14:00 EDT
Track C

14:00 EDT

Break
Monday July 22, 2024 14:00 - 14:15 EDT
TBA
15 Minute Beverage Break;
Continue to next session.
Monday July 22, 2024 14:00 - 14:15 EDT
TBA

14:15 EDT

Software Engineering Completeness : Knowing when you are done and why it matters
Monday July 22, 2024 14:15 - 15:15 EDT
Whether creating new features or fixing bugs, what does Done mean in Software Engineering terms and what is its effect on delivering change in the real world ?
Being "Done" can mean just checking code into a repository but primitive approaches to delivering change and marking it as complete can lead to unwieldy code bases that are difficult to manage and foment technical debt.

Being done should ask questions on the completeness of the changes. Has code quality/technical debt been addressed ? How does tactical fixes versus strategic direction achieve different versions of being finished. what about the vital task of decommissioning of old code, refactoring solutions as better thinking emerges ?

In this presentation, we will explore these topics and build up a Software Engineering Completeness pyramid for change delivery - analogous to the survival needs pyramid - and illustrate differing levels of being change complete with the bottom level equating to unsustainable hacking of a codebase up through tiered levels of engineering practice with the apex representing Excellence in Engineering.

The revelation that "doneness" - properly defined - and executed is a force that drives superior software engineering and strikes to the heart of achieving improved outcomes. This clarity of thinking on the real cost of software ownership promotes flexible software, happy consumers and allows for clean communication to others of when you are actually and finally DONE.
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. A consultant for over 20 years prior to joining Bloomberg, Peter has worked on a broad range of projects and code bases in a large number of companies... Read More →
Monday July 22, 2024 14:15 - 15:15 EDT
Track A

14:15 EDT

Safe Static Initialisation and Cleanup in Libraries
Monday July 22, 2024 14:15 - 15:15 EDT
Static initialization is utilized to ensure that values are constructed before main(), making them available for use immediately and allowing important prerequisites to be established. However, the initialization of these values is more complex than it first appears. Statically linked or dynamically loaded libraries also need their own dependencies, global variables, and lifetime management making the picture more complex when we use other people’s code this way.

In this session, we will explore how applications and libraries handle initialization and discuss methods for building safe initialization mechanisms in our libraries. Whether you develop and distribute code as a library or SDK, or you are simply curious about how application initialization happens, this session is for you.
Speakers
avatar for Ashley Roll

Ashley Roll

Ashley has 30 years of experience as a software engineer and architect in Brisbane, Australia. He has worked in large and small projects spanning web applications, desktop applications, business systems as well as embedded hardware and firmware.
Monday July 22, 2024 14:15 - 15:15 EDT
Track B

14:15 EDT

C++ Reflection: Back on Track
Monday July 22, 2024 14:15 - 15:15 EDT
C++ reflection has been a long-sought goal of users and language designers. But previous attempts have failed to get wide enough support to make it into the C++ standard or be widely implemented. A newly revised design has incorporated the lessons learned from previous proposals and is gaining momentum in the C++ standards committee.

This presentation will cover the current reflection proposal. I will go over how it works, how to use it, and how it compares to other reflection proposals and implementations. There will be plenty of code examples, compiled by real compilers that have already implemented the proposal, showing how reflection enables useful techniques that had been previously out of reach.

Attendees will come away from this session with an appreciation for the power and usefulness of reflection, and with the knowledge of how to start writing reflection-based code.
Speakers
avatar for David Olsen

David Olsen

Software engineer, NVIDIA
David Olsen has three 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 GPUs. He... Read More →
Monday July 22, 2024 14:15 - 15:15 EDT
Track C

15:15 EDT

Break
Monday July 22, 2024 15:15 - 15:45 EDT
TBA
30 minute Snack & Beverage break;
Monday July 22, 2024 15:15 - 15:45 EDT
TBA

15:45 EDT

Splatty! A gaussian splatting viewer for everyone!
Monday July 22, 2024 15:45 - 16:45 EDT
Gaussian splatting has taken over the world like a storm! My super curious programming side couldn't stand a chance against the opportunity to recreate realistic 3D scenes. It looked so easy!So I jumped on the train to learn a lot about this new visualization technique. Using the latest standards, I simplified an implementation until it didn't feel like C++ anymore. It feels like we've evolved so much since 'classes' that we should take a moment to realize how easy it has become to use that little silicon chip to get our dopamine hit!
Expect modules, ranges, coroutines, mdspan, a little bit of compile time, a tiny bit of OpenGL but most importantly a lot of fun!

Speakers
avatar for Pier-Antoine Giguère

Pier-Antoine Giguère

TechLead C++, Vigilance Santé
Pier-Antoine loves programming to have the opportunity to learn everyday! He enjoys spending his time writing code that makes crazy things but that is easy to use. He spends most of his time with his wife and two childrens, but when he can he'll pickup drum sticks, racing gloves or... Read More →
Monday July 22, 2024 15:45 - 16:45 EDT
Track A

15:45 EDT

Meandering Through C++ to Create ranges::to
Monday July 22, 2024 15:45 - 16:45 EDT
See how I meandered through writing a version of *ranges::to* because I was impatient for the GCC 14 version. It had to be easy, right? After all, it is just copying pipeline elements to a container. Ha! Ha! No.

This trek encounters *concepts*, *if constexpr*, and containers that are copyable and others that are not. Eventually, an encounter with a **** approach, which I can only reveal during the talk, solved the copy problem for most containers. But then there are sets and queues. Finally, wrangling with `range_adaptor_closure` to work as the pipeline's endpoint was, well, interesting.

Why is ranges::to important? It is easier to use than other methods of invoking pipelines.

The talk is code intensive to illustrate all the steps to demonstrate the development process and the solution.
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 now trying to figure out functional programming and the ranges library.He wrote his first FORTRAN IV in 1968 and his first C++ in... Read More →
Monday July 22, 2024 15:45 - 16:45 EDT
Track B

15:45 EDT

Improving your team(work)
Monday July 22, 2024 15:45 - 16:45 EDT
Throughout our careers, we will have the opportunity to work on many different teams and many different projects. We may sometimes work on a team that’s enjoyable, but isn't delivering too much. Other times, we might work on a team that delivers, but is no fun. If we’re really unlucky, we can end up on a team that doesn’t deliver and isn’t enjoyable. But occasionally, we can have the privilege of being part of a team that not only delivers, but is also a great team to be on.

The key question is: what makes these teams different? Why do some work and others not? Why is a team full of superstars not as good as a superstar team?

This talk will explore the different characteristics of software development teams, and will look at the different roles and responsibilities within a team. Taking an evidence-based approach, we’ll consider what makes a good team, explore how to encourage more cooperative teamwork in order to achieve better results for everyone on the team, as well as offer some ideas for how to gently improve the teams on which we are currently working.
Speakers
avatar for Callum Piper

Callum Piper

Software Engineer, Bloomberg
Callum Piper has been writing C++ since 2000. He has spent five years as a Senior Software Engineer at Bloomberg, working on Derivatives Pricing services. Prior to joining Bloomberg, Callum was a consultant for more than 10 years, during which he worked on a wide range of different... Read More →
Monday July 22, 2024 15:45 - 16:45 EDT
Track C

16:45 EDT

Break
Monday July 22, 2024 16:45 - 17:00 EDT
TBA
15 Minute Beverage Break;
Continue to next session.
Monday July 22, 2024 16:45 - 17:00 EDT
TBA

17:00 EDT

Building a C++/JS browser for the financial markets
Monday July 22, 2024 17:00 - 18:00 EDT
Having a substantial team design, develop, and operationally-maintain a near-real-time browser for the financial markets requires certain disciplines to be adhered to across the system's C++, JavaScript, and rendering subsystems. This talk will highlight some of those techniques within the development cycle. We will go into detail about how they are used practically when programming, as well as in enabling the team to collaborate well.
Speakers
avatar for Paul Williams

Paul Williams

Head of Terminal Experience, Bloomberg LP
Paul co-founded Bloomberg's software engineering office in London, and has seen the department grow to 1,500 developers. He and his team specialize in near-real-time subsystems in Bloomberg's flagship product, the Bloomberg Professional Service (aka the "Bloomberg Terminal") - mainly... Read More →
Monday July 22, 2024 17:00 - 18:00 EDT
Track A

17:00 EDT

Testability and API Design
Monday July 22, 2024 17:00 - 18:00 EDT
Good code must be both testable by its developers and usable in application test drivers and integration tests. We will explore and recommend approaches for designing APIs that result in both easily testable code and convenient interfaces for test drivers and integration tests. We will discuss specific techniques, simplified versions of examples from popular libraries such as BDE, and how to write generalized mocks.
Speakers
avatar for John Pavan

John Pavan

John is currently an Engineering Team Lead at Bloomberg. He has been a software developer for 25+ years, and is interested in improving the experience of using C++ with a particular interest in API design.
avatar for Aram Chung

Aram Chung

Aram Chung is a software engineer on the Insights Workflows team at Bloomberg. She thinks C++ is delightfully low-level and Python is delightfully high-level: “Recondita armonia di bellezze diverse” (and if you got the reference, she wants to be your friend). In her spare time... Read More →
avatar for Lukas Zhao

Lukas Zhao

Lukas Zhao is a senior software engineer at Bloomberg, where he works on the FX Pricing Engineering team. In his eight years with the company, he contributed to the building of a distributed electronic trading platform microservice system, which won several ETFExpress awards, and... Read More →
Monday July 22, 2024 17:00 - 18:00 EDT
Track B

17:00 EDT

Profile-Guided Optimization (PGO): unknown parts
Monday July 22, 2024 17:00 - 18:00 EDT
Profile-Guided Optimization (PGO) is a compiler optimization technique that helps with optimizing software based on a collected in runtime profile. This optimization is available in all major C++ compilers like GCC, Clang, MSVC. But how smooth will be your experience when you try to adopt PGO in practice?

I applied PGO to many kinds of software (compilers, databases, log solutions, CLI tools, and many more), collected a lot of carefully hidden traps on my journey and found multiple ways of how to avoid them. In this talk I want to share with you my experience. We will discuss the following topics:
* What is PGO and why do we need it.
* PGO performance benefits in practice (with a lot of numbers for actual open-source software)
* What kinds of PGO do we have in different compilers?
* Pros and cons of each PGO way.
* Most and less common PGO traps that you can meet in your journey and how to mitigate them.
* PGO state in the C++ ecosystem: compilers, build systems, package managers support.
* A lot of pieces of advice about PGO integration into your software.
* And of course answer all your questions about PGO!

After the talk you will be much more prepared for doing PGO in practice and even will be aware about more advanced optimization techniques like Post-Link Optimization (PLO), ML-based compiler optimization and other interesting stuff from the optimization field.
Speakers
avatar for Alex Zaitsev

Alex Zaitsev

Undergraduate, Belarusian State Technological University
In the past, I used to be an active C++ user and contributor, but now my coding skills are a bit Rusty. People at work call me "Solution architect" but I prefer "Confluence && Draw.io engineer".I like performance, crazy about optimizations and making optimizations as friendly as possible... Read More →
Monday July 22, 2024 17:00 - 18:00 EDT
Track C

19:30 EDT

Belonging Dinner
Monday July 22, 2024 19:30 - 21:30 EDT
Join us for an evening of connection and inspiration at our Belonging Dinner, designed to foster a sense of inclusivity and belonging within the C++ community. Engage with fellow enthusiasts and our CppNorth 2024 speakers in a welcoming, intimate setting, and gain insights from one of the leading voices in cybersecurity.
Speakers
avatar for Negar Farjadnia

Negar Farjadnia

Senior Director, National Cyber Security and Modern Workplace Lead, Avanade
Negar Farjadnia is a leader in cybersecurity and will be our featured speaker at the CppNorth Belonging Dinner on July 22nd. As Avanade Canada's Lead for Security Practice, Negar is at the forefront of shaping cybersecurity within the Microsoft ecosystem. Her role involves driving... Read More →
Monday July 22, 2024 19:30 - 21:30 EDT
 
Tuesday, July 23
 

09:00 EDT

Lightning Talks
Tuesday July 23, 2024 09:00 - 10:30 EDT
Lightning Talks
Tuesday July 23, 2024 09:00 - 10:30 EDT
Track B

10:30 EDT

Break
Tuesday July 23, 2024 10:30 - 11:00 EDT
TBA
30 minute Snack & Beverage break;
Tuesday July 23, 2024 10:30 - 11:00 EDT
TBA

11:00 EDT

Message Handling with Boolean Algebra
Tuesday July 23, 2024 11:00 - 12:00 EDT
Message reception and dispatch is something common to many codebases. And deep down, we know that Boolean algebra underlies everything we do. But we seldom give it a second thought, or if we do, we probably dismiss it as trivial; something we learned in college and quickly outgrew.

This talk shows the unreasonable effectiveness of going back to basics and really understanding and unlocking the power of Boolean algebra in the design of a message handling library. We'll talk about separating message layout and semantics, how to match against messages for dispatch, and particularly how to compose and simplify constraints at compile time, in order to do the least at runtime. We'll also introduce Boolean implication and see a non-obvious application which is key to a generic approach. Finally we'll see how message matchers can be generically transformed using compile-time information, allowing complete flexibility of expression and maximum runtime performance.
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... Read More →
Tuesday July 23, 2024 11:00 - 12:00 EDT
Track A

11:00 EDT

... + CTAD + NTTP = 🤩
Tuesday July 23, 2024 11:00 - 12:00 EDT
C++ is a language of many features and new keep being added over time. Rarely does any individual addition have a significant impact on how we write code, but when put together they can enable game-changing expressiveness. In this session we look at how the wombo combo of variadic templates, class template argument deduction (CTAD), and non-type template parameters (NTTP) enables writing code in a declarative manner never seen before, the practicality of which is shown on a real world problem from the domain of thermodynamic simulation.
Speakers
avatar for Miro Knejp

Miro Knejp

Miro Knejp, Miro Knejp
Miro wrote his first line of C++ code in 1997 at the age of 12, and it has been his programming language of choice ever since. He's especially passionate about low-level programming, low latency, 3D graphics, games engineering, and chemistry. Miro holds a Master's degree in Computer... Read More →
Tuesday July 23, 2024 11:00 - 12:00 EDT
Track B

11:00 EDT

How designing Carbon with C++ interop taught me about C++ variadics and overloads
Tuesday July 23, 2024 11:00 - 12:00 EDT
C++ has some amazing and powerful language features, but they can be difficult to understand. Moving past a basic understanding of a feature and common patterns of use requires a deep understanding of the underlying language design so that you can model how it works and how to effectively use it. But how do you develop a rich and compelling model for these parts of C++?

The Carbon language aims for seamless and comprehensive interop with C++, including these complex and powerful aspects of the language. As a consequence, in order to design Carbon's features, we have to build exactly that rich and compelling model for C++ features they interoperate with. A surprising but delightful outcome is that the Carbon designs can often be used to build an even deeper and more effective understanding of C++ itself.

This talk will work through the design of two Carbon features with significant C++ overlap: variadics and overloaded methods. We will build up a design model for them, and show how you can use that model to think more deeply and holistically about the design of C++ code. It will also show how to build more expressive or robust C++ APIs through that model, even where C++ doesn't give you perfect building blocks. And most of all, it will showcase a fun and interesting way to learn about language design, and reason more deeply about the underlying principles of your code.
Speakers
avatar for Chandler Carruth

Chandler Carruth

Google
Chandler Carruth is the technical lead for Google's programming languages and software foundations. He has worked extensively on the C++ programming language and the Clang and LLVM compiler infrastructure. Previously, he worked on several pieces of Google's distributed build system... Read More →
Tuesday July 23, 2024 11:00 - 12:00 EDT
Track C

12:00 EDT

Lunch
Tuesday July 23, 2024 12:00 - 13:00 EDT
TBA
Tuesday July 23, 2024 12:00 - 13:00 EDT
TBA

13:00 EDT

Why Modules? : It's not about build time
Tuesday July 23, 2024 13:00 - 14:30 EDT
C++ Named Modules are not about build optimization, although that was an important design consideration. Modules are about controlling visibility and access to names and definitions at a fine-grained level.

This talk will show how to use the various features of modules and the kinds of module units to provide access to the features of your library while hiding the details you don't want clients to depend on. The talk will also cover some of the limitations and how clients may still end up depending on your details in ways that constrain your ability to maintain ABI compatibility.
Speakers
avatar for Steve Downey

Steve Downey

Bloomberg, LP.
Steve Downey has been a programmer for more than 30 years. Steve graduated from SUNY Purchase with a BS in Mathematics. A Computer Science degree would have involved two classes before 11:00 am, so was impossible. He has worked at Bloomberg since 2003, and is currently working as... Read More →
Tuesday July 23, 2024 13:00 - 14:30 EDT
Track A

13:00 EDT

Hiding your Implementation Details is Not So Simple
Tuesday July 23, 2024 13:00 - 14:30 EDT
A key programming principle that encapsulates significant aspects of Object-Oriented Programming, is to hide your implementation details. This guidance aligns with principles such as encapsulation, decoupling, and programming for interfaces rather than concrete types.

Yet, keeping your implementation details hidden is no easy feat. In this talk, we'll discuss the challenges, highlight tricky situations, and share tips on how to steer clear of them.

Applying the practices presented in this talk, participants will be well-equipped to navigate potential pitfalls, foster best practices, and ultimately write C++ code that is more elegant, robust and maintainable.
Speakers
avatar for Amir Kirsh

Amir Kirsh

Teacher, Dev Advocate, Academic College of Tel-Aviv Yaffo
Amir Kirsh is a C++ lecturer at the Academic College of Tel-Aviv-Yaffo and Tel-Aviv University, previously the Chief Programmer at Comverse, after being CTO and VP R&D at a startup acquired by Comverse. He is also a co-organizer of the annual Core C++ conference and a member of the... Read More →
Tuesday July 23, 2024 13:00 - 14:30 EDT
Track B

14:30 EDT

Break
Tuesday July 23, 2024 14:30 - 14:45 EDT
TBA
15 Minute Beverage Break;
Continue to next session.
Tuesday July 23, 2024 14:30 - 14:45 EDT
TBA

14:45 EDT

Practical Steps to Safer C++
Tuesday July 23, 2024 14:45 - 15:45 EDT
Everybody wants to write safe, efficient, bug-free code, but C++ doesn't always make it easy!
In this talk, we'll look at some common safety problems that can occur in everyday C++ code and offer practical advice and suggestions for detecting and avoiding them.
While C++ isn't going to become "a safe language" any time soon, we can certainly make it safer for everyday use -- without harming performance. For practical, take-away tips on how you can do so, please join us in this talk!
Speakers
avatar for Tristan Brindle

Tristan Brindle

C++ London Uni
To do
Tuesday July 23, 2024 14:45 - 15:45 EDT
Track A

14:45 EDT

Mitigating the intellectual anxiety associated with learning the C++ programming language
Tuesday July 23, 2024 14:45 - 15:45 EDT
Learning a new programming language can be a heinous task, especially when faced with biases and myths surrounding the language. In this speech, we will discuss how to overcome biases and break down the barriers to learning a new programming language using technical terms and examples. In the context of programming languages, we will focus on the case of C++ and discuss its features and applications, as well as the perceived biases around the language. We will explore the benefits of using C++ and how it can be used to build high-performance applications and also relate our experiences in learning C++ from Africa that is geographically isolated from other developers and the challenges of mixing and matching of spoken languages. The speech will provide practical tips for learners seeking guidance from experienced programmers. We will also discuss the role of mindset and motivation in the learning process and provide strategies for developing a growth mindset. Attendees will leave this speech with a better understanding of the biases that can impede learning, and the steps they can take to overcome these biases and become successful learners of a C++ programming language. The speech is designed to inspire and encourage beginners to embrace the challenge of learning a C++ programming language and unlock their potential as programmers.
Speakers
CA

Cpp Africa(Dennis Onyeka ikemefula, Emmanuel Danso Nyarko)

CppAfrica is Africa's first C++ community set up to introduce the world of programming in C++ to the African community. CppAfrica was co-founded by Dennis Onyeka, a software engineer from Nigeria, and Emmanuel Danso Nyarko, a recent computer science graduate from Ghana. It is a growing... Read More →
Tuesday July 23, 2024 14:45 - 15:45 EDT
Track B

14:45 EDT

More Ranges Please
Tuesday July 23, 2024 14:45 - 15:45 EDT
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 performant. The ranges library, especially with some recent C++23 additions also better exposes us to the notion of 'range-of-ranges' and multi-dimensional 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, curating and solidifying the algorithms in the STL circa 1998 (Stepanov: [STL and its Design Principles](https://youtu.be/1-CmNNp5eag)). 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 an introduction to the ranges library as an example of a breakthrough library, and discuss various aspects of composability which makes the library shine.

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 July 23, 2024 14:45 - 15:45 EDT
Track C

15:45 EDT

Break
Tuesday July 23, 2024 15:45 - 16:15 EDT
TBA
Tuesday July 23, 2024 15:45 - 16:15 EDT
TBA

16:15 EDT

Save time, space and a little sanity with std::function_ref.
Tuesday July 23, 2024 16:15 - 17:15 EDT
Ever found a codebase full of function pointers and thought, there must be a better way? You found that better way, introduced std::function and now have a horrific performance regression? Performance problems are perfectly normal, and std::function_ref is here to help.std::function_ref is a vocabulary type that does not throw, does not allocate, improves compile-times and reduces memory footprint, all with a single abstraction.
In this session, we will go through how C++26’s std::function_ref provides these benefits, what it is and when you should use it.

Speakers
avatar for David Ledger

David Ledger

I've worked mostly on embedded systems for a variety of industries. I've worked on test equipment, medical devices, and I am now working in the semiconductor industry. I enjoy designing ergonomic C++ libraries.
Tuesday July 23, 2024 16:15 - 17:15 EDT
Track A

16:15 EDT

Uplifting Your Career as a Youth in Tech
Tuesday July 23, 2024 16:15 - 17:15 EDT
In this engaging talk, I will be discovering my journey into tech as a teenager, and share some advice for starting your career as a fellow teenager.
Speakers
avatar for Sohaila Ali

Sohaila Ali

Ambassador, Canada Learning Code
Sohaila Ali is a high school student who currently works as a Teen Ambassador at Canada Learning Code, and a Coding Instructor at The Ismaili Canada. She has obtained the AWS Certified Cloud Practitioner certification as well. She is interested in cloud computing, software engineering... Read More →
Tuesday July 23, 2024 16:15 - 17:15 EDT
Track B

16:15 EDT

LSAN and ASAN: tips, tricks and hacks
Tuesday July 23, 2024 16:15 - 17:15 EDT
Address Sanitizer (ASAN) and Leak Sanitizer (LSAN) have a lot of options and additional functions which sometimes could be used not only for detecting memory errors and leaks.

This talk will cover LSAN internals (combined memory manager, interceptors, garbage collector which does not collects garbage, why LSAN does not work with gdb), ASAN and LSAN public interface, how to profile memory usage via ASAN or LSAN, obtaining about objects metadata, memory manager statistics and useful functions which could be used from gdb.

Also we'll try to improve LSAN diagnostic output via using non public LSAN API.
Speakers
avatar for Alexey Veselovsky

Alexey Veselovsky

Align Technology
Senior C++ developer at Align Technology. Develops general system components and the framework of a specialized 3D CAD system.Previously developed a real-time patient monitoring system, as well as a data collection and processing system for self driving cars. Took part in the Squid-proxy... Read More →
Tuesday July 23, 2024 16:15 - 17:15 EDT
Track C

17:15 EDT

Break
Tuesday July 23, 2024 17:15 - 17:15 EDT
TBA
Tuesday July 23, 2024 17:15 - 17:15 EDT
TBA

17:30 EDT

Keynote: Eric Wastl
Tuesday July 23, 2024 17:30 - 19:00 EDT
Keynote: Eric Wastl
Title & Abstract: To be Announced (soon)
Speakers
avatar for Eric Wastl

Eric Wastl

Founder and Creator, Advent of Code
Eric Wastl is the creator of Advent of Code, an Advent calendar of small programming puzzles. He's a Software Engineer with over 15 years of professional experience in software engineering, software architecture, web development, security, system administration, math, developer education, and mentoring... Read More →
Tuesday July 23, 2024 17:30 - 19:00 EDT
Track B
 
Wednesday, July 24
 

09:00 EDT

Keynote: April Wensel
Wednesday July 24, 2024 09:00 - 10:30 EDT
Keynote: April Wensel
Title & Abstract: To be Announced (soon)
Speakers
avatar for April Wensel

April Wensel

Founder, Compassionate Coding
April Wensel is an international keynote speaker, software engineer, and technical leader whose varied career spans such fields as education, research, healthcare, and entertainment.After a decade in the tech industry, she founded Compassionate Coding in order to bring more compassion to the softwa... Read More →
Wednesday July 24, 2024 09:00 - 10:30 EDT
Track B

10:30 EDT

Break
Wednesday July 24, 2024 10:30 - 11:00 EDT
TBA
30 minute Snack & Beverage break;
Wednesday July 24, 2024 10:30 - 11:00 EDT
TBA

11:00 EDT

Write fast code like a native
Wednesday July 24, 2024 11:00 - 12:00 EDT
Optimization is often considered a second pass in software development, where initially it is tempting to write your business logic out and later think about optimizing it. It has its pros and cons, but the aim of this talk is to provide you with the knowledge that will let you write optimized and fast C++ code as you go, rather than in a second pass. At worst, your optimization passes would become shorter. At best, you would be able to write out fast code in the first go, improving your ability to write efficient systems.

The talk will cover various fundamental principles and concepts useful to form a mental model of how long any given computation or operation may take, and what factors you can think of to make trade-offs while writing code. We will cover this through code examples, microbenchmarks, and looking at assembly code in godbolt. We will also discuss some principles to guide your thought process as you design your systems in an efficiency-first manner, with code examples.

After this talk, attendees would be able to intuitively guess what is a reasonable amount of time for a certain operation from a theoretical perspective. Is 10ms a reasonable time for my web server to respond with a HELLO message? Is 100us enough to compute a machine learning model's output?
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 →
Wednesday July 24, 2024 11:00 - 12:00 EDT
Track A

11:00 EDT

Simplify and Secure Equation Systems with Type-Driven Development
Wednesday July 24, 2024 11:00 - 12:00 EDT
Lea is a researcher working on an autonomous ship project. She needs to write complex dynamical equations to model the ship movement, but she keeps making errors that cause bugs and jeopardize the project.

She decides to use template metaprogramming and constexpr to build a compile-time library that can catch these errors and simplify the equation writing.

In this talk, you will learn how Lea explores features of C++, such as strong types, metaprogramming and tuple algorithms, to create a library that can automatically map types to indices.

This mapping enables her to write nonlinear equation systems with meaningful names. It makes it even possible to build up libraries of individual systems that can be combined at compile-time.

You will also see how Lea faces the challenges of design and implementation in the realm of metaprogramming. Will she succeed in her quest? Will the ship sail safely? And will it be worth the effort? Come and find out.
Speakers
avatar for Arne Berger

Arne Berger

Software Developer, Bruker Daltonics
Arne (he/him) is a C++ developer at Bruker Daltonics, where he creates control software for mass spectrometry devices. He has a background in optimization and optimal control, having participated in various research projects for over 7 years. Arne is a clean code enthusiast who strives... Read More →
Wednesday July 24, 2024 11:00 - 12:00 EDT
Track B

11:00 EDT

Throwing Tools at Ranges
Wednesday July 24, 2024 11:00 - 12:00 EDT
When talking about ranges I always get the same questions "but how about compile time? how about runtime?" because usually abstractions give us the impression that they might slow down either compile time or run time or both. The advantages of ranges lie in the ease of use, composability, and readability but many people cannot sacrifice run time performance for it. So that sparked the idea of using different tools to do a deep dive into the ranges code and answer these questions as objectively as possible. In this talk I will talk about the tools I used on both Windows and Linux and the insights they give into ranges code compared to non-ranges code. I will concentrate on runtime performance and memory usage. The analysis features one example written in: C-style C++, C++17 and C++23/ranges. The comparison of these styles will give you an impression which effects modernization of your code has on performance.
Speakers
avatar for Tina Ulbrich

Tina Ulbrich

Tina works at ROSEN, a service provider in the oil and gas industry. She writes and maintains numerical and data processing algorithms for pipeline inspection data. She highly values simple, modern and clean code, using the latest language features. She promotes refactoring, high... Read More →
Wednesday July 24, 2024 11:00 - 12:00 EDT
Track C

12:00 EDT

Lunch
Wednesday July 24, 2024 12:00 - 13:00 EDT
TBA
Wednesday July 24, 2024 12:00 - 13:00 EDT
TBA

13:00 EDT

C++ Type Erasure Demystified
Wednesday July 24, 2024 13:00 - 14:00 EDT
This talk is about type erasure in C++ (I have to be specific because the term has a completely different meaning in other languages). The aim of this talk is to explain how type erasure works, and do it in a very simple and clear way.
Type erasure is probably the closest C++ comes to “and then magic happens.” It’s a technique used to write a program (in a strictly typed language, no less) that doesn’t mention the types it works with. It is the pinnacle of abstraction in C++, and, like most abstractions, it’s much easier to show what that looks like than to define it: most concise definitions of type erasure are circular. So we will begin the talk by demonstrating what the code looks like after the magic happens.
Then comes the biggest letdown of all time: I’ll show the basic technique that type erasure relies on. It’s very simple, it’s very familiar, it predates C++, and every implementation of type erasure uses it.
After that, we learn three basic ways to implement type erasure. There are several great type erasure libraries out there, you should use them if you just want to get stuff done. I’m going to strip them down to the bare minimum to show the essence of each implementation as clearly as possible. Along the way, we will learn how vtables are implemented.
Finally, we will measure and compare the performance of the different implementations of type erasure. Type erasure is easy to implement; fast type erasure is not really any harder to implement, but it relies on some subtle details I’m going to demonstrate (including how to make std::function 50% faster).
Whether you want to write your own implementation or use an existing library, by the end of this talk the type erasure will no longer be shrouded in a mystic aura for you.
Speakers
avatar for Fedor G Pikus

Fedor G Pikus

Fellow, Siemens EDA
Fedor G Pikus is a Technical Fellow and the Director 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... Read More →
Wednesday July 24, 2024 13:00 - 14:00 EDT
Track A

13:00 EDT

Optimization Remarks - helping the compiler generate better code
Wednesday July 24, 2024 13:00 - 14:00 EDT
Optimization remarks are logs of Clang's optimization passes, describing optimization attempts and failures - which might be mitigated. Sometimes. Deciphering them might seem a matter for compiler authors, but we can kick-start this effort together.
About 50% of the talk would be dedicated to practical examples of missed optimizations and mitigations - with emphasis on alias analysis and escape-analysis. We will also discuss other compilers and even other languages.

Speakers
avatar for Ofek Shilon

Ofek Shilon

Senior Developer, Speedata
A Mathematics MA by training, but a 20Y C++ developer, writer and speaker in both the Linux and MS universes. Member of the maintainers team of Compiler-Explorer (==godbolt). Fascinated by compilers, debuggers and pretty much anything low level. Fiercely hated by his cat for no apparent... Read More →
Wednesday July 24, 2024 13:00 - 14:00 EDT
Track B

13:00 EDT

Where there is a loop, there is an algorithm
Wednesday July 24, 2024 13:00 - 14:00 EDT
Let's talk about everyone's favourite topic; refactoring.

The talk will take the audience through abstract concepts related to a multi-disciplinary outlook on refactoring inspired by the late Charlie Munger. With those concepts in mind, we then look at examples where we stretch our thinking beyond a raw loop and search for solutions provided by STL algorithms and ranges. This talk is aimed at everyone from beginner to advanced and for all languages.
Speakers
avatar for Fatemeh Jafargholi

Fatemeh Jafargholi

Senior Software Engineer, Microsoft
Wednesday July 24, 2024 13:00 - 14:00 EDT
Track C

14:00 EDT

Break
Wednesday July 24, 2024 14:00 - 14:15 EDT
TBA
15 Minute Beverage Break;
Continue to next session.
Wednesday July 24, 2024 14:00 - 14:15 EDT
TBA

14:15 EDT

C++ Memory Model: from C++11 to C++23
Wednesday July 24, 2024 14:15 - 15:45 EDT
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 17 years of software development experience, working on systems, low-level generic tools and high-level applications. Alex has worked as an integration/software developer at Elbit, senior software developer at Rafael, technical leader at Axxana, Software manager at Abbott... Read More →
Wednesday July 24, 2024 14:15 - 15:45 EDT
Track A

14:15 EDT

Composition Intuition II
Wednesday July 24, 2024 14:15 - 15:45 EDT
This sequel to Composition Intuition will be a masterclass about everything you wanted to know (and potentially what you didn't even know you wanted to know) when it comes to function composition and combinators. We will cover the different "composition strategies" used in languages like C++, Python, Haskell, APL, J, KAP, Jelly, Uiua, Clojure and more. Furthermore, we will in more detail cover the most common combinators and the patterns in which they are most useful.
Speakers
avatar for Conor Hoekstra

Conor Hoekstra

Senior Library Software Engineer, NVIDIA
Conor (he/him) is a Research Scientist at NVIDIA working on array programming models and languages. He is extremely passionate about programming languages, algorithms and beautiful code. He is the founder and organizer of the Programming Languages Virtual Meetup, he has a YouTube... Read More →
Wednesday July 24, 2024 14:15 - 15:45 EDT
Track B

15:45 EDT

Break
Wednesday July 24, 2024 15:45 - 16:15 EDT
TBA
30 minute Snack & Beverage break;
Wednesday July 24, 2024 15:45 - 16:15 EDT
TBA

16:15 EDT

Closing Keynote: Tony Van Eerd
Wednesday July 24, 2024 16:15 - 18:00 EDT
Closing Keynote: Tony Van Eerd
Title & Abstract: To Be Announced (Soon)
Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Stunt-double for C++ Expert, Christie Digital
Tony has been coding for well over 25 years, and hopefully coding well for most of that. Previously at Inscriber, Adobe, and BlackBerry, he now enables painting with light at Christie Digital. He is on the C++ Committee. He is a Ninja and a Jedi.
Wednesday July 24, 2024 16:15 - 18:00 EDT
Track B
 
Share Modal

Share this link via

Or copy link

Filter sessions
Apply filters to sessions.