Skip to content

design philosophy

Igor Zarzycki edited this page Aug 24, 2019 · 1 revision

Design philosophy

Like every library crap is supposed to solve few particular probemls. It is design to fulfill several gols. Therefore it is designed according to several rules.

Flexibility and easiness of usage

Crap is supposed to simplify template meta programming. As no library is absolutely universal crap is trying to be as generic as possible.

STL inspiration

Crap is heavily inspired by C++ STL library. Mainly by STL algorithms but not only. Since most of C++ language users also make use of STL in their daily programming such approach shoulg give intuitive API.

Multile language versions supported

It is designed to cooperate with C++11 language version or higher (sorry, C++03 and C++98 are not being supported). If higher versions of language are in usage some elements (like fold expressions from C++17) are being utilised.

No macro polution

Although crap is using preprocesor (for instance to recognise language version as described above), there are no strange macros.

Hyrum's low

With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody.

There are no secret elements. No "detail", "implementation", etc. namespaces. Unless no strange operations are being used like: #define private public all accessible elements are supposed and ment to be used.

Clone this wiki locally