Post

(Virtual) Trip Report: ACCU 2024

This week, I virtually attended ACCU 2024.

Notwithstanding the normal benefits of in-person conference attendance, being a Somerset native who grew up about 30 miles from Bristol, I was especially gutted to not be able to attend in person. Hopefully, I’ll have the opportunity to attend a conference in person soon!

Because I didn’t actually go to the conference, this virtual trip report will mainly focus on the talks I went to, because that was basically the only part of the conference I experienced!

Online Conference Experience

Firstly, kudos to ACCU for hosting a remote conference in some form. It seems like a few conferences have stopped offering this post COVID. Whilst that is understandable, and it’s certainly way better to physically attend these things in my opinion, it’s nice to have the option to attend remotely. For certain people, it can fit in with their lifestyles (and often, importantly, budgets) better.

There was a virtual venue (Gather Town) available, with virtual poster showings at times. I didn’t make much use of this myself, although it seemed like there were a small handful of people in there at times.

The online conference portal was pretty easy to get around with the most pertinent information being easy to find. The talks were delivered via Zoom and there weren’t any technical issues at the talks I attended live. However, somewhat humourously, if the talk had any music playing in the room beforehand, it sounded like it was coming through an underwater speaker. I’m pretty sure I enjoyed a heavily filtered rendition of Smells Like Teen Spirit sang by GLaDOS before the opening keynote!

All-in-all, the online experience was pretty good, certainly no real complaints. Thanks a lot to ACCU for running an online version of the conference.

Day 1

The keynote for day 1 was Safety, Security, Safety(sic) and C/C++(sic), given by Herb Sutter. The talk was a pragmatic account of the ever-present topic of C++ safety and security. It was filled with statistics and references for recent security vulnerabilities and their relevance to C++. Especially notable were the funny, yet apt, analogies to the real world. Particularly notable, was the image of a heavily armoured knight sinking in a body of water. A great talk from Herb as usual!

Nina Ranns’ Embracing CTAD was a tour through class template argument deduction (CTAD) and associated language features. It was a perfect split between theory and practice, with great in-depth description of the languages features backed up code samples. I learned a lot from this, especially about writing my own deduction guides. It was also interesting to hear about partial CTAD proposals. I feel like that would be pretty useful for explicit type specification of std::array without having to maintain the length constant, for example.

For the afternoon, I elected to focus on talks relating to contracts.

John Lakos’ Narrow Contracts and noexcept are Inherently Incompatible was a demonstration and explanation of the Lakos Rule. The talk was self described as controversial and the speaker even invited heckling! Early on in the talk, there were some amusing exchanges with fellow speaker Kevlin Henney. It certainly gave me some extra considerations for using noexcept, especially for compatibility’s sake. I was slightly left wondering how this rule interacts with code that deliberately doesn’t throw exceptions, such as in functions that return std::optional or std::expected. Overall, I found the talk perspective-challenging and interesting.

Timur Doumler’s Contracts for C++ was an overview of the work-in-progress state of contracts: a mechanism for formally expressing the behaviour of a function. I found this talk to be an approachable introduction to the topic, pitched at the right technical level. I really like Timur as a conference speaker in general, and this talk was no exception. It covered the history of standardisation efforts for contracts, the functional considerations of the feature, and the current state of the contracts language feature proposal. With contracts being such a wide-reaching feature, this talk raised a lot of interesting technical considerations that I hadn’t even though of. In some ways, it would have made sense to have this talk before the previous one, as it would have been a more gentle introduction to the concept. It was great to get an in-depth talk of this upcoming feature that could have a big impact on correctness. Thanks to the contributors who have got this so close to standardisation for C++26!

