September 2022 Conferences Trip Report: NDC TechTown, CoreC++, CppCon

From August 31 to September 16, 2022, I attended three conferences in a row: NDC TechTown in Kongsberg, Norway; CoreC++ in Tel Aviv, Israel; and finally, CppCon in Aurora, Colorado, USA. NDC TechTown and CoreC++ are both in-person conferences, while CppCon is a hybrid event: you can attend either in person or online. I chose to attend all three conferences in person.

NDC TechTown (August 31 – September 1, 2022)

The first stop of my conference marathon was NDC TechTown, an event I had never attended before but heard many good things about from colleagues and friends. This year’s edition had about 300 attendees on site. I really enjoyed the conference venue as well as the location.
NDC TechTown location

Kongsberg is a relatively small town about 1.5 hours by train from the capital Oslo, situated by a river at the entrance to a picturesque green valley, featuring several waterfalls in the city center and great opportunities for hiking, biking, and watersports. The venue was large enough to accommodate the four tracks of content without feeling cramped, and at the same time small enough that it felt cozy and accessible. Everything was organized really well, all the organizers I spoke to were extremely friendly and helpful, and the catering was fantastic, too.

The main conference took place over two days. Kjersti Sandberg kicked off the conference, followed by an opening keynote by Kate Gregory. I am impressed with Kate: every time I see her giving a keynote, she has a brand new talk up her sleeve! For NDC TechTown, she gave a talk about Abstraction Patterns, which I believe will be very useful for many developers.

There were many other interesting talks on Day 1, and with four tracks you always know you will miss most of them. I decided to go to Nico Josuttis’ “C++20 – My Favourite Code Examples” and Vitaly Fanaskov’s “Error Handling in C++”, both of which I very much enjoyed. There were also several interesting exhibitor booths and of course many friends from the C++ community to catch up with. My colleague Anastasia Kazakova was also there – so, even though JetBrains didn’t have a booth this time, at least the CLion team was represented by more than one person!
Timur and Anastasia

In the evening, there was the fantastic NDC party. Kyle Kotowick gave a great talk about the Boeing 737 MAX disaster from an engineering perspective, both entertainment and a cautionary tale. Anders Schau Knatten organized an unforgettable C++ Quiz, which my team somehow managed to win, and I learned about some horrifying things about overload resolution in C++ in the process. Overall, it was an amazing evening!

On Day 2, I went to Hana Dusíková’s talk, “Lightning Updates”, which I liked a lot. She showed how to make many different features and vocabulary types of C++20 work together to solve a real-world problem. I was especially happy that I got to see this talk here because I had missed it at CppOnSea earlier this year, which I didn’t attend.

The rest of the day, I was busy with my own talks. I was originally scheduled to give two talks at NDC TechTown, but eventually ended up giving three talks in a row, because some of the other speakers canceled at the last minute, the organizers were looking for speakers on site to fill in the gaps in the program, and I had some material ready to go.

The talks ended at 4:00 pm, so I had the rest of the afternoon/evening to explore the town and go for a run along the shores of the Numedalslågen river. And that was it!

Overall, I really loved NDC TechTown. It’s a conference with a unique twist: there is a focus on C and C++, as well as a (somewhat less pronounced) focus on embedded systems, automotive, aerospace, and similar applications, but other programming languages and other applications are represented, too, so the program and the attendees end up being a really interesting mix. The recordings will be available here.

Core C++ (September 6–7, 2022)

The next stop on my journey took me to Israel, where I was due to speak at the CoreC++ conference, hosted at the Academic College of Tel Aviv-Yaffo, in central Jaffa, an ancient and beautiful port city.
CoreC++ venue
I had been there once before, in 2019, but the conference has grown substantially since then! This year, according to Adi Shavit (one of the organizers), there were 450 attendees on site, which makes CoreC++ the third-largest C++ conference in the world after MeetingC++ and CppCon. Quite remarkable!

The main conference consisted of two days, with three tracks of high-quality content. The opening keynote was delivered by Walter E. Brown. This was a great talk, which ended in a very emotional moment and standing ovations: Walter announced his retirement from speaking at conferences. This was his last conference talk “at least for a while”. Thank you so much, Walter, for everything you have done for C++!

On the first day, after Walter’s keynote, I went to Inbal Levi’s talk “Customization Methods”, which I liked a lot. Inbal gave a great overview of different methods for connecting generic library code with user code, such as ADL, Concepts, CTOs, and tag_invoke. This was followed by an equally interesting talk by Amir Kirsh and Tomer Vromen about the [[likely]] and [[unlikely]] attributes. I learned a lot of surprising facts about them. For example, did you know that they don’t affect branch prediction at all, because modern CPU architectures simply do not have instructions to give hints to the branch predictor? The only thing that these attributes can influence is code layout – but often, that is not going to have the effect that you think it does, and sometimes it will even do the opposite of what you’d expect!

There was also a talk on the new Carbon language by Jon Ross-Perkins, one of the developers of Carbon at Google, followed by many discussions in the “hallway track” about the possible future of this new experimental language. The first day concluded with socializing and lightning talks, which were great as always.

On Day 2, I enjoyed a great talk by Daisy Hollman, a new entry in her “What You Can Learn From Being Too Cute” series. This was the third talk in the series I have seen, and it was my favorite one so far! This one was dedicated to concepts, and all kinds of fascinating, surprising, and terrifying things you can do with them. For example, have you ever thought about what happens if you define the following concept:

template <typename T>
concept True = true;

On the one hand, any type will satisfy the concept; on the other hand, using this on a template is still a constraint, which means it will be considered a closer match than an unconstrained template. This has many surprising consequences. If you want to know more, watch the recording of Daisy’s talk (which will hopefully be released soon)!

Following Daisy’s talk, there were several sessions on coroutines (my favorite was Roi Barkan’s “Coroutine Intuition”, a great, fast-paced overview of the whole topic), my own talk about C++23, and finally David Sankel’s closing keynote, “Rust Features that I Want in C++”. I had already seen this talk at C++Now, it was my favorite talk of the whole conference back there, and I still think it’s a great talk that everyone should watch.

Overall, I really enjoyed this conference. The organizers were great, the attendees were great, the atmosphere was very friendly, there were many great talks, many interesting exhibitor booths, and fantastic catering (a free, delicious buffet lunch every day!). My only gripe is that many talks started 10–20 minutes late, overran, and ended late as a result, so it was very difficult to figure out when to be where. The breaks felt quite short as well: during the afternoon attendees had only 10 minutes to grab a quick coffee and get from one building to the other. I hope the organizers will sort out the schedule for next year, though I’m certainly coming back either way! The recordings will be available here.

After the event was over, there was again some time to decompress. The great thing about Tel Aviv is that the weather is still really hot in September, and the beach is nearby, so I went there with some other attendees for an unforgettable evening of swimming and playing beach volleyball. I really enjoyed the opportunity to spend some time outdoors before traveling to the final stop of my 2022 conference marathon – CppCon, the biggest conference in the C++ calendar.

CppCon (September 12–16 2022)

I was really curious what this year’s CppCon would be like. Before the COVID-19 pandemic, it was a huge event, with about 1,600 attendees in 2019. Then, in 2020, the conference went fully online, and in 2021 it settled on a hybrid format where people could attend both on-site and online, with on-site and online talks and an elaborate online socializing platform. However, in 2021, travel was still highly restricted because of COVID, and so only about 260 people attended in person (I was one of them – here is my trip report).

I was happy to find out that CppCon has recovered significantly compared to last year, winning back its place as the world’s largest international C++ conference: this year, there were about 600 attendees on site, plus about 900 online! This is nowhere near enough to fill the Gaylord Rockies Resort, which is a gigantic venue, but definitely more than enough for a busy and rewarding conference experience.
CppCon location view

This year was remarkable for me personally because I had the honor to be invited to give a keynote. CppCon has a very special place in my heart because it is the conference where my career as a conference speaker started (I gave my first ever conference talk here, back in 2015). So delivering a 90-minute plenary session here on the big stage was definitely a very special experience. I gave a talk about how C++23 changes the way we write code, focusing on the four C++23 features I believe are going to be most relevant and impactful for the average C++ developer (deducing this, std::expected, std::mdspan, and std::print). I am happy with how the talk turned out and I believe it was well-received.

CppCon is a full week of content, with many parallel tracks (this year, there were five). So I could not possibly cover everything else I have seen and heard this year in this report, and will instead just list some of the things that seemed most interesting and relevant.

First of all, the big theme of this year’s C++ conference circuit is experimental successor languages to C++. It seems that a lot of people are interested in better syntax, more safety, simplicity, regularity, and reasonable defaults, but do not want to give up interoperability with C++ and jump to Rust, for example. So more and more experimental projects are popping up, aiming to satisfy this need. Earlier this year, Chandler Carruth revealed the Carbon Language project in his keynote at C++North. Now, at CppCon, we learned about two more such projects.

The first is Val, a language being developed by Dave Abrahams (who now works at Adobe) and Dimitri Racordon. Val is remarkable for eschewing reference semantics entirely (a major source of unsafe code in C++) and focusing instead on mutable value semantics. Both Dave and Dimitri gave talks at this year’s CppCon, and Dimitri’s talk actually focused on details about the language itself. While the talk might not be on YouTube yet, here’s the official website of Val with more info and links.

The second is Cpp2, revealed by Herb Sutter in his closing keynote (which is already available online). Herb takes a different approach: his new language is translated by a transpiler, adroitly called CppFront, to C++ code (which he calls Cpp1). This can in turn be consumed by any standard-conforming C++ compiler. During his keynote, Herb did an impressive live demo of how it all works. I published a Twitter thread here summarizing the most important takeaways. And here is the GitHub repo with more info.

There were other fantastic talks this week. Here are a few that I attended and found to be particularly memorable:

  • Daniela Engert’s keynote, “Contemporary C++ in Action”, which took us on a journey of building a real-world application combining many different C++20 features and even some C++23 features (such as import std;).
  • Erik Rainey’s keynote, “Using C++14 in an Embedded SuperLoop Firmware”, which showed how to use modern C++ in an industry-strength embedded application, in this case the firmware for Amazon’s flying “Prime Air drones”.
  • Andreas Weis’ “Deciphering Coroutines – A Visual Approach”, a unique and approachable take on how to teach coroutines, including a brilliant visual cheat sheet.
  • And finally, a whole series of three “Back To Basics” talks by Klaus Iglberger, one about value semantics, one about type erasure, and one about the visitor pattern – brilliantly presented educational material useful for beginners and experts alike.

In fact, apart from the popular “Back to Basics” track, there were three more dedicated tracks this year: “Software Design”, “Tooling”, and “Embedded”. And I really like this way of organizing the conference schedule. Kudos to the new program chair Daisy Hollman and the track chairs for putting together such a brilliant program! The recordings are starting to appear here.

I ended up being quite busy all week. Apart from my keynote, I had two other talks to give. I was also invited to sit on the yearly Committee Fireside Chat as well as a panel discussion about concurrency, which were both very rewarding experiences. There were also plenty of other activities, such as the Meet the Presenters Banquet, the Diversity Dinner, two highly entertaining lightning talk sessions moderated by Marshall Clow, and of course endless hallway discussions and after-hours conversations at the bar about C++, the Universe, and everything, catching up with old friends and making new ones. At the end of it all, I was very happy but utterly exhausted and more than ready to go home again.

Overall, I had a really great time at all three conferences. Each one was a great experience in its own unique way. I do have to admit that it was a bit too much non-stop traveling even for my taste. So, even if it means I will miss some great events, I don’t think I will ever do three conferences in a row again!

Discover more