Another CppCon draws to a close, and the future looks healthy and exciting. Also, I finally gave a Lightning Talk.
Overall, the conference experience this year was very smooth, compared to my last two times here, despite the conference growth. There were over 1100 attendees, up from about 900 last year. There were sometimes 7 concurrent tracks, which is larger than years past. Again, with most every time-slot I suffer from the paradox of choice, and if I chose a less than stellar talk, I regret what I’m potentially missing elsewhere.
This year, there seemed to be more focus on how Modern C++ is taught. Bjarne Stroustrup’s opening keynote “Learning and Teaching Modern C++” focused exactly on this, as did several other talks and sessions, including Sara Chipps’ “Building for the Best of Us: Design and Development with Kids in Mind”. This resonates with me, as I find that most non-C++ developers don’t realize that C++ has and is evolving; they perceive that it is something fixed in the past, and Java, C#, Rust, etc., are what evolved from that, and thus C++ is obviated.
In Titus Winter’s plenary session “C++ as a “Live at Head” Language”, he announced Google’s release of Abseil. These are support libraries that are used (in some form) inside Google throughout their C++ code, and much of their public software products, such as Protocol Buffers, will be switching to rely on them. These tools will evolve over time, and scripts will be provided to auto-update any code-base using them, so that one can “Live at Head”. This is the term of being able to recompile all of ones’ code “at head” from source, without having to worry about various binary library compatibilities.
As with prior years, there are great talks all around. Here are some of my more memorable ones:
- Alfred Bratterud’s “Deconstructing the OS: the Devil’s In the Side Effects”: IncludeOS is a micro-unikernel operating system developed in and exposed to C++, allowing one to write almost any micro-service. I find this topic alone fascinating, as I’m a longtime Linux user. Alfred is an engaging presenter, and his slides were well crafted.
- Kostya Serebryany’s “Fuzz or lose: why and how to make fuzzing a standard practice for C++”: While it was hard for me to understand him in the beginning, I found his talk compelling. He really did a great job advocating for people to adopt fuzzing techniques, showing the ease of coding, easy access of tooling, and value proposition in bugs discovered. While I’ve known of fuzzing for a couple of years, this presentation is a painful reminder I’m late to investigate such techniques, and that the tools likely are mature enough for adoption.
- Herb Sutter’s “Meta: Thoughts on generative C++” was an amazing presentation. I had not read his weblog post, nor watched his ACCU 2017 keynote presentation on meta-classes, so this was my first exposure to it. He gave great motivation examples leading up to the core message, and gave very compelling examples and reasons for wanting such a capability. I find this particularly interesting, because it is a medium-term goal that relies on the successful introduction of reflection, introspection, and compile-time injection, which means that those features now have a future functionality to try to support, which hopefully will both improve their design, and give stronger focus on their completion.
- Jonathan Henson’s “Naivety of Creating Cross-Platform, Modern C++ Libraries: A Tour Of Our Challenges and Successes” was a very good talk. It discussed the design of the Modern C++ library interface to AWS. Each major design decision was discussed, and then the pros/cons were discussed. This was both broad and deep, and I think anyone creating a largely distributed library would benefit from it’s content.
- Olivier Giroux’s “Designing C++ Hardware” presentation on the NVidia Volta was great, and his content was simple, despite how nuanced somethings like the memory model and the execution model are. Heterogeneous computing is still on the edge of the “adjacent possible” for being easy to do, so I find this subject compelling.
- Rian Quinn’s “A Test a Day Keeps Your Manager Away!”: I think this was a really good talk, and on a very important subject. Continuous Integration, and the (healthy) explosion of code tools makes for a challenging delta from where many of us start, so having a “Hello World” for Travis CI project on GitHub that is wired with all of these tools is a great way for other developers to bootstrap themselves, or compare notes with another configuration. When it comes time for me to open-source a library, I’ll have to provide a CI solution of it, and this could be a great resource.
- Viktor Kirilov’s “Mix Tests and Production Code With Doctest – Implementing and Using the Fastest Modern C++ Testing Framework”: I thought this talk was really impressive. The presentation was good, the technical details were strong, and the presenter was passionate about this project. Also, he discussed compile-time speed, and minimizing header ‘#include’ dependencies, which related to my Lightning Talk, which I appreciated.
- Tobias Fuchs’ “The Point of Views: Multidimensional Index Sets for Data Locality in HPC Applications”: I thought this was a very good presentation for what can be a difficult subject, namely memory views and distributed memory. His presentation used very good visuals to explain, and the code API is also (nearly) self-explanatory. His interactive demos were also good, and showed the ease of diagnosing. He is very knowledgeable about the HPC field, and was able to answer all questions with deep responses. As I’ve done signal processing, and had to slice multi-dimensional arrays, I really can appreciate this work.
- Sara Chipps’ “Building for the Best of Us: Design and Development with Kids in Mind” was a great subject and a good talk. She simply walked through the whole product development process, and gave a live demo of the product during the presentation. Having two of the users present their experience was also a meaningful touch. Inline with the education theme of the talks this year, she asked one question that I think spoke louder than anything else during the whole conference: “When did you begin to code? Under 15? Under 12? 10?” Nearly the whole room raised their hands at the first question. Those who are passionate about coding learned to code at a young age, when it was something fun to do, not when it was a necessary tool to get something else done. I remember making a turtle move around with Logo, PEEKing and POKEing memory in with BASIC, and programming my TI-85 calculator to do (PnP) RPG dice rolls; one of these were academic in nature.
Missed Talks Highlights
Although I didn’t go to these talks, I really wish I could clone myself, or that Time-Turners existed, if only for this week, so that I could have attended them.
- Greg Law’s “The Programmer CEO: Tales From Starting a Company Aimed at C++ Developers”
- Jason Turner’s “Practical C++17”
- John Lakos’ “Local (‘Arena’) Memory Allocators”
- Mathieu Ropert’s “Using Modern CMake Patterns to Enforce a Good Modular Design”
- Alfred Bratterud’s “Delegate this!”
- John McFarlane’s “CNL: A Compositional Numeric Library”
- Teresa Johnson’s “ThinLTO: Building C++ Applications with Scalable Whole Program Optimization”
- Chuck Allison, Andrew Lumsdaine, Patrice Roy, and Bjarne Stroustrup: “C++ in Academia”
- Lukas Bergdoll’s “Using IncludeOS to Write Fast and Secure Web Applications”
- John Regehr’s “Undefined Behavior in 2017”
- Matt Kulukundis’ “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
- Scott Schurr’s “Type Punning in C++17: Avoiding Pun-defined Behavior”
- Boris Kolpackov’s “Building C++ Modules”
- Hartmut Kaiser’s “The Asynchronous C++ Parallel Programming Model”
- Robert Ramey’s “How to Write Effective Documentation for C++ Libraries with Minimal Effort”
- Nicole Mazzuca’s “Objects, Lifetimes, and References, oh my: the C++ Object Model, and Why it Matters to You”
- Dmitry Panin’s “Practical Techniques for Improving C++ Build Times”
- Peter Goldsborough’s “A Tour of Deep Learning With C++”
- Gor Nishanov’s “Naked coroutines live (with networking)”
- Nicholas Ormrod’s “Fantastic Algorithms and Where To Find Them”
- Juan Pedro Bolivar Puente’s “Postmodern immutable data structures”
- Gennadiy Rozental’s “How to break an ABI and keep your users happy”
- David Sankel’s “So, you inherited a large code base…”
- Paul Blinzer’s “AMD ROCm and the Heterogeneous System Architecture for HW accelerated C++ and high level languages”
- Brett Searles, Jelani Brandon, Sara Chipps, Lloyd Moore, Patrice Roy, Dan Saks, and Ewerton Scaboro da Silva: “C++ in the Internet of Things”
- Pablo Halpern’s “Modern Allocators: The Good Parts”
- David Watson’s “C++ Exceptions and Stack Unwinding”
- Gordon Brown, and Michael Wong’s “Designing a Unified Interface for Execution”
- Nir Friedman’s “What C++ developers should know about globals (and the linker)”
- Eddie Elizondo’s “Optimizing compilation times of Generated Code with Templates”
- Louis Brandy’s “Curiously Recurring Bug Patterns in C++ at Facebook”
- Klaus Iglberger’s “Free Your Functions!”
- Yu Qi’s “Compile-time reflection, Serialization and ORM Examples”
- Chandler Carruth’s “Going Nowhere Faster”
- Rich Geldreich, and Stephanie Hurlburt’s “The Future of Texture Compression”
- Nathan Sidwell’s “Implementing C++ Modules in G++”
- Scott Jones, and Kenny Kerr’s “C++/WinRT and the Future of C++ on Windows”
- Michael Spencer’s “My Little Object File: How Linkers Implement C++”
My Lightning Talk
This year, I gave a talk entitled “The Three Layers of Headers: A Curious Discovery”. Overall, it was a good experience, and I’m glad I did it.
Last year, I actually started to put together this Lightning Talk, but due to overwhelming supply, and lack of my planning, I wasn’t able to give it. I presented it once to the Boston C++ Meetup group, although over 12-15 minutes, not within 5. I spent several mornings, lunches, and dinners adding, editing and removing. I was starting to stress over this, but just had to prioritize what parts were most important… which lead to me adding more important, missing content.
Anyway, in retrospect, I tackled too big a subject for the Lightning Talk format; there’s not enough time to motivate, present the idea, and then walk through examples of how it helps. Also, I was skipping conference sessions to prepare it, which means I probably missed out on opportunities to observe more content, and meet with people.
It was a good conference, and I found myself playing multiple roles: attendee, Lightning Talk presenter, and social-networker for the Boston C++ Meetup group. I didn’t have much strategy for balancing these, but it worked itself out.
I’m thankful for the hallway discussions, such as with Honggyu Kim, Gabriel Aubut-Lussier, Charley Bay, Kate Gregory, Walter Brown, Dan Saks, Pablo Halpern, and Kostya Nazarenko.