Video & On-Demand

CppCast Episode 166: CppCon Poster Program and Interface Design with Bob Steagall

Episode 166 of CppCast the only podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Bob Steagall to discuss his history with C++, the CppCon poster program and his upcoming talks.

CppCast Episode 166: CppCon Poster Program and Interface Design with Bob Steagall

by Rob Irving and Jason Turner

About the interviewee:

Bob is a Principal Engineer with GliaCell Technologies. He's been working almost exclusively in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of his career was spent in medical imaging, where he led teams building applications for functional MRI and CT-based cardiac visualization. After a brief detour through the worlds of DNS and analytics, he's now working in the area of distributed stream processing. Bob is a relatively new member of the C++ Standardization Committee, and launched a blog earlier this year to write about C++ and topics related to software engineering. He holds BS and MS degrees in Physics, is an avid cyclist, and lives in fear of his wife's cats.

CppCon 2017: Type Punning in C++17: Avoiding Pun-defined Behavior--Scott Schurr

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Type Punning in C++17: Avoiding Pun-defined Behavior

by Scott Schurr

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

Type punning, treating a type as though it is a different type, has a long and sordid history in C and C++. But, as much as we'd like to deny its existence, it plays an important role in efficient low-level code. If you've ever written a program that examines the individual bits of a pointer or of a floating point number, then you've done type punning.

Given its long legacy, some of the techniques for type punning that were appropriate, even encouraged, earlier in history now live in the realm of undefined behavior. We'll identify which techniques are now proscribed and postulate why. We'll also explore ways to do type punning in C++17 that sidestep undefined behavior and are hopefully as efficient as the older techniques.

In this session we will look at:
o Common (and some uncommon) motivations for type punning.
o Techniques for type punning, both good and bad, all ugly.
o Related topics (like type conversions and std::launder()) with an eye toward unspecified and undefined behavior.

CppCon 2017: When a Microsecond Is an Eternity: High Performance Trading Systems in C++--Carl Cook

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

When a Microsecond Is an Eternity: High Performance Trading Systems in C++

by Carl Cook

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

Automated trading involves submitting electronic orders rapidly when opportunities arise. But it’s harder than it seems: either your system is the fastest and you make the trade, or you get nothing.

This is a considerable challenge for any C++ developer - the critical path is only a fraction of the total codebase, it is invoked infrequently and unpredictably, yet must execute quickly and without delay. Unfortunately we can’t rely on the help of compilers, operating systems and standard hardware, as they typically aim for maximum throughput and fairness across all processes.

This talk describes how successful low latency trading systems can be developed in C++, demonstrating common coding techniques used to reduce execution times. While automated trading is used as the motivation for this talk, the topics discussed are equally valid to other domains such as game development and soft real-time processing.

CppCast Episode 165: Formal Verification with Matt Fernandez

Episode 165 of CppCast the only podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Matt Fernandez from Intel Labs to discuss Formal Verification.

CppCast Episode 165: Formal Verification with Matt Fernandez

by Rob Irving and Jason Turner

About the interviewee:

Matthew Fernandez is a Research Scientist with Intel Labs. Matt began his programming career building Windows GUI applications and designing databases, before moving into operating system architecture and security. He has a PhD in formal verification of operating systems from the University of New South Wales in Australia, and worked with the Australian research group Data61. In the past, he has worked on compilers, device drivers and hypervisors, and now spends his days exploring new tools and techniques for functional correctness and verification of security properties. On the weekends, you can usually find Matt in a park with a good book, hunting for good coffee or helping a newbie debug their code. He hopes to avoid saying “monad” on this podcast.

CppCon 2017: Building Better Worlds: Developing a Procedural City Tool for Alien...--Alan Bucior

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Building Better Worlds: Developing a Procedural City Tool for Alien...

by Alan Bucior

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

When MPC was asked to create a massive CG city for the film Alien: Covenant, they looked to leverage procedural generation as a means for iterating on the overall shape and structure of the city, in place of a prohibitively large team of environment artists. After evaluating all the practical third party options, it was ultimately decided that the best option was to build a custom tool to procedurally assist artists' city-building skills. This allowed for rapid iteration on the overall look of the city by striking a balance between manual and procedural techniques.

The core algorithms were written in C++ for speed. The user interface was written in Python to accommodate quick feature changes, and a dash of Fabric Engine's KL helped with model import and rendering. This multi-language approach allowed the consistent application of the "best tool for the job" rule, which is a common pattern at MPC, allowing flexible teams with experts in a variety of skillsets.

This talk will detail the history and development of MPC's city building tool, "Machi". Alan Bucior, Lead Developer of Machi, reviews the algorithms for city layout and building placement, discusses how to implement algorithms in an artist-driven manner, and shares various insights gleaned through the development process and discussion with stakeholders.

CppCon 2017: Meta--Andrew Sutton

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Meta

by Andrew Sutton

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

For the past several years, I have been researching new languages to support safe and efficient network protocol processing, specifically for software-defined networking applications. The unfortunate outcome of that research is this conclusion: any language for that domain must also be a general purpose programming language. This is not an easy thing to do. Many of the language features I worked with simply generated expressions to compute packet and header lengths, read and write packet fields, and encode and decode entire packets. If we could do this in C++, I might not need an entirely new language.

Over the past year, Herb Sutter and I have collaborated to work on language support for compile-time programming, static reflection, metaclasses, and code generation in the C++ programming language. These facilities completely eliminate the need for the external tools, metacompilers, and domain-specific languages on which we frequently rely to generate high-performance encoders and decoders in C++.

In this talk, I will discuss how to use these evolving proposals to create facilities for encoding and decoding packets. In particular, I will discuss the background requirements of my work, the overall design of a network protocol library, and the reflection and generation facilities that implement the library.

CppCast Episode 164: SYCL with Gordon Brown

Episode 164 of CppCast the only podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Gordon Brown to discuss his work on SYCL the OpenCL abstraction layer for C++.

CppCast Episode 164: SYCL with Gordon Brown

by Rob Irving and Jason Turner

About the interviewee:

Gordon is a senior software engineer at Codeplay Software in Edinburgh, specialising in designing and implementing heterogeneous programming models for C++. Gordon spends his days working on ComputeCpp; Codeplay's implementation of SYCL and contributing to various standards bodies including the Khronos group and ISO C++. Gordon also co-organises the Edinburgh C++ user group and occasionally blogs about C++. In his spare time, Gordon enjoys dabbling in game development, board games and walking with his two dogs.

CppCon 2017: Designing A Feature That Doesn't Fit--Patrice Roy

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Designing A Feature That Doesn't Fit

by Patrice Roy

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

C++ is a wonderful and expressive language, that gives programmers a lot of freedom even though it actively seeks to let programmers obtain the maximal performance from their hardware. It so happens that sometimes, operating systems can make it easy to do things that are absolutely not natural for a C++ program, but that some C++ programmers consider essential to their practice.

This talk will explore the problem of adding functionality to the language, more specifically to the standard threading library, where said functionality is not a natural fit for the C++ language specification. Expressed otherwise: how can we find ways to meet the needs of users without corrupting the language we all love?

This talk will be more interesting to you if you have met situations where you wanted to do something in "pure C++" but found you had to resort to operating system-specific features to meet your objectives. We will discuss the design space that has been explored for the problem under study, and will try to make emerge the strengths and weaknesses of the various alternatives.

CppCon 2017: Tools from the C++ eco-system to save a leg--Anastasia Kazakova

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Tools from the C++ eco-system to save a leg

by Anastasia Kazakova

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

C++ gives you enough rope to shoot your leg off. Readable (and thus easy to maintain, easy to support) and error-free code in C++ is often hard to achieve. And while modern C++ standards bring lots of fantastic opportunities and improvements to the language, sometimes they make the task of writing high quality code even harder. Or can’t we just cook them right? Can the tools help?

In this talk I’ll highlight the main trickiness of C++, including readability problems, some real-world issues, problems that grow out of C++ context-dependent parsing. I’ll then try to guide you in how to eliminate them using tools from the C++ eco-system. This will cover code styles and supportive tools, code generation snippets, code analysis (including CLion’s inspections and Data Flow Analysis, C++ Code Guidelines and clang-tidy checks), refactorings. I will also pay some attention to unit testing frameworks and dependency managers as tools that are essential for the high quality code development.

CppCon 2017: C++ atomics, from basic to advanced. What do they really do?--Fedor Pikus

Have you registered for CppCon 2018 in September? Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

C++ atomics, from basic to advanced. What do they really do?

by Fedor Pikus

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

C++11 introduced atomic operations. They allowed C++ programmers to express a lot of control over how memory is used in concurrent programs and made portable lock-free concurrency possible. They also allowed programmers to ask a lot of questions about how memory is used in concurrent programs and made a lot of subtle bugs possible.

This talk analyzes C++ atomic features from two distinct points of view: what do they allow the programmer to express? what do they really do? The programmer always has two audiences: the people who will read the code, and the compilers and machines which will execute it. This distinction is, unfortunately, often missed. For lock-free programming, the difference between the two viewpoints is of particular importance: every time an explicit atomic operation is present, the programmer is saying to the reader of the program "pay attention, something very unusual is going on here." Do we have the tools in the language to precisely describe what is going on and in what way it is unusual? At the same time, the programmer is saying to the compiler and the hardware "this needs to be done exactly as I say, and with maximum efficiency since I went to all this trouble."

This talk starts from the basics, inasmuch as this term can be applied to lock-free programming. We then explore how the C++ lock-free constructs are used to express programmer's intent clearly (and when they get in the way of clarity). Of course, there will be code to look at and to be confused by. At the same time, we never lose track of the fact that the atomics are one of the last resorts of efficiency, and the question of what happens in hardware and how fast does it happen is of paramount importance. Of course, the first rule of performance — "never guess about performance!" — applies, and any claim about speed must be supported by benchmarks.

If you never used C++ atomics but want to learn, this is the talk for you. If you think you know C++ atomics but are unclear on few details, come to fill these few gaps in your knowledge. If you really do know C++ atomics, come to feel good (or to be surprised, and then feel even better).