Caution
This is a very young, and very experimental, don't rely on it for anything of importance or that's critical in nature.
Abyss is C++ standard library targeting embedded bare-metal applications. As such, it is not fully standards compliant due to missing a large chunk of runtime functionality. However, much effort has been made to try to make it as complete as possible.
There are also some non-standards compliant enhancements, such as making things [[nodiscard]]
where they really should be, but were not done so by the standard.
Warning
There is currently little to no documentation for Abyss, that will change soon once implementation is further along.
Not everything in the C++ standard library can be done without some runtime or ABI support, due to this Abyss is segmented into the fully standalone/freestanding environment and then has several levels of feature flags depending on what is needed. They are as follows:
runtime_components
- Only the most basic runtime stubs and implementation.threading_support
- Thread stubs and support.rtti_support
- Run-Time Type Identification supportexception_support
- Support for exceptionsvirtual_support
- Support for virtual classes /dynamic_cast
etc
When enabled, these will build static libraries for the target platform that contain the runtime components requested, however, due to not being able to implement closer to the metal features for unknown platforms, there will be a collection of needed stubs to be implemented in the freestanding environment to satisfy them.
Caution
The abyss ABI, while mostly compliant with the Itanium C++ ABI we do not guarantee ABI stability to the extent of
libstdc++ or libc++ would
Nor are we ABI compatible with said C++ libraries, therefore intermixing code linked with
libstdc++
, libc++
, or other versions of Abyss is highly advised against.
Important
Due to the nature of the library, there is only a single version of the C++ standard that has been targeted, that being C++20, however some portions of C++23 have been backported where possible, as such a compiler with core language support for at lest C++20 is required.
Compiler | G++ | Clang++ | ||||
---|---|---|---|---|---|---|
Version | 12 | 13 | 14 | 16 | 17 | 18 |
Supported | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
Abyss is still a very young library, so not much is implemented yet, and everything might not be.
Concepts Library | Dynamic Memory | Localization Library | ||||||
concepts |
🛠️ | memory |
🛠️ | clocale |
🛠️ | |||
Coroutine Library | memory_resource |
🛠️ | codecvt |
🛠️ | ||||
coroutine |
🛠️ | new |
🛠️ | locale |
🛠️ | |||
Utility Library | scoped_allocator |
🛠️ | I/O Library | |||||
any |
🛠️ | Numeric | cstdio |
🛠️ | ||||
bitset |
🛠️ | cfloat |
✅ | fstream |
🛠️ | |||
chrono |
🛠️ | cinttypes |
🛠️ | iomanip |
🛠️ | |||
compare |
🛠️ | climits |
✅ | ios |
🛠️ | |||
csetjump |
❌ | cstdint |
✅ | iosfwd |
🛠️ | |||
csignal |
❌ | limits |
✅ | iostream |
🛠️ | |||
cstdarg |
🛠️ | Error | istream |
🛠️ | ||||
cstddef |
✅ | cassert |
🛠️ | ostream |
🛠️ | |||
cstdlib |
🛠️ | cerrno |
🛠️ | print |
🛠️ | |||
ctime |
🛠️ | exception |
🛠️ | sstream |
🛠️ | |||
expected |
🛠️ | stdexcept |
🛠️ | streambuf |
🛠️ | |||
functional |
🛠️ | system_error |
🛠️ | strstream |
🛠️ | |||
initializer_list |
🛠️ | String Library | syncstream |
🛠️ | ||||
optional |
🛠️ | cctype |
🛠️ | Filesystem Library | ||||
source_location |
✅ | charconv |
🛠️ | filesystem |
❌ | |||
tuple |
🛠️ | cstring |
🛠️ | Regex Library | ||||
type_traits |
🚧 | cuchar |
🛠️ | regex |
❌ | |||
typeindex |
🛠️ | cwctype |
🛠️ | Atomic Library | ||||
typeinfo |
🛠️ | format |
🛠️ | atomic |
🛠️ | |||
variant |
🛠️ | string |
🛠️ | Thread Library | ||||
version |
🚧 | string_view |
🛠️ | thread |
🛠️ | |||
Container Library | Iterator Library | stop_token |
🛠️ | |||||
array |
🛠️ | iterator |
🛠️ | shared_mutex |
🛠️ | |||
deque |
🛠️ | Ranges Library | semaphore |
🛠️ | ||||
flat_map |
🛠️ | ranges |
🛠️ | mutex |
🛠️ | |||
flat_set |
🛠️ | Algorithm Library | latch |
🛠️ | ||||
forward_list |
🛠️ | algorithm |
🛠️ | future |
🛠️ | |||
list |
🛠️ | execution |
🛠️ | condition_variable |
🛠️ | |||
map |
🛠️ | Numerics Library | barrier |
🛠️ | ||||
mdspan |
🛠️ | bit |
✅ | |||||
queue |
🛠️ | cfenv |
🛠️ | |||||
set |
🛠️ | cmath |
🛠️ | |||||
span |
🛠️ | complex |
🛠️ | |||||
stack |
🛠️ | numbers |
🛠️ | |||||
unordered_map |
🛠️ | numeric |
🛠️ | |||||
unordered_set |
🛠️ | random |
🛠️ | |||||
vector |
🛠️ | ratio |
🛠️ | |||||
valarray |
🛠️ |
Each header has two sections in it, the first is the status of that header, and the second are any note references that detail conditions or other important details.
The key for the first section is as follows:
- 🚧 - In progress
- ✅ - Completed
- 🛠️ - Planned, not started
- ❌ - Not-planned
Abyss is licensed under the BSD-3-Clause, the full text of which can be found in the LICENSE file.