Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux. Platforms.
Project Principles:
✅ Fast compile times
✅ Bloat free
✅ Simple readable code
✅ Easy to integrate
⛔️ No C++ Standard Library / Exceptions / RTTI
⛔️ No third party dependencies (prefer OS API)
You can take a look at the introductory blog post if you like.
I've also started a Youtube Channel with some videos on the project.
Many libraries are in draft state, while others are slightly more usable.
Click on specific page each library to know about its status.
It is a deliberate decision to prototype single libraries and make them public Draft or MVP state.
This is done so that they can be matured in parallel with all other libraries and evolve their API more naturally.
This is the list of all libraries:
Library | Description |
---|---|
Algorithms | 🟥 Placeholder library templated where algorithms will be placed |
Async | 🟨 Async I/O (files, sockets, timers, processes, fs events, threads wake-up) |
Build | 🟨 Minimal build system where builds are described in C++ |
Containers | 🟨 Generic containers (SC::Vector, SC::SmallVector, SC::Array etc.) |
File | 🟩 Synchronous Disk File I/O |
File System | 🟩 File System operations { exists, copy, delete } for { files and directories } |
File System Iterator | 🟨 Enumerates files and directories inside a given path |
File System Watcher | 🟩 Notifications {add, remove, rename, modified} for files and directories |
Foundation | 🟩 Primitive types, asserts, limits, Function, Span, Result, Tagged Union |
Hashing | 🟩 Compute MD5 , SHA1 or SHA256 hashes for a stream of bytes |
Http | 🟥 HTTP parser, client and server |
Plugin | 🟨 Minimal dependency based plugin system with hot-reload |
Process | 🟩 Create child processes and chain them (also usable with Async library) |
Reflection | 🟩 Describe C++ types at compile time for serialization |
Serialization Binary | 🟨 Serialize to and from a binary format using Reflection |
Serialization Text | 🟨 Serialize to / from text formats (JSON) using Reflection |
Socket | 🟨 Synchronous socket networking and DNS lookup |
Strings | 🟩 String formatting / conversion / manipulation (ASCII / UTF8 / UTF16) |
Testing | 🟨 Simple testing framework used by all of the other libraries |
Threading | 🟥 Atomic, thread, thread pool, mutex, condition variable |
Time | 🟨 Time handling (relative, absolute, high resolution) |
Some libraries have C Bindings:
Library | Description |
---|---|
sc_hashing | C bindings for Hashing library. |