I later caught up on The Kids Are Alright, which was a great talk concept where university students enrolled in a culture of software engineering module gave their presentations to the ACCU audience. Subject matter ranged from social and cultural issues (such as amplifying black voices in tech and right to repair) to technical topics (such as Margaret Hamilton’s work on Apollo 11 and 3D graphics). I can’t imagine the pressure of having to present to a conference audience as a student, so fair play to all who presented! The talks were eloquently delivered and I learned something new in each one. Kudos to the University of Portsmouth for this great initiative!

Day 2

The keynote for day 2 was Welcome to the meta::[[verse]]!, given by Inbal Levi. The talk gave a potted history of standardisation efforts for reflection and the current state of the proposal. I’m excited for the reflection proposal, because static reflection has always felt like a big omission in C++. The syntax for some of the features (such as splicers) seemed a little verbose, but C++ is already such an overloaded language that I’m not sure what could have been suggested instead. It’s also interesting that ^ was used for reflection ‘lift’ expressions, given that it is used for something resembling managed value categories in C++ CLR and Circle. There was some great audience discussion towards the end regarding how to deal with reflecting function parameter names.

Jonathan Müller’s An (In-)Complete Guide to C++ Object Lifetimes was an in-depth talk on object lifetimes. It covered standards clauses about object creation and destruction, the lifetime of temporaries, and STL supporting functions like std::launder and std::start_lifetime_as. As with Jonathan’s previous talks that I’ve seen, the level of technical detail was amazing and the wide array of examples really aided my understanding on a subject that can get very complex! This was definitely one to bookmark for when I have questions or doubts about lifetimes.

Fred Tingaud’s This Task Could Have Been a Script was a talk about automation. It was an accurate summary of the pros and cons of writing automations vs doing things manually. Deciding when to automate something is a common dilemma most of us face so it was interesting to hear Fred’s perspective on this. I especially liked the approach of low-stakes automation, where you give yourself enough time to attempt to automate a task (where the effort will be hard to quantify) such that you still have time to fall back on the manual approach.

My last scheduled talk of the day was Reducing Compilation Times Through Good Design by Andrew Pearcy. Compile times can be a big issue in C++, especially because some of the language’s unique selling points (such as template metaprogramming and constexpr semantics) can massively bloat compile times. A lot of the talk referred to classic header/source file projects and I am using modules in my personal projects now, but the refresher was useful nonetheless.

Day 3

The day 3 keynote was Coping with Other People’s Code by Laura Savino. I had seen this one on other conference schedules and hadn’t caught up on it yet so was glad to see it here. The talk started with a few anecdotes concerning worrying about the right thing: such as not chasing a plastic bag down the road if you are also carrying your baby. There was a lot of keen advice about how to deal with frustration from an emotional perspective. These were interspersed with practical real world situations which made it especially resonant. In fact at some moments, it was like my psyche was being directly called out! The efficacy section towards the end really tied everything together with practical advice. I felt like I really needed this talk because this an area I have typically really struggled with, so I was very grateful that Laura shared her advice with us. I regret having not caught up on it sooner, but channeling the advice from the talk, I’m going to try and not beat myself up too much about it…

Next up, was Think Parallel: Scans by Bryce Adelstein Lelbach. I really enjoyed Bryce’s A.I. Assisted Software Engineering talk at C++ on Sea 2023 so I was looking forward to this one. The talk gave an in-depth look at scan operations with decoupled look-back as an optimization. Then, implementations of std::ranges::copy_if and std::ranges::chunk_by with an without the optimization were given. Scans seem like a very powerful tool, and the speedups that were presented with decoupled look-back were impressive. I’ve yet to really sink my teeth into using parallel range algorithms, so it was pretty cool to see what’s possible.

For the afternoon of day 3, I chose from array of 20 minute talks available. Starting with Advanced Usage of the C++23 Stacktrace Library by James Pascoe. I’ve not used the stacktrace library much outside of exceptions (as was demonstrated at the end of Pete Muldoon’s Exceptionally Bad talk), so it was good to see some real world usage examples. The caution around signal handlers was a useful reminder. An audience member also pointed out P2490R3, a paper which is aiming to add std::stacktrace to exceptions by default.

