SaneCppLibraries
SaneCppLibraries copied to clipboard
Sane C++ Libraries
Sane C++ Libraries
Sane C++ Libraries is a set of C++ platform abstraction libraries for macOS, Windows and Linux.
✅ Fast compile times
✅ Bloat free
✅ Simple readable code
✅ Easy to integrate
⛔️ No C++ Standard Library / Exceptions / RTTI
⛔️ No third party dependencies (prefer OS API)
Visit the documentation website for more information.
Libraries
Library | Description |
---|---|
Algorithms | 🟥 Placeholder library templated 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 |
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) |
Each library is color-coded to signal its status:
- 🟥 Draft (incomplete, work in progress, proof of concept, works on basic case)
- 🟨 MVP (minimum set of features have been implemented)
- 🟩 Usable (a reasonable set of features has been implemented to make library useful)
- 🟦 Complete (all planned features have been implemented)
C Bindings
Some Libraries have C bindings
Binding | Description |
---|---|
sc_hashing | Bindings for the Hashing Library |
Building
Libraries can be used as is, adding a single file to your project and without needing any build system.
See Building (user) to just use the library
Shortly:
- Add Bindings/cpp/SC.cpp to your build system of choice
- Define
SC_COMPILER_ENABLE_STD_CPP=1
if you plan to use the Standard C++ library - Include any public header (
Libraries/[Library]/*.h
)
macOS
- Link
CoreFoundation.framework
- Link
CoreServices.framework
Linux
- Link
libdl
(-ldl
) - Link
libpthread
(-lpthread
)
Windows
- Nothing else to link (in addition to default libs)
Examples
Check the Examples page.
https://github.com/Pagghiu/SaneCppLibraries/assets/5406873/946684f2-b0c5-436b-b472-c34f07021d03
Tests
Tests are built with the self-hosted SC::Build project generator, describing the builds in C++.
Check Building (contributor) to run the tests.
Getting in touch
-
Sane Coding Discord
-
Twitter
@pagghiu_
-
Mastodon
@pagghiu
- Github Discussion
Alternatively I am also reading the following discords too:
-
Italian C++ Discord (
@Pagghiu
from any appropriate channel or just a DM, english and italian are both fine) -
Handmade Network discord (
@Pagghiu
from any appropriate channel or just a DM)
Videos
Blog posts:
- May 2024 Update
- April 2024 Update
- March 2024 Update
- February 2024 Update
- January 2024 Update
- Public Release blog post
On the Youtube Channel you can find some videos showing some bits of the development process:
- Creating a Makefile
- Add Makefile backend to SC::Build
- Start Linux Porting
- Build Everything on Linux
- Posix fork
- SC::Async Linux epoll 1/2
- SC::Async Linux epoll 2/2
- SC::FileSystemWatcher Linux inotify implementation
- A Tour of SC::Async
- Linux Async I/O using io_uring (1 of 2)
- Linux Async I/O using io_uring (2 of 2)
- Simple ThreadPool
- Async file read and writes using Thread Pool
- Implement SC::AsyncLoopWork
- BREAK SC::Async IO Event Loop
- Pause Immediate Mode UI - Save CPU Time
Contributing
Please take some time to read the Principles and Coding Style.
After that you can read the CONTRIBUTING.md guide.
License
Sane C++ Libraries are licensed under the MIT License, see LICENSE.txt for more information.