diff options
Diffstat (limited to 'doc/Development/Hacking.asciidoc')
-rw-r--r-- | doc/Development/Hacking.asciidoc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/doc/Development/Hacking.asciidoc b/doc/Development/Hacking.asciidoc new file mode 100644 index 0000000..d0332e9 --- /dev/null +++ b/doc/Development/Hacking.asciidoc @@ -0,0 +1,52 @@ +== C++ Performance +(Adapted from CppCon2016 Practical Performance Practices) +https://florianjw.de/en/cpp_coding_standard.html + +- Prefer std::array, then std::vector +- Construct and initialize in one step +- Use const always when possible +- To enable const with complex initialization, use lambdas +- Don't recalculate values that only need to be calculated once +- Don't disable move operations - moving is more efficient than copying +- Avoid shared_ptr copies unless really needed +- Prefer returning unique_ptr from factories +- Use '\n' instead of std::endl +- Use lambdas - they have no overhead compared to direct functions +- final can help the compiler optimize virtual function calls +- Code branches are expensive + +=== Smaller code is faster code + +=== Do one thing and do it well +Simple code is easy to understand, easy to maintain, and as such lead to less bugs. + +=== Only use text formats +They can be edited both by humans and by programs. Use generic formats (ini, json, etc.) instead of custom ones. + +=== Document your changes +Don't do this just for others, do it for your future self. + +== Useful compiler options +- -fuse-ld=gold +- -Wold-style-cast + +=== Setting in meson +Compiler arguments are free-form comma-separated list. +meson configure -Dcpp_args="-Wold-style-cast" +meson configure -Dcpp_link_args="-fuse-ld=gold" + +== C++ Coding Standard + +=== Naming Conventions +- Naming uses camelCase +- Private attributes are prefixed with 'm_'. +- Include guards should be named SMOLBOTE_<class name in caps>_H + +=== Compiler +- Use the highest sane warning level. + +=== Resource management +- Manage your resources with RAII (Resource Acquisition Is Initialization). + +=== Functions +- Try to keep the complexity low and the body short. |