CppCon 2018 Trip Report

12 minutes

So it’s been a few months since CppCon 2018 and due to a variety of circumstances I’ve just simply not had the time to tackle writing a full trip report. However, it’s been on my todo list for a while and I’m glad I can finally scratch it off the list. While this may very well be the last CppCon 2018 trip report to be published, it’s definitely the first CppCon trip report of 2019.

This year was the fourth CppCon I’ve attended and I got to meet more new faces in meatspace than I have previously. There were, of course, a few people from #include c++, and getting to finally mingle with them was quite nice. I’m still of the opinion that attending CppCon can be a great boon to your career. I would not be where I am right now if not for CppCon.

In this post, I’ll be discussing the talks I attended, the two talks I participated in (both were not recorded), and also finally address the results of my stunt for wearing the hat and shirt that got me banned from presenting at CppCon 2019, as well as explain why I did it.

Keynotes

The keynotes this year were quite nice. Bjarne’s talk on Concepts was excellent and made some decent points. I’m not sold on ever using the so-called Giraffe_case used in his example code (e.g., Less_than_comparable), so I think I’ll continue to use PascalCase instead 😄

I enjoyed the other keynotes I attended, including Patterns and Techniques Used in the Houdini 3D Graphics Application, Herb Sutter’s Thoughts on a More Powerful and Simpler C++ (5 of N). I had to miss the rest as I was either preoccupied with finishing up paper edits for SG14, or was feeling unwell thanks to some new medication I was trying out.

Talks

This year, I focused mostly on build systems as that’s starting to become my area of specialization. Given that so many build systems are built on our current (fairly broken) compilation model, I expect it’ll be an uphill battle to improve the general realm of tooling. Then again it wouldn’t be me if I wasn’t trying to tackle difficult tasks that no one else wants to do, or innovate in.

I attended quite a few talks this year so I’ll mention the ones that were the most interesting and were not related to build systems. I unfortunately had to miss all of Wednesday due to the SG14 ISO session that was on site.

As always, James McNellis knocked it out of the park with his talk Unwinding the Stack: Exploring How C++ Exceptions Work on Windows. I eventually sent this video to Katharina so she could get some help regarding her handling of Windows exceptions in her quest to get Rust and C++ to play well. I look forward to seeing more horrified faces at RustConf 2019.

Many people have already recommended Hana Dusikova’s Compile Time Regular Expressions and I fully endorse watching this talk as well. I am eager to see the performance improvements found in a PCRE-like library that generates its code at compile time. I suspect that reflection will improve how these libraries can be implemented. Time will tell.

Andrew Sutton did a great job summarizing Concepts in his talk Concepts in 60: Everything you need to know and nothing you don’t. Rather than talk about it in detail, you really should just go watch it.

ThePHD gave his talk on Scripting at the Speed of Thought: Lua and C++ with sol3. Sol3 is shaping up to be an incredible library and he has spent countless hours trying to speed up its compile time performance. I attended the talk because out of all the language binding libraries out there, the solN libraries have one of the best APIs, and I wanted to understand some of the design decisions. If I actually used Lua, I would use sol3.

Ben Deane’s talk Easy to Use, Hard to Misuse: Declarative Style in C++ is a good discussion of API design, something I see thrown to the wayside all too often in many projects and the cause of more developer time wasted than I think can be measured.

Damien Buhl’s talk C++ Everywhere with WebAssembly was absolutely fascinating. I find WebAssembly interesting and its implications of being an actual cross-platform abstract machine specification with plenty of sources to compile to it to be extremely interesting. From game development, to shared hosting of apps, even just portability to newer systems, it has a wide use case. And this also means I barely ever have to touch Javascript so I’m absolutely on board for that.

Lastly, I recommend you look at all the build systems related talks. With C++ modules hopefully coming soon, this is a good time to understand the problem space of build systems, while also starting to voice your opinions. The truth is we just don’t know where our build systems are going to be 10 years after we have modules, and the more eyes we have on the possibilities the better.

SG14

I was able to attend SG14 again this year. This time, I presented 4 papers there, out of 6. The room had a decent count and I was able to get more feedback on [P0468] , the Intrusive Smart Pointer paper. I will discuss more of its current state in the San Diego ISO Trip Report I still have to write.

I also discussed early presentations of my std::byteswap paper (currently on track for inclusion into C++20), as well as a (fairly weak, if I’m being honest) attempt to remove the ability to throw member function pointers, floats, and doubles (because you can do that and no one can stop you).

Arthur O’Dwyer presented his trivially relocatable paper, which I believe is something C++ needs. We don’t have destructive moves and calling our destructive moves relocation makes sense from a wording standpoint. I don’t know if we’ll ever have destructive moves at the language level (though I have some ideas on how to go about it), but it is entirely a usefu optimization. That we ever permitted to allowing throwing move constructors was, in my mind, a mistake.

Presentations

I had the opportunity to do two presentations this year. The first was an unrecorded panel titled Make World: The Most Miserable Place in C++, with Rob Maynard from Kitware, Jussi Pakkanen of meson fame, Peter Bindels from TomTom, and Jason Turner of CppCast as the moderator. In the end, we decided not to have the session recorded so we could say the fuck word, but also so we could have a lighter atmosphere for the others on stage.

