Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running list of more terms/concepts we could document in glossary #36

Open
springmeyer opened this issue Sep 14, 2017 · 5 comments
Open
Labels

Comments

@springmeyer
Copy link
Contributor

The glossary is developing quickly into a pretty solid resource for the key terms you'll encounter and need to know while learning C++ at Mapbox. Or when starting to teach colleagues about how we write, deploy, and approach C++ at Mapbox.

While the glossary says explicitly that It is not intended to be a complete reference on language or syntax terms, there is much more we can do. This is a ticket to brainstorm additional concepts, terms, and keywords that are potential things to cover in the glossary and related docs.

Most of these terms don't need to be defined in the glossary, rather it would be sufficient to simply list them and links to external resources (particularly style guides we support). The overall goal is 1) note they are important to understand for C++ development a mapbox (by their presence), and 2) provide a great resource to learn more about them. We can add extra definitions where our opinions matter.

(Will be editing this in place as I collect ideas)

Key learning concepts

  • the idea of a main function in an executable
  • how to pass arguments to a C++ program and parse them - refs Add recommendations for option parsing #35
  • const
  • const char* vs std::string and how they relate
  • pointers vs references
  • dereferencing pointers
  • taking the address of a variable
  • header guards vs #pragma once
  • learning the cpp preprocessor
  • what are templates and when to use them
  • global variables, why not to use them, when they are appropriate
  • when to use static_cast, reinterpret_cast, and const_cast. Why to use them rather than c style cases
  • how enumerations work enum in C++11. Using casts to change between them and integer types
  • the max size of numeric types. using <limits> from the stdlib to know these sizes dynamically
  • integer overflow. When it is undefined behavior, when it is defined. How to control it/prevent it. How it differs for signed types and unsigned types
  • compiler warnings. how to avoid them, fix them, appropriately suppress them. Why, when starting projects, it makes sense to use -Werror and very aggressive warnings, even -Weverything
  • how to use c++ exceptions: why to always make custom exceptions subclass std::exception. How to catch all types by catching std::exception. Why to catch exceptions by const&.
  • when to avoid throwing exceptions due to performance concerns (e.g. in tight loops)
  • what is garbage collection
  • What is reference counting
  • Why, when, and how to use std::unique_ptr vs std::shared_ptr
  • zero copy
  • Big takeaways of C++11 vs C++14 vs c++17
  • move semantics / universal references
  • considerations on when to use std::vector vs std::map vs std::list
  • binary size, why it matters, how you can learn about it (https://github.com/google/bloaty)
  • What is the _GLIBCXX_USE_CXX11_ABI flag on linux and why does it matter?

Advanced performance concepts

@springmeyer
Copy link
Contributor Author

Terms I collected during recent presentations by @artemp and @joto that deserve glossary entries:

  • scalar types
  • msb: most significant bit
  • pipelining on CPU
  • varint: variable length encoded integer
  • byte aligned
  • memory alignment
  • non-intrusive
  • free function - C++ language term for function not in class method
  • designing in layers (aka layered design): reducing complexity at every level but not hiding it from access

/cc @mapbox/core-tech

@springmeyer
Copy link
Contributor Author

pipelining on CPU

Noticed a definition + context here on why it is important at http://nullprogram.com/blog/2017/10/06/

@mapsam
Copy link
Contributor

mapsam commented Oct 11, 2017

RAII

Came up today working on vtquery w/ @springmeyer

@springmeyer
Copy link
Contributor Author

Mitigation

Methods to make code safer and less exploitable - refs http://www.informit.com/articles/article.aspx?p=2036582&seqNum=4

@GretaCB
Copy link
Contributor

GretaCB commented Oct 19, 2017

internal vs external iterator

Jochen mentioned this in the vtzero tutorial. I didnt know what it meant and found this great resource

what are templates and when to use them

@springmeyer totally. I ran into this in Jochen's vtzero tutorials with his example of the print_visitor struct, and @karenzshea ran me through what this is doing and the concept of "Template Specialization".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants