upvote
So there are few distinctive patterns I observed in that project. Please note that many of those patterns are considered anti-patterns by many people, so I don't necessarily suggest to use them.

1. Use pointers and do not include header file for class, if you need pointer to that class. I think that's a pretty established pattern in C++. So if you want to declare pointer to a class in your header, you just write `class SomeClass;` instead of `#include "SomeClass.hpp"`.

2. Do not use STL or IOstreams. That project used only libc and POSIX API. I know that author really hated STL and considered it a huge mistake to be included to the standard language.

3. Avoid generic templates unless absolutely necessary. Templates force you to write your code in header file, so it'll be parsed multiple times for every include, compiled to multiple copies, etc. And even when you use templates, try to split the class to generic and non-generic part, so some code could be moved from header to source. Generally prefer run-time polymorphism to generic compile-time polymorphism.

reply
Why use C++ at that point? Also, pre declaring classes instead of including the corresponding headers has quite a few drawbacks.
reply
References, for one. Also there’s a huge difference between “avoid templates unless necessary” and “don’t use templates”.
reply
RAII? shared pointers?
reply
Templates as one single feature can be hugely variable. Its effect on compilation time can be unmeasurable. Or you can easily write a few dozen lines that will take hours to compile.
reply
There is an experimental Cranelift backend[0] for rustc to improve compilation performance in debug builds.

https://github.com/rust-lang/rustc_codegen_cranelift

reply