I would say it was a success, though there was a brief period where the questions turned into “the CMake support session”. We were able to redirect questions to discussing the current situation of build systems and why CMake is, frankly, insufficient for our needs.

I also participated in the Lightning Talk Challenge, where speakers have a small 3 minutes to give their talk. If the audience thinks their talk is worth it, they can vote to keep the speaker on stage for an extra few minutes, up to a total of 8 minutes. I decided to talk about a small tool I’d started writing to help me bootstrap a C++ project with Python, allowing me to slowly write code as native C++ modules incrementally. The tool is called Brujeria, which is spanish for “black magic”, as it allows a user to simply import their C++ code directly into python, performing the build, and even allowing the download of dependencies along the way. The only downside is that Python doesn’t permit unloading an old native module, so some changes will be needed in the REPL build path to permit loading newer builds. I plan to eventually make a full post once Brujeria is at a 0.1 release and is able to be deploy a module via both a distutils and REPL form. Currently the distutils approach has a bit of work needed to massage it to work with other tools like poetry or just a plain setup.py.

The presentation itself was a success. Judging from laughter and the overall atmosphere, I would argue the audience largely enjoy itself. However, the footage for this lightning talk was deleted, due to a Code of Conduct violation on my part. My apologies to those who were present and wanted to show the talk to others.

And that brings me to the controversy I spurred at CppCon thanks to my articles of clothing.

The Stunt

So, let’s talk about my stunt. In short, I wore a hat that said fuck in the friends logo font, and a shirt that said cum in the doom logo font. This is a CoC violation, and I violated it willingly and intentionally. I was punished by the CoC committee. I am not permitted to participate in CppCon 2019. I can attend, I can observe the conference, but I am barred from presenting or even asking questions from the audience. In short, I am not permitted to be recorded. Furthermore, any talks I give in the future will require that I have my slides finished and available to the organizers for approval before I am on stage.

I accept this punishment and will abide by it. I still intend to be present at CppCon 2019. This means, unfortunately, that I will not be able to ask my (mostly) yearly question during the Grill the Committee session of “Why don’t we have a restrict qualifier?”. Bjarne and the other committee members are surely heartbroken over this news.

Now that I’ve explained the result of my actions, let’s talk about why I did it. Many of the people who actively railed against me on twitter and elsewhere are the same people who usually look to destroy a CoC, or want them removed entirely. Some people even argue that Code of Conducts are only ever applied to straight white cis men, and others are free to do as they please. Given the above paragraph it’s safe to say that is a fallacy and there is now evidence to back this up. This was, effectively, my intention. The CoC is applied to anyone who violates it, myself included.

My only issues with the CoC is how vague it truly is. In my opinion, professionalism is another form of oppression. It is used to other, reduce the work of, and lambast those who don’t fit within one persons ideology of what professional entails. You will find it changes from industry to industry and person to person. It is entirely subjective. Some people might not find it unprofessional to constantly ask someone about the status of their genitals over the C++ slack and receive no punishment from the administrators, others would find that to be extremely unprofessional.

I think, however, we (or at least, most of us) can all agree that mocking the death of an innocent person is not only unprofessional, but repugnant on moral grounds. Thus, I found myself at the Lightning Talks the day prior when Jean-Louis Leroy of Bloomberg presented a talk wherein he mocked the death of Eric Garner, by performing the “hands up, don’t shoot” motion that is used by Black Lives Matters activists to protest the death of innocent black americans at the hands of police. Jean-Louis then said “I can’t breathe”, the last words that Eric Garner said before he died. He was being arrested for selling cigarettes. I had already felt that Jean-Louis had a lack of tact given a slide of his. I tweeted a picture of the contents of his slide.

Some internet brainiacs think that I filed a CoC complaint over the contents of the slide. I did not. It was over his mocking of Eric Garner’s death. Furthermore, others assumed that I was offended that the second bullet point in the above image. While I was disappointed at the bullet point, it was not because of Jean-Louis’ use of guys but rather the extremely small number next to gals. First rule of giving a talk is “Know Your Audience”, and I found the bullet to be in poor taste. While there was a tweet of someone asking if the slide was a violation, I was responding that I had filed a complaint. I didn’t want everyone to know exactly why I filed a CoC complaint. Also, let’s be honest, most of that slide is bullshit.

I knew that this CoC violation that Jean-Louis would most likely be hit with would be used to harass members of #include cpp (this ended up happening anyway, color me surprised). So, after having decided to not wear my “vulgar” clothing, I decided to do so in protest of the vauge CoC’s wording and in an attempt to “jump on the grenade” of incoming anti-CoC individuals.

I wore a sweatshirt over my shirt and did not put the hat on until moments before my talk. I told no one what I was planning to do. The organizers, people in the audience, and even my friends, were not aware of what was going to happen. I did not acknowledge my clothing during the talk, and the audience voted to keep me on stage to let me finish talking. I won’t do something like this in the future. It was a one-time stunt, and I did it out of anger.

A prominent organizer of CppCon was disappointed in me, but at the same time, I’m disappointed that they think saying fuck is as bad as mocking the death of another human being. It doesn’t hurt anyone’s station in life when I say fuck or wear clothing that has that word on it, except myself. But if you have to punch down to make a joke, it was never funny in the first place, and shows a lack of compassion for not only your fellow attendees, but your fellow man.

Don't fucking mock victims of police brutality.

C++

CppCon

Trip Report