CppCon 2017 trip report

I was at CppCon 2017 to give two talks and watch dozens of others. Here’s what I learnt.

A bit of context

After I went to CppCon for the time last year to present CDBC (with my colleague Jeremy Demeule), I considered coming back with some talk proposal, but I was a bit intimidated and wondered how I could compete with all the good ones I had seen.

In the end, both Joël Falcou and James McNellis convinced me to enter. So I put two proposals together, hoping than one would get picked and of course, the panel picked both. First time speaking both in English and outside my local Paris circle and I get to do it twice, lucky me!

Inspiration

If I had to pick one emotion to come back home with after the conference, that would clearly be inspiration (that’s an emotion, right?).

It started right on the first day when Bjarne talked to everyone about teaching C++, and how difficult it could be to stay relevant. I was of course quite engaged when he spoke about the complexity of the C++ ecosystem (and possibly the lack thereof). Build systems and package management have been kind of my thing lately, and of course I would agree that it’s damn too complicated to kickstart a project in C++ today.

Right after the first session I would get my second big moment of the conference when James’ team at Microsoft showed us Time Travel Debugging with WinDBG. Being used to debug on Windows, that could really be a game changer to me. My only regrets were that one, it only works with Windows 10, two, it’s not integrated with Visual Studio yet, and three, it came at the same as Ben & Jason’s talk on constexprs. Note that for the second part, you can help by sending a feature request to ttdvs@microsoft.com.

Finally, the last big reveal came when Isabella Muerte told us in a very metal way how all build systems basically suck. Being the guy that does talks on CMake and contributes to Conan, I admit that I came to the talk with a bit of an antagonistic mindset, but in the end she made sense. Most languages today can be used by downloading/installing one package for your OS and then building / including external stuff with the given package manager. By contrast C++ requires you to pick a compiler, install it, then install CMake or Meson or something, try to learn it, then do the same for a package manager, and then finally, code.

It came full circle with what Bjarne had said in the opening keynote and convinced me that something must be done. I still think Conan can be the answer, but it isn’t enough as it is. I’ll work on that.

Fear

As I said in the introduction, coming from France to a big conference like CppCon for your first public talk(s) is a bit stressful. It is even more when Google does a keynote on the shortcomings of semver and binary compatibility and you’re scheduled the next morning for a talk about versioning, semver and ABIs.

I had no idea what Titus was going to talk about, even though I knew a bit about Google’s internal model after studying Bazel a bit. The “Live at Head” idea was interesting, but ultimately I felt like I was seeing an alien talking about how people code on his planet. The various discussions I had after it seemed to echo my feeling: while I can certainly sympathize with the idea, it lacked a bit on the practical side. As Boromir once said, “one does not simply change his build infrastructure”.

The model seems to require a serious server farm, moving to a dedicated build system (such as Bazel), a fast feedback loop with large test coverage, lots of automation scripts and skilled build engineers to maintain that. Google can certainly invest in that, but that’s simply not the case for everyone. Codelines may not be ready for that, or simply the project will not have the funds to invest in that level of automation.

Some people joked about “compiler as a service” but I feel there might be something to explore in there. Just like lots of companies use AWS instead of building their own server farm, small and medium business could be interested in renting an infrastucture like Google’s to keep costs manageable.

Wild encounters

I don’t think it’s a secret anymore, but actually seeing the talks is only the tip of the iceberg. After all, that’s something you can always do from your home (thanks YouTube) without needing to pay anything.

No, what the conference is really about is encounters. Meeting people during and after Q&A sessions, exchanging ideas and getting excited by new prospects. When I organize lightning talks, I always say the best that can happen is someone seeing a talk and starting typing a few slides furiously in order to climb on the set a few minutes later to offer a counter-argument. Emulation.

It would be pointless to list the number of fine people I’ve had the occasion to meet but basically I came back with quite a few ideas and thoughts about package management and build systems that I will most likely elaborate in the coming posts.

And also, I need to step-up my game if I want to beat James at the “jokes on Twitter” challenge.

More talks

There’s a few other talks that I quite liked but didn’t get the chance to talk about yet:

  • Herb’s thoughts about Metaclasses, which I’m sure will make coding conventions even more fun to write considering how far you can potentially go with this
  • Matt Godbolt’s unbolting the compiler, whose last name is now also a verb too
  • Kenny Kerr’s impressive feat of wrapping the old Win32 API into a modern C++17 interface (slides)
  • Anthony Williams’ thorough introduction to Concurrency, Parallelism and Coroutines (slides)
  • James’ exploit of making a presentation about DLLs that’s actually not boring (slides)
  • David Sankell’s follow up to his last year talk about managing large code bases (slides)
  • Chandler Carruth’s live demo on compiler optimization that went quite unexpectedly
  • And probably a few dozen more I couldn’t catch…

So go watch the videos, look at the slides, come to CppCon next year and in the meantime, join the cpplang slack.

Oh and if you wonder, my talks went fine in the end :)