Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
I will hate you

Dear C++ library writer,

  1. If your library forces me to use new all over, I will hate you.

  2. If your library has types with bogus values, I will hate you.

  3. If the documentation for your library gets the terminology of its own domain wrong, I will hate you.

  4. If I say "My God, it's full of stars!" when I see the function signatures in your library, I will hate you.

  5. If your library uses #define instead of const or inline, I will hate you.

  6. If your library has a base class of everything, I will hate you.

  7. If your library has singletons, I will hate you.

  8. If you think you can use a tool to automatically translate a library from Java, I will hate you.

  9. If the classes in your library have such clear responsibilities that you call them "managers", I will hate you.

  10. If your library does not play nice with the standard library, I will hate you.

  11. If functions in your library return error codes instead of throwing exceptions, I will hate you.

  12. If your library has public members that are designed to be used only from internal code, I will hate you.

  13. If your library makes use of the global namespace, I will hate you.

  14. If your library has types traits that don't play nice with SFINAE, I will hate you.

Copy link

coding-bunny commented Oct 10, 2014

yay for promoting std::unique_ptr and std::shared_ptr!

Copy link

NikolaiAlexanderHimlan commented Oct 10, 2014

There are 3 items on your list I am confused by and would like to understand better. First, why are #defines bad? Second, why are "managers" bad? Third, what do you mean by base class of everything?

Copy link

olafurw commented Oct 10, 2014

12 should be higher on the list.

Copy link

rmaicle commented Oct 10, 2014

Don't show him any C++ library in development or he will hate you :)

Copy link

superfunc commented Oct 10, 2014

@Blastinburn const is typesafe and obeys scope.

Copy link

luxe commented Oct 11, 2014

If you don't provide common use case examples

Copy link

cgikoray commented Oct 11, 2014

Not everybody library has the benefit of using exceptions, especially performance critical code. Blanket statement such as that are usually not well-received.

Copy link

Florianjw commented Oct 11, 2014

Performance is not an argument against exceptions, since they are faster then error-codes when not thrown (which should be almost all of the time); real-time behavior is. So: If the library is for controlling a plane or space-ship, yes, exceptions should be avoided.

Often when exceptions aren't used however, the reasons are clearly not as good. GUI-libraries for example should really use exceptions for their errors.

Copy link

kybernetyk commented Oct 11, 2014

If functions in your library return error codes instead of throwing exceptions, I will hate you.

If your library throws I won't use it.

Copy link

miguelibero commented Oct 13, 2014

the problem with managers is that they tend to not follow the S in SOLID

Copy link

SeAlgoAsoma commented Oct 15, 2016

I don't even know what this is about, I'm just here because I hate markdown.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment