IT Hare on Soft.ware

Disclosure: On this site you won’t find specific advice on “how to call function xyz()”. Interpreting C++ ARM and #pragma dwim is also out of scope.

We’re treating our readers as intelligent beings who can use Google and/or StackOverflow, where all such specific questions were answered more than once.

What you will find is opinions on all the aspects of software development (from UI to scalability, reliability and security) for all kinds of systems (from large-scale systems to embedded ones), the reasoning behind those opinions, and tons of practical observations, which may help you to choose what you really need for your specific task.

Your mileage may vary. Batteries not included.

 

Random Number Generation

BB_part098_BookChapter015_v1
Quote: “even if your RNG is statistically perfect, people will still complain :-(
Another Quote: “On modern x86 CPUs, single core can generate 150M+ random bytes/second this way (and this is a Damn Lot).”
[]

Implementing Queues for Event-Driven Programs

BB_part097_BookChapter013d_v1
Quote: “full queues SHOULD NOT happen during normal operation”
Another Quote: “With queues-implemented-over-mutexes like the ones we’ve written above, the most annoying thing performance-wise is that there is a chance that the OS’s scheduler can force the preemptive context switch right when the thread-being-preempted-is-owning-our-mutex.”
[]

C++ Guidelines – Made-to-Measure vs One-Size-Fits-All

BB_part096_BookChapter013d_v1
Abstract: “After bashing all those Big Name guys for making those over-arching sets of guidelines, it is perfectly logical for me myself to do the same 😉”
Quote: “DON’T use C-style cast, EVER. If you DO need a cast – DO spend time on figuring out which of C++ *_cast<>s you really mean (and maybe, you’ll find a way to avoid that cast at all)”
[]

C++ Performance: Common Wisdoms and Common “Wisdoms”

BB_part095_BookChapter013b_v1
Quote: “over(ab)using C++ features is a different story, we’ll discuss these features below on case-by-case basis”
Another Quote: “Compiler will use all its Next-to-Divine Wisdom to show you that it is smarter than you are, and to ignore most of those inline specifications you carefully wrote.”
[]

C++ for Games: Performance. Allocations and Data Locality

BB_part094_BookChapter013a_v1
Abstract: “Allocations and related lack of spatial locality can be DAMN EXPENSIVE”
Quote: “During the times of Ancient Gamers (also known as times of Atari, ZX Spectrum, and Commodore64), CPUs were running at clock speed of a single-MHz (and one operation usually took several clocks). At the same time, memory run at about the speed comparable to that of CPUs.”
[]

Marshalling and Encodings

BB_part093_BookChapter012a_v1-2
Quote: “Encoded data size is especially important for Client-Server communications, and less important (within reason) for Server-to-Server ones and for locally-stored format.”
Another Quote: “On the other hand, due to being optimized for CPU operation, Flatbuffers are NOT optimized space-wise; even compared to not-so-optimal-space-wise Google Protocol Buffers, Flatbuffers can lose additional 1.5x in size”
[]

Network Programming: Socket Peculiarities, Threads, and Testing

BB_part091_BookChapter011e_v1
Quote: “I am not saying that this architecture is the only viable one, but it does work for TCP for sure (and performs reasonably well too)”
Another Quote: “The whole task of optimizing performance beyond, say, 20-50K packets/second per box tends to be Quite Elaborated, and involves quite a few things which are platform- and hardware-dependent.”
[]