Next was Lexy – A Parser DSL Library by Jonathan Müller, his second talk at the conference. I have a couple of ideas for language-based personal projects and so thought this talk might have some useful lessons! Lexy is syntactic sugar for a hand-written recursive descent parser and it seems to have some useful visualisation and debugging tools. The implementation details that show how the C++ type system is used to produce the rules was awesome! The library is available on GitHub, hopefully I’ll have time to check it out in future.

The third mini-talk was Introduction to Lock/Wait Free Algorithms by Jeffrey Mendelsohn. The talk covered the synchronisation primitives, definitions of lock/wait free, and approaches to these algorithms. It was pitched at quite a high level, but that was useful for me as a beginner in this area.

The last mini-talk was Demistifying the C++ committee by Nina Ranns. A lot of people have said that the committee process is a bit opaque and impenetrable, so I was looking forward to this talk. Overall, it was a nice refresher with some valuable insight into the internals of a committee meeting.

For my final scheduled talk of the day, I watched Integrating C++ Code Generation Into a Large CMake Build by CB Bailey. The talk documented some of Bloomberg’s learnings of, well, insert talk title here. It went deep into parts of CMake I haven’t used much before so there’s definitely a lot for me to learn here.

Day 4

The final day of the conference was a Saturday, which was a new one for me!

I started with How to Delete Code by Matthew Jones. The talk contained advice and war stories about deleting old code. It mostly contained high level advice and anecdotes, but that was probably for the best on a Saturday morning! Overall, it was thought-provoking and struck a chord with me. I feel like I’ll definitely be able to apply the advice given in the talk.

Next up was Writing a Base Level Library for Safety Critical Code by Anthony Williams. I have next to no experience with safety critical systems, so I was looking forward to learning something new. The talk covered different safety critical certification and the levels of criticality within each. It also described toolchain, testing concerns, error handling and their design implications. Overall, it was a nice introduction to the subject backed by some real world examples.

Florian Gilcher’s talk A Tour Through Ferrocene Development was one of my most anticipated talks of the conference. I have been doing a little more Rust than usual recently and the work that people are doing on Ferrocene to push for safety certified Rust is a really important pursuit in my opinion. The talk focussed on some high level concerns for dealing safety critical systems in Rust from the perspective of a tool vendor. I learned a fair bit about the ethos of safety critical customers from the speaker’s anecdotes. It was interesting to hear that they forward certain safety constraints (such as LLVM bugs, hardware specific bugs) to their users. The level of testing that is available for Rust tooling was incredible to see. The talk mentioned Crater, which runs build against nearly every crate on crates.io and curated Rust GitHub projects. Apparently, it runs for 3 days on a GCP instance! It was also cool to learn about bors-ng, a merge queue for GitHub PRs which is now officially supported by GitHub.

The final talk of the day was Learning Is Teaching Is Sharing by Björn Fahller. It drew some interesting comparisons between air force history and software development. There were philosophical lessons about sharing and blamelessness, highlighting how these virtues can improve things for everyone. It was an another great philosophical talk, of which this year’s ACCU has already had a few.

Conclusion

This was my first experience of ACCU, and I really enjoyed it. I felt like I had learned a lot, had my existing perception challenged, and got some fresh ideas for the future. This year, I felt a lot more interested in the non-technical talks than I had before. I felt like these sessions really struck a chord with me.

As with many conferences, the schedules were packed with interesting talks so I certainly have a lot to catch up on. At points, it was very difficult to choose one of four talks, which equals 4.5 hours of catchup per time slot in those cases.

Thanks to ACCU (as well as all of the speakers, volunteers, organizers, and sponsors) for putting on a thoroughly enjoyable and especially for continuing with a remote option for the the conference. Hopefully I will be able to attend in person next year!

This post is licensed under CC BY 4.0 by the author.