Filed Under: Programming
Warning: C++ enthusiasts ahead. Obviously.
Jason Turner (the guy behind ChaiScript, C++ Weekly, and one half of CppCast) produced two interesting talks this year. The first is Practical Performance Practices, which is full of good advice for navigating the labyrinth of gotchas that is modern C++, where there are at least 5 ways to do every little thing, and 3 of them are okay, and 4 of them are bad. The second talk is Rich Code for Tiny Computers: A Simple Commodore 64 Game in C++17, in which he shows off some pretty neat stuff.
Here is Herb Sutter talking about dynamic memory management in a talk entitled Leak-Freedom in C++… By Default, going into examples of when and where to use the standard library’s smart pointers. He actually brings up a multithreading-ready version of the
shared_ptr-based resource bank class I showed off in a recent post.
Want fast C++? Know your hardware! is about, well, knowing your hardware. This is one of those annoying harsh realities. You want to not have to think about the metal. The whole point of high-level programming languages like C++ is to get away from worrying about the hardware. Worrying about the hardware is the hardware developer’s job, right? Well, no. At least until languages catch up with the fact that the performance bottleneck in computing is no longer CPU speed but memory speed1, data-oriented code is going to be the way forward for high-performance applications2.
I enjoyed this talk on “Colonies, performance and why you should care”. Basically, a ‘colony’ is a container written for fast insertion, erasure and iteration; the kind of thing you want to put your GameObjects in. This is one of the many nice things coming out of SG14, the ISO-C++ study group focusing on low-latency, real-time applications like games.
That’s all I have time for, but I recommend having a browse around the selection of videos. There are significantly more than there were for Steam Dev Days, and some of them are very focused, so there was no way I could have watched and judged them all. Hopefully the ones I’ve linked here are a good starting point for your own meandering through the archives.
If you know of any languages or features of any language which abstractify data-oriented programming practices, please tell me about them. ↩
Fun fact: Data on CDs/DVDs for games which use streaming for most or all of their assets (so basically any seamless open-world game since GTA 3) have optimized data layouts on disk, with data commonly accessed at around the same time placed physically near each other to minimize the amount of movement needed to move from one asset to the next. ↩