Promises/Deferred/Futures for C++
- Install clang++-3.7 (Ensure it can be run as
clang++-3.7
) - run
make test
Installing clang++-3.7 is a bit non-trivial. On an Ubuntu machine, if you are
lucky, you might be able to just run image/load.sh
. This is provided without
support, and is more just an approximate documentation of how I set up my build
environment.
See image/Dockerfile
for another way to set up the environment on Ubuntu
16.04.
- run
cp local.mak.docker local.mak
- run
make test
This sets an environment variable in the Makefile that will use ./run.sh
to
run all actual build commands. ./run.sh
is a small bash script that runs build
commands in a docker container. The docker container has a full clang 3.7 build
environment. The docker container is built from image/makeimage.sh
and
image/Dockerfile
.
Let T denote a type that is either movable or copyable.
Let Result<R, F> represent a value that has either type R or F.
A promise is constructed with:
- a set of Ts (S) that it can be resolved to.
- a set of Ts (F) that it can be rejected to.
The promise needs to provide 3 interfaces.
- a "callable" that can be called with any of S.
- a "callable" that can be called with any of F.
- an ChainLink<S, F> that has the following methods:
- Then - takes a callable that can receive any of S and returns R or Result<R, Fr>.
- Returns ChainLink<R, F+Fr>
- Catch - takes a callable that can receive any of F and returns R or Result<R, Fr>
- Returns ChainLink<S+R, Fr>
- ThenCatch - takes two callables as above that must return the same R and Fr
- Returns ChainLink<R, Fr>
- Then - takes a callable that can receive any of S and returns R or Result<R, Fr>.