Loading…
CppCon 2020 has ended
generate_n() [clear filter]
Monday, September 14
 

08:45 MDT

[Overflow] The Beauty and Power of "Primitive" C++
If the all_of() track is full, then join us in generate_n() as the overflow room.


Often, we focus on novel, clever, and advanced features of C++. To contrast, here I look at addressing relatively simple problems in relatively simple ways under severe constraints of performance, ease of use, and reliability. My main example is to read and write typed objects from and to a byte buffer. This is of course something we do a lot and in a bewildering variety of ways. Any object that needs to be stored or transmitted to another computer must go through such a process. However, the constrains on such reading and writing varies immensely based on the kind of data to be moved around, the performance and reliability requirements, the hardware available, and history. Many trade-offs are possible, and many different interfaces. That makes this an interesting design exercise.

This is an exploration of a design space close to the hardware and of the use of C++ in that space, rather than a standards proposal or the presentation of a mature tool chain. And, no, by “primitive”, I don’t mean “old-fashioned, C-like” code; some of the general techniques are old, but some of the code requires C++17 and much could be done better given features we are unlikely to get even in C++23.

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 September 14, 2020 08:45 - 10:00 MDT
generate_n()

10:30 MDT

Breaking Dependencies: The SOLID Principles
SOLID is an abbreviation for five of the most important software design principles:

- (S)ingle Responsibility Principle
- (O)pen-Closed Principle
- (L)iskov Substitution Principle
- (I)nterface Segregation Principle
- (D)ependency Inversion Principle

For almost two decades, these principles have proven to be a valuable set of guidelines to cope with software dependencies. Although initially introduced as guidelines for object-oriented programming, they have become a universal set of guidelines that can be used equally well for procedural, functional or generic programming. In this talk I'll recap the SOLID principles and explain why they form such a valuable set of universal design guidelines. Also, I'll go into detail about several common misconceptions.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Freelancer
Klaus Iglberger is a freelancing 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 experience in popular advanced C++ courses around the world (mainly in Germany, but also the... Read More →


Monday September 14, 2020 10:30 - 11:30 MDT
generate_n()
  • Design

12:00 MDT

Calling Functions: A Tutorial
How is a function call resolved? How does the compiler find the right function and how does the compiler choose from a set of available functions? This talk will give an overview of the individual steps taken during the resolution of a function call. It will primarily focus on the different kinds of name lookup, argument deduction, and on overload resolution. Attendees will gain insight into the mechanics of (un-)qualified lookup, argument dependent lookup, two-phase lookup, name hiding, SFINAE, (viable) candiate functions, and ambiguous function calls. They will leave the talk with a much better understanding of the (sometimes surprising) details of function calls.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Freelancer
Klaus Iglberger is a freelancing 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 experience in popular advanced C++ courses around the world (mainly in Germany, but also the... Read More →


Monday September 14, 2020 12:00 - 13:00 MDT
generate_n()

13:30 MDT

Making Iterators, Views and Containers Easier to Write with Boost.STLInterfaces
Writing standard-compliant iterators is surprisingly easy to get wrong. Standard containers are tedious to write, because they have such large interfaces, involving lots of similar operations. For many years, Boost.Iterator's iterator_facade and iterator_adaptor were the state of the art for automating the creation of iterators with minimal effort. However, that library has not kept up with the evolution of C++, particularly with regard to constexpr and noexcept.

Boost.STLInterfaces is a newly-accepted Boost library that solves these problems for authors of iterators and sequence containers. It does this using the same approach as C++20's std::ranges::view_interface. The view_interface template is a CRTP base that implements all the possible view member functions when inherited by a derived type containing just begin() and end(). This pattern allows the user to use Boost.STLInterfaces to write correct iterators, views, and/or sequence containers, requiring surprisingly little code.

Speakers
avatar for Zach Laine

Zach Laine

Principal Software Engineer, Cadence Design Systems
Zach Laine has been using C++ in industry for 15 years, focusing on data visualization, numeric computing, games, generic programming, and good library design. He finds the process of writing bio blurbs to be a little uncomfortable.


Monday September 14, 2020 13:30 - 14:30 MDT
generate_n()

14:30 MDT

AMA: Zach Laine
Join Zach Laine for a hallway-style discussion on:
  • STL algorithms 
  • STL containers
  • Unicode ⌘

Speakers
avatar for Zach Laine

Zach Laine

Principal Software Engineer, Cadence Design Systems
Zach Laine has been using C++ in industry for 15 years, focusing on data visualization, numeric computing, games, generic programming, and good library design. He finds the process of writing bio blurbs to be a little uncomfortable.


Monday September 14, 2020 14:30 - 14:55 MDT
generate_n()
 
Tuesday, September 15
 

09:00 MDT

A Physical Units Library For the Next C++
On CppCon 2019, Mateusz provided an overview of current solutions on the market as well as the challenges of implementing a modern C++ physical units library. This year's talk will focus on 'mp-units', the library developed by Mateusz and contributors, and proposed for the C++ standardization.

During this tutorial, we will get familiar with the building blocks of the library's framework and its most important concepts. Numerous code examples will present how to use and solve real-life problems with the library. The audience will learn how easy it is to extend it with new units, dimensions, or even whole new systems of quantities. Last but not least, Mateusz will provide a brief overview of how well this library performs compared to other products on the market.

Even if you are not interested in the physical units subject itself, you might still want to attend the talk as the library is full of C++20 features.

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 →


Tuesday September 15, 2020 09:00 - 10:00 MDT
generate_n()
  • Future of C++

10:00 MDT

AMA: Mateusz Pusz
Join Mateusz Pusz for a hallway-style discussion on:
  • Modern C++
  • Templates, metaprogramming
  • C++20
  • the C++ standardization process
  • Performance and Low Latency
  • Delivering online talks and workshops
  • CMake
  • Conan

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 →


Tuesday September 15, 2020 10:00 - 10:20 MDT
generate_n()

10:30 MDT

[Overflow] C++20: An (Almost) Complete Overview
If the all_of() track is full, then join us in generate_n() as the overflow room.


The technical work on C++20 was finished in January 2020, and is now being pushed through ISO certification.

This presentation gives an overview of (almost) all new features in both the language and the Standard Library. Some more exotic features will be left out. New language features include modules, coroutines, concepts, templated lambdas, constexpr changes, designated initializers, the spaceship operator, string literals as template parameters, feature test macros, conditional explicit, immediate functions, and more.

The second part of the session discusses the changes to the Standard Library. This includes topics such as ranges, atomic smart pointers, cancellable threads, a synchronization library, calendars, time zones, span, a formatting library, features test macros, and more.

The material is mostly the same as the "C++20: What's in it for you?" session from CppCon 2019, but it has been updated with the final standard. If you want a complete overview of all C++20 features, including references to other more deep-dive sessions at CppCon 2020 on certain topics, then this session is for you.

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 →


Tuesday September 15, 2020 10:30 - 11:30 MDT
generate_n()

12:00 MDT

Building a Coroutine based Job System without Standard Library
A job system is a common game engine component to improve total CPU throughput. In this talk, I will walk through building a coroutine-based job system and explain the advantages of using coroutines over the typical ways to build a job system.

We shipped coroutines in C++20, but why does it matter for users, especially since there’s no standard library support? The answer is the coroutine semantics. Developers can customize the behavior of `co_return`, `co_yield`, `co_await` to build their own systems without any dependency of the standard library. For game developers, this is important because many game studios forbid the use of the standard library. The coroutine language feature itself is flexible enough to build a system with 100% control, which is exactly what engine developers want—no black box, no magic.

I will discuss the design decision I made, trade-offs, and current limitations. This talk is a crash course for system developers who want to build systems independently from the standard library and will also discuss possible future directions for this language feature.

This is an advanced coroutine talk and I expect attendees to have basic understanding about how (c++)coroutine works. Here is a useful link for some related materials if you want more information before attending this talk: https://gist.github.com/MattPD/9b55db49537a90545a90447392ad3aeb

Speakers
avatar for Tanki Zhang

Tanki Zhang

Real-time Rendering Engineer, NVIDIA
Tanki is a real-time rendering engineer at NVIDIA. He has been an active member of both the C++ community and the graphics community. As a game developer focused on game engine technics, he is passionate about different new knowledge and is excited to try things out.


Tuesday September 15, 2020 12:00 - 13:00 MDT
generate_n()
  • Future of C++

13:00 MDT

AMA: Tanki Zhang
Join Tanki Zhang for a hallway-style discussion on:
  • Game and Game Engine Development
  • Computer Graphics
  • General C++

Speakers
avatar for Tanki Zhang

Tanki Zhang

Real-time Rendering Engineer, NVIDIA
Tanki is a real-time rendering engineer at NVIDIA. He has been an active member of both the C++ community and the graphics community. As a game developer focused on game engine technics, he is passionate about different new knowledge and is excited to try things out.


Tuesday September 15, 2020 13:00 - 13:20 MDT
generate_n()

13:30 MDT

C++20 STL Features: One Year of Development on GitHub
At CppCon 2019, Microsoft open-sourced its implementation of the C++ Standard Library. In the year since then, we've worked with many contributors on GitHub, adding dozens of C++20 features. In this talk, we'll explore some of these C++20 features and how you can use them in your code (even if you don't use our implementation). We'll also take a tour of microsoft/STL development on GitHub and our intensive code review process.

Examples of C++20 features we'll explore: span which makes working with contiguous sequences easier, constexpr algorithms which make it possible to verify that lookup tables are sorted at compile time (or just sort them at compile time!), erase_if() which finally supersedes the "erase-remove idiom", integer comparison functions which make it easier to write correct code without worrying about the Usual Arithmetic Conversions, and make_shared() for arrays which extends the classic "single allocation" optimization.

We're using GitHub issues and pull requests for all development, and we're recording a detailed Changelog in a GitHub wiki page. If you want to follow our progress, this talk will explain how to find what we're working on and what remains to be done. This talk will also show how we use a GitHub project to track PRs as they go through multiple stages of review. (The span PR accumulated almost 700 comments before being merged!) If you're interested in contributing, whether it's a small improvement or an entire feature, seeing this process should help.

Speakers
avatar for Stephan T. Lavavej

Stephan T. Lavavej

Programmer-Archaeologist, Microsoft
Stephan T. Lavavej is a Principal Software Engineer at Microsoft, maintaining Visual C++'s implementation of the C++ Standard Library since 2007. He also designed a couple of C++14 features: make_unique and the transparent operator functors. He likes his initials (which people can... Read More →


Tuesday September 15, 2020 13:30 - 14:30 MDT
generate_n()
  • Future of C++
 
Wednesday, September 16
 

09:00 MDT

No Touchy! A Case Study of Software Architecture with Immutable Objects
Our mission at ViewRay's is to conquer cancer by reenvisioning radiation therapy

Part of this is a piece of software which supports many workflows involving communication with various external agents such as an MRI scanner, a radiotherapy linear accelerator, a database, and, of course, the human operator. This software was started from scratch at the beginning of 2019 and is developed primarily in C++17.

This talk covers the multi-threaded and multi-process architecture of the software. It focuses on one of its elements: immutable objects. This is a pattern which started with functional programming. It was popularized by Haskell and it's hugely popular in web development — the React-Redux stack, for example — but it is not that popular in C++ software development. We will talk about how we ended up sticking with immutable objects, how they helped (and sometimes hindered) our development, what we invented in order to make them practical in C++, and problems and solutions we encountered along the way.

Speakers
avatar for Borislav Stanimirov

Borislav Stanimirov

Staff Software Engineer, ViewRay
Borislav has been a C++ programmer for more than 17 years. The majority of his career has been in video games and in the past two years he's been working on software for medical devices. He has worked on C++ software for all kinds of platforms: desktops, mobile devices, servers, and... Read More →


Wednesday September 16, 2020 09:00 - 10:00 MDT
generate_n()
  • Design

10:30 MDT

[Overflow] Performance Matters
If the all_of() track is full, then join us in generate_n() as the overflow room.


Performance is one of the chief reasons why many C++ programmers love the language. In the past, Moore's Law meant that our programs ran faster every year. Now that Dennard scaling has ended, C++ programmers have to work harder to get high performance for their applications. In this talk, I'll first discuss some of the significant and surprising challenges facing C++ programmers trying to achieve high performance on modern hardware platforms: performance is far less stable and predictable than you might think! I'll present some experimental evidence that strongly suggests we can't count on compiler optimizations to help us out of this hole: in particular, I'll show -- using a new experimental methodology -- that the difference between clang's -O2 and -O3 optimization levels is essentially indistinguishable from noise.

Since compiler optimizations have run out of steam, we need better profiling support, especially for modern concurrent, multi-threaded applications. I'll talk about a new approach to profiling, which I call "causal profiling". Causal profiling lets programmers optimize for throughput or latency, and which pinpoints and accurately predicts the impact of optimizations. It works by running performance experiments, based on the idea of "virtual speedups". We've built a causal profiler called Coz, which now ships as part of standard Linux distros, and which also works for C++ and Rust (there's even a Java version). Using it, we find that Coz can unlock previously unknown optimization opportunities. Guided by Coz, we improved the performance of Memcached (9%), SQLite (25%), and accelerated six other applications by as much as 68%; in most cases, this involved modifying less than 10 lines of code and took under half an hour (without any prior understanding of the programs!).

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 →


Wednesday September 16, 2020 10:30 - 11:30 MDT
generate_n()

12:00 MDT

Cross-Platform Pitfalls and How to Avoid Them
C++ cross-platform development is difficult. These difficulties are compounded by the fractured solution field, where every project seems to use a different combination of build systems, package managers, and diagnostic tools to address shared challenges. Join us for a discussion and demo of C++ cross-platform development centered on common pitfalls and widely adopted tooling.

Learn how to leverage CMake to seamlessly build across operating systems and platforms. Untangle your dependencies with tools like vcpkg and Conan to avoid inconsistencies between system package managers. Debug your projects across multiple platforms with Visual Studio and Visual Studio Code. We’ll also take a brief look into how to use CI and testing to get in front of issues before they even happen.

Speakers
ES

Erika Sweet

Program Manager, Microsoft
Erika is a Program Manager on the Visual C++ Team at Microsoft. She likes math and mystery novels. She is currently working on developer tools to support C++ cross-platform development.


Wednesday September 16, 2020 12:00 - 13:00 MDT
generate_n()

13:30 MDT

Effective Remote C++ Development with Codespaces
The rise of remote work and the growth of team sizes present a challenge for C++ developers. Many C++ projects have complex hardware and software requirements, making onboarding of new team members and productive coding from home harder than they need to be. We need tools to ease configuration of your team's development environments and grant them access to the processing power they need from wherever they are in the world.

This presentation will show how Codespaces can use the power and flexibility of the cloud to address these issues. Codespaces give you the ability to quickly create a managed online development environment specific to your project that you can access from anywhere. We'll look at the problems which hit C++ developers particularly hard, like long build times and dependency management. Finally, we'll show the tool in action to give you a feel for how your teams could leverage it, and more broadly get you to think about what parts of your team's development process can be streamlined.

Speakers
avatar for Nick Uhlenhuth

Nick Uhlenhuth

Program Manager, Microsoft


Wednesday September 16, 2020 13:30 - 14:00 MDT
generate_n()

14:10 MDT

Design Patterns for Handling and Reporting Errors in C++ Programs Using Parallel Algorithms and Executors
C++17 already has parallel algorithms.  Executors (P0443, hopefully in C++23) will add asynchronous execution to parallelism.  The usual C++ error handling approach, exceptions, will not work "out of the box."  We need to build up new patterns for error handling.

C++ parallel algorithms and executors have several challenges handling errors.  First, errors can happen nonlocally -- in parallel tasks other than my own -- yet they can affect correctness of an entire parallel algorithm.  Second, notification of errors may be deferred: I may not find out about an error right away.  Third, I may need to take explicit action to find out about an error.  Fourth, checking whether an error has occurred somewhere might have a performance cost.  Finally, letting exceptions propagate across certain boundaries may have unfortunate consequences: the program might crash without respecting destructors and stack unwinding, or it might even "hang" (become unresponsive).

I'm not offering canned solutions to these issues.  However, we don't have to start from scratch: this situation shares much in common with others that have been around for decades.  Examples include non-C++ interfaces to C++ libraries, boundaries between graphical user interface and back-end code, and distributed-memory parallel code.  My experience is mainly with distributed-memory parallel code that uses MPI, the Message Passing Interface that has seen nearly 30 years of continuous use and evolution.  In this talk, I'll show how design patterns already exist for parallel error handling, and I'll apply these design patterns to C++17 parallel algorithms, executors (P0443r13), and parallel algorithms for executors (P1897r3).

Speakers
avatar for Mark Hoemmen

Mark Hoemmen

Scientific software developer, Stellar Science
Mark Hoemmen has a B.S. in mathematics and computer science from the University of Illinois, and a PhD in computer science from the University of California Berkeley. His background is in numerical linear algebra and parallel computing. Mark has 20 years' professional experience as... Read More →


Wednesday September 16, 2020 14:10 - 14:40 MDT
generate_n()
  • Safety/Error Handling

14:40 MDT

AMA: Mark Hoemmen
Mark Hoemmen has been developing parallel libraries and applications for over a decade.

He is working with others on a linear algebra library for the C++ Standard.

Speakers
avatar for Mark Hoemmen

Mark Hoemmen

Scientific software developer, Stellar Science
Mark Hoemmen has a B.S. in mathematics and computer science from the University of Illinois, and a PhD in computer science from the University of California Berkeley. His background is in numerical linear algebra and parallel computing. Mark has 20 years' professional experience as... Read More →


Wednesday September 16, 2020 14:40 - 15:00 MDT
generate_n()

16:30 MDT

C++ Pub Quiz
What is C++ Pub Quiz, you ask? It's trivia night CppCon style — five rounds, ten questions per round. Write down your team’s answers on a sheet of paper and turn it in at the end of the round.

Remo's "table" system seems ideal for this, so here's the deal: We'll meet in this event's Remo room at the scheduled time. Join a table near the front of the room with whoever you want to be on your team; turn on your mic in Remo. In the Remo general chat, I'll post a Google Meet URL and a Google Form URL. Open the Google Meet in a second tab; turn off your mic in Google Meet.

Each team should pick a team name, and designate a "team captain" who will use the Google Form to submit their answer sheet at the end of each round.

I'll read each round's questions into the Google Meet. (You will be listening in the Google Meet; or, you might designate a "team communications officer" who will be in the Meet with their mic off and their speakers on, relaying the audio through to everyone at their Remo table. Either way should work.) During the round, feel free to converse with your teammates around the table. At the end of the round, the "team captain" will submit your answer sheet via the Google Form, and we'll have a short break while I tally the scores.

High score after five rounds wins both the game and the bragging rights!

Staff
avatar for Arthur O'Dwyer

Arthur O'Dwyer

C++ Trainer
Arthur O'Dwyer is the author of "Mastering the C++17 STL" (Packt 2017) and of professional training courses such as "Intro to C++," "Classic STL: Algorithms, Containers, Iterators," and "The STL From Scratch." (Ask me about training your new hires!) Arthur is occasionally active on... Read More →


Wednesday September 16, 2020 16:30 - 18:30 MDT
generate_n()
 
Thursday, September 17
 

07:30 MDT

Community Organizers Panel
Are you a C++ community leader? Would you like to be?

If you are or would like to be working to build a C++ community, either on-line or in meat space, we'd like to hear from you about your challenges and your successes.

We'll hear from successful community leaders, answer questions, and share resources and ideas. We'll discuss user groups, conferences, podcast, and online communities and forums.

Moderators
avatar for Jon Kalb

Jon Kalb

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 →

Speakers
avatar for Jens Weller

Jens Weller

Meeting C++ / Community Organizer, Meetingcpp GmbH
Jens Weller has worked, since 2007, as a freelancer in C++, specialising in consulting, training and programming C++. He started with programming C++ back in 1998. He is an active member of the European C++ community and the founder of the Meeting C++ platform and conference. Jens... Read More →
avatar for Inbal Levi

Inbal Levi

Software Engineer, SolarEdge
Inbal Levi is an embedded software engineer with a passion for high performance.She is one of the organizers of CoreCpp conference and CoreCpp user group.She's also a member of ISO/IEC JTC1/SC22/WG21 (the C++ Standards Committee), and among the founders of the Israeli NB Mirror c... Read More →


Thursday September 17, 2020 07:30 - 08:30 MDT
generate_n()

09:00 MDT

What’s in a Name? What’s a Name In?
If it weren't for names, we would all be programming in a machine language of zeroes and ones.

C++ gives us an incredibly rich collection of language features for declaring and accessing names and their associated program artifacts. For example, C++ has several kinds of id-expressions (not just names), several kinds of scopes (not just blocks and namespaces), several kinds of declarations, and a plethora of name lookup algorithms (some with several variations).

This talk will provide deeper insights into what these language features do, how they interact, and how we programmers can take best advantage of them. Using numerous examples, we will touch upon such related topics as friendship and hidden friends, hiding and overriding, inline namespaces, labels, overloading, points of declaration, using-declarations and using-directives, visibility, and more.

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 September 17, 2020 09:00 - 10:00 MDT
generate_n()
  • Design

10:30 MDT

[Overflow] Neighborhoods Banding Together: Reasoning Globally about Programs
If the all_of() track is full, then join us in generate_n() as the overflow room.


Our most detailed reasoning about programs is done locally: we consider a neighborhood of a program — usually a single function and the interfaces surrounding it — and reason about its behavior without reference to the remainder of the program. But this reasoning is in service of a larger goal: we want to ensure that the entire program behaves correctly.

In this talk, I will take local reasoning for granted, and look at the process of joining neighborhoods of local reasoning together, and the global reasoning that ensures they form a coherent whole. I will show how we can prevent incoherent joining, and prevent the emergence of unbounded non-local recursion as the program is linked together.

This talk builds upon the discussion of local reasoning in last year's talk "The Truth of a Procedure,” but is intended to be understandable independently.

Speakers
avatar for Lisa Lippincott

Lisa Lippincott

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


Thursday September 17, 2020 10:30 - 11:30 MDT
generate_n()
  • Design

12:00 MDT

C++20 Ranges in Practice
Among the many new additions to C++20 are Ranges, a modern revision of the STL offering updated algorithms and new “views” with lazy evaluation.

In this example-based talk we’ll work through several practical demonstrations of how the new Ranges functionality may be used to solve everyday problems concisely, elegantly and efficiently. In addition, we’ll offer tips on how to avoid common errors in your Ranges code, and demonstrate a couple of useful utility functions which you can drop into your codebase today.

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 →


Thursday September 17, 2020 12:00 - 13:00 MDT
generate_n()

13:30 MDT

Monoids, Monads, and Applicative Functors: Repeated Software Patterns
Forget factories, singletons, and proxies; What are the real patterns in software development? This talk explores abstract mathematical structures that commonly recur in software development. Once a mind is trained to recognize these patterns, it becomes easy to identify the fundamental operations for domain specific classes and how to put the pieces together. This discussion is for those who enjoy math, abstract concepts, and expanding their minds.

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 →


Thursday September 17, 2020 13:30 - 14:30 MDT
generate_n()

16:00 MDT

C++ Pub Quiz
The Pub Quiz so nice, we're doing it twice! A new batch of questions for a new evening. You're welcome to join us no matter whether you attended Wednesday evening's session or not. You're encouraged to mix up the existing teams and choose new team names. Teams are also encouraged to leave an empty chair at their table; you never know who might drop in during the game!

What is C++ Pub Quiz, you ask? It's trivia night CppCon style — five rounds, ten questions per round. Write down your team’s answers on a sheet of paper and turn it in at the end of the round.

Remo's "table" system seems ideal for this, so here's the deal: We'll meet in this event's Remo room at the scheduled time. Join a table near the front of the room with whoever you want to be on your team; turn on your mic in Remo. In the Remo general chat, I'll post a Google Meet URL and a Google Form URL. Open the Google Meet in a second tab; turn off your mic in Google Meet.

Each team should pick a team name, and designate a "team captain" who will use the Google Form to submit their answer sheet at the end of each round.

I'll read each round's questions into the Google Meet. (You will be listening in the Google Meet; or, you might designate a "team communications officer" who will be in the Meet with their mic off and their speakers on, relaying the audio through to everyone at their Remo table. Either way should work.) During the round, feel free to converse with your teammates around the table. At the end of the round, the "team captain" will submit your answer sheet via the Google Form, and we'll have a short break while I tally the scores.

High score after five rounds wins both the game and the bragging rights!

Staff
avatar for Arthur O'Dwyer

Arthur O'Dwyer

C++ Trainer
Arthur O'Dwyer is the author of "Mastering the C++17 STL" (Packt 2017) and of professional training courses such as "Intro to C++," "Classic STL: Algorithms, Containers, Iterators," and "The STL From Scratch." (Ask me about training your new hires!) Arthur is occasionally active on... Read More →


Thursday September 17, 2020 16:00 - 18:30 MDT
generate_n()
 
Friday, September 18
 

09:00 MDT

Halide: A Language for Fast, Portable Computation on Images and Tensors
Halide is an open-source, domain-specific language for optimizing image processing, machine learning, and general array processing. It is used by major companies like Google, Adobe, and Qualcomm to optimize performance-critical software. It processes every photo taken with a Pixel phone, composites layers in every Photoshop document, and handles video processing at scale at YouTube.

We will explore how Halide achieves top-tier performance in a fraction of the development time by separating the algorithm (what to compute) from the schedule (how to optimize it). Halide's schedules determine trade-offs between parallelism, vectorization, cache locality, and memory management in a simple, modular way. Programmers can easily target different CPUs and GPUs by writing multiple schedules. Halide integrates tightly with C++ and provides both a JIT and a C++ compatible ahead-of-time compiler.

Speakers
avatar for Alex Reinking

Alex Reinking

Programming Languages Researcher, UC Berkeley
Alex is a Ph.D. student at UC Berkeley working with Jonathan Ragan-Kelley on designing domain-specific languages for high-performance computing. He has previously worked at Microsoft Research and Facebook AI+R. He holds an MS in Computer Science from UC Berkeley and a BS in Computer... Read More →


Friday September 18, 2020 09:00 - 10:00 MDT
generate_n()

10:30 MDT

Not Leaving Performance On The Jump Table
In this laptop I will use to talk to you, std::function is measured to have, for normal use cases, a latency overhead of over 79% for dispatching compared to just using function pointers. Our colleagues at Facebook improve in folly::Function by over 14%, however the open source Zoo libraries’ implementations I will talk to you about improves upon folly’s at least another 24% (35% over libc++) while at the same time dramatically reducing the object code size and allowing lots of practical features being proposed for what Arthur O’Dwyer calls “the design space of std::function“, all with top performance. When I report these findings colleagues have a hard time believing them, the presumption is by this time we should know well how to implement this with nearly theoretical maximum performance; then I must be wrong, my implementation has got to be severely flawed in some way... yet this library is used extensively in a mobile app that has over 200 million daily active users, in Android, iOS, and Windows, Mac OS X apps.

The improvements come from performance oversights that indeed have lasted for decades, once I tell you what they are, together with simple yet rigorous benchmarks and compiler explorer links, you will have no trouble to understand the improvements and realizing there are general principles we could learn from. That’s what this presentation is about.

Improving std::function is just the tip of the iceberg, when it comes to dispatching to behavior specified at runtime, there are many performance mistakes concerning the design of callbacks, event subscription/publishing mechanisms, and even the very language supports runtime polymorphism in a way that is very hostile to performance, among other problems. I hope to tell you all about the solutions we have found for these problems in the presentation “Type Erasing The Pains Of Runtime Polymorphism”, here we will focus exclusively on attaining nearly maximal performance while dispatching to runtime specified user code.

The techniques to be discussed are not processor architecture specific but general, directly applicable to components such as std::function, std::variant, their hybrids, throwing exceptions, error handling, the visitor design pattern, and the whole of runtime polymorphism. Furthermore, the examples are from real life improvements.

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 →


Friday September 18, 2020 10:30 - 11:30 MDT
generate_n()

12:00 MDT

The Networking TS from Scratch: I/O Objects
The facilities of the Networking TS provide a framework within which testable, extensible, asynchronous programs may be written in C++. Alongside this the Networking TS provides concrete “I/O object” types which provide means of performing I/O and thereby allow the authoring of such programs immediately.

Invariably these provided I/O objects will not be sufficient. Datagram and stream sockets do not describe the entire universe of asynchronous I/O. When the time comes to author new I/O objects it will be important to do so within the framework of the Networking TS thereby providing facilities ripe for reuse and composition.

The talk will explore the task of authoring new I/O object types by motivating and illustrating the facilities and patterns the Networking TS provides for this purpose.

Speakers
avatar for Robert Leahy

Robert Leahy

Lead Software Engineer, MayStreet Inc.
Robert is a graduate of the University of Victoria where he specialized in graphics, gaming, and digital geometry processing. After 4.5 years in full stack web development he switched to financial infrastructure software development in early 2017. He’s since become involved in the... Read More →


Friday September 18, 2020 12:00 - 13:00 MDT
generate_n()
  • Concurrent/Async/Parallel

13:30 MDT

[Overflow] Empirically Measuring, and Reducing, C++’s Accidental Complexity (“Simplifying C++” #7 of N)
If the all_of() track is full, then join us in generate_n() as the overflow room.


We often hear “C++ is more complex than it needs to be,” typically demonstrated using anecdotes and “gotcha” examples. Those can be valid and demonstrate real pain points, but it would be nice to have more quantifiable data that we could analyze to measure sources of complexity. This talk reports work to systematically catalog and measure C++’s unneeded complexity, how some current evolution proposals may address its major sources, and presents specific suggestions on what we might be able to do about it in the context of a future-evolution proposal to simplify parameter passing and provide meaningful initialization guarantees in 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++.


Friday September 18, 2020 13:30 - 14:45 MDT
generate_n()
 
  • Timezone
  • Filter By Date CppCon 2020 Sep 9 -23, 2020
  • Filter By Venue online
  • Filter By Type
  • • Algorithms/Functional
  • • Compilers/Tooling
  • • Concurrent/Async/Parallel
  • • Deep Magic
  • • Design
  • • Education/Coaching
  • • Embedded
  • • Future of C++
  • • GPU/Graphics Programming
  • • Metaprogramming/Reflection
  • • Safety/Error Handling
  • • Software Evolution/Portability
  • • Testing
  • Back to Basics
  • Business
  • Class
  • Social


Twitter Feed

Filter sessions
Apply filters to sessions.