aboutsummaryrefslogtreecommitdiff
path: root/doc/Development/Hacking.asciidoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/Development/Hacking.asciidoc')
-rw-r--r--doc/Development/Hacking.asciidoc52
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.