Good Stuff
Resources I like for C++, systems programming, and low-latency stuff.
Libraries
General Purpose
- Abseil - Google’s C++ library. Abseil Tips are worth reading.
- Folly - Facebook’s C++ library.
- Boost - Many standard library features came from here.
Concurrency & Lock-Free
- moodycamel::ConcurrentQueue - MPMC lock-free queue.
- moodycamel::ReaderWriterQueue - SPSC lock-free queue.
- Erik Rigtorp’s SPSCQueue - SPSC queue.
- Erik Rigtorp’s MPMCQueue - MPMC bounded queue.
- Folly ProducerConsumerQueue - Facebook’s SPSC queue.
Benchmarking & Profiling
- Google Benchmark - Microbenchmarking.
- Google Test - Testing framework.
- Tracy Profiler - Frame profiler.
- perf - Linux profiling. Brendan Gregg’s guide.
Serialization
- FlatBuffers - Zero-copy serialization.
- Cap’n Proto - Similar to FlatBuffers.
- Protocol Buffers - Widely used, has parsing overhead.
Tools
- Compiler Explorer (Godbolt) - See assembly output.
- Quick C++ Benchmark - Online benchmarking.
- C++ Insights - See template instantiation, implicit conversions.
- clang-format - Code formatting.
- clang-tidy - Static analysis.
- AddressSanitizer - Memory error detector.
- Valgrind - Memory debugging.
- GDB - Debugger.
- GEF - Enhanced GDB.
References
Blogs & Authors
- Agner Fog - x86 optimization manuals, instruction tables.
- Daniel Lemire - Performance, SIMD, parsing. Created simdjson.
- Erik Rigtorp - Stuff about Low-latency C++, he is very well known in trading community and he works at citsec.
- Fedor Pikus - CppCon talks on performance.
- Timur Doumler - Audio, low-latency.
- Jason Turner - C++ Weekly on YouTube.
- Herb Sutter - A very authoritative figure in C++ community, ISO C++ President.
- Scott Meyers - Effective C++ series author.
- Arthur O’Dwyer - STL internals, libc++ contributor.
Books & Papers
C++ Foundations
- Effective C++ - Scott Meyers
- More Effective C++ - Scott Meyers
- Effective Modern C++ - Scott Meyers
- C++ Templates: The Complete Guide - David Vandevoorde, Nicolai Josuttis, Douglas Gregor
- Programming: Principles and Practice Using C++ - Bjarne Stroustrup
- Hands-On Design Patterns with C++ - Fedor Pikus
- C++ Memory Management - Patrice Roy
Low-Latency & Concurrency
- The Art of Writing Efficient Programs - Fedor Pikus
- C++ High Performance - Bjorn Andrist, Viktor Sehr
- C++ Concurrency in Action - Anthony Williams
- The Art of Multiprocessor Programming - Maurice Herlihy, Nir Shavit
- Is Parallel Programming Hard, And, If So, What Can You Do About It? - Paul McKenney
Systems
- Computer Systems: A Programmer’s Perspective - Randal Bryant, David O’Hallaron
- Computer Architecture: A Quantitative Approach - John Hennessy, David Patterson
- Engineering a Compiler - Keith Cooper, Linda Torczon
Operating Systems
- Operating Systems: Three Easy Pieces - Remzi Arpaci-Dusseau, Andrea Arpaci-Dusseau (free)
- xv6: A Simple, Unix-like Teaching Operating System - Russ Cox, Frans Kaashoek, Robert Morris
Networking
- TCP/IP Illustrated - W. Richard Stevens
- Computer Networking: A Top-Down Approach - James Kurose, Keith Ross
- Beej’s Guide to Network Programming (free)
Papers
- What Every Programmer Should Know About Memory - Ulrich Drepper
Talks
- CppCon
- C++Now
- Trading at light speed - David Gross
- When a Microsecond Is an Eternity - Carl Cook