-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from elbeno/add-readme
📚 Add readme file
- Loading branch information
Showing
1 changed file
with
41 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# C++ Bare Metal Senders and Receivers | ||
|
||
[![Unit Tests](https://github.com/intel/cpp-baremetal-senders-and-receivers/actions/workflows/unit_tests.yml/badge.svg)](https://github.com/intel/cpp-baremetal-senders-and-receivers/actions/workflows/unit_tests.yml) | ||
|
||
## WARNING: Work in Progress! | ||
|
||
This library is under active development. It is a work in progress and has not | ||
yet been proved in production. Proceed at your own risk. | ||
|
||
## Abstract | ||
|
||
*C++ Bare Metal Senders and Receivers* is a C++ header-only library that | ||
partially implements [P2300](https://wg21.link/p2300), the proposed C++ standard | ||
design for asynchronous computation. | ||
|
||
This implementation is intended for use on bare metal microcontrollers and | ||
implements a subset of the standard design. P2300 does encourage implementations | ||
not to do any runtime allocation, and that is fine for bare metal. But some | ||
notable differences here from the standard proposal are: | ||
|
||
- This implementation does not deal with exceptions in any way. An error is just | ||
an error value. | ||
- Coroutines are not considered at all. This implementation does not preclude | ||
coroutines as senders, but in a bare metal environment, the lack of | ||
non-allocation guarantees currently makes using coroutines an uncertain | ||
proposition at best. | ||
- Generalized tag dispatch may be missing for some functions. | ||
|
||
In general, although the P2300 design allows mechanism-agnostic handling of | ||
concurrency, the main mechanism of concurrency targeted by this library is | ||
interrupts. A careful reading of | ||
\[[intro.multithread](https://eel.is/c++draft/intro.multithread)\] is | ||
recommended to understand how the C++ memory model defines well-formed | ||
concurrent execution. | ||
|
||
C++20 is required. The following compilers are supported: | ||
|
||
- clang 14 through 17 | ||
- gcc 12 through 13 | ||
|
||
See the [full documentation](https://intel.github.io/cpp-baremetal-senders-and-receivers/). |