The Elle coroutine-based asynchronous C++ development framework.
Elle is a collection of libraries, written in modern C++ (C++14). It contains a rich set of highly reusable concepts, algorithms, API wrappers, ...
Elle is split into different specialized sub-libraries to provide elegant ways to approach asynchronism (using coroutines), networking, formatting, serialization, logging, RPCs, etc.
Notes: - Elle is under development, used and maintained by Infinit as a core library. APIs, structures and concepts may change over time. You can use it as is but we don't guarantee any API backward compatibility. - Elle has a sub-library also called elle, which might change name in a near future.
Here is an example showing an asynchronous HTTP operation in a natural form (no callbacks) and basic JSON serialization.
// Initialize the HTTP Request. elle::reactor::http::Request r("https://en.wikipedia.org/w/api.php", elle::reactor::http::Method::GET); r.query_string({ {"format", "json"}, {"action", "query"}, {"prop", "extracts"}, {"explaintext", ""}, {"exintro", ""}, {"titles", "JSON"} }); // Perform the HTTP request and yield until response is available. r.finalize(); // Deserialize the json response. std::cout << elle::json::pretty_print(elle::json::read(r)) << std::endl;
To download the source code and build Elle by yourself, get it from GitHub.
git clone https://github.com/infinit/elle --recursive # Clone elle and its submodules.
Note: If you cloned it using the GitHub "clone" button, do not forget to run
git submodule update --init --recursive!Note: If you forked Elle, you'll also need to fork the following repositories too:
drake,dokan,libutp,miniupnp. The reason why is detailed on following GitHub issue.
As mentioned earlier, Elle is composed of a set of sub-libraries, designed to ease C++ development through robust and flexible implementations, including: - elle: Utilities including serialization, logs, buffer, formatting, ... - reactor: An asynchronous framework using a coroutines scheduler - cryptography: Object-oriented cryptography wrapper around OpenSSL - protocol: Network communication designed to support RPCs - das: Symbol-based introspection - athena: Byzantine environment algorithms (Paxos) - service/aws: reactorified AWS API wrapper - service/dropbox: reactorified Dropbox API wrapper - nbd: A Network Block Device implementation.
Elle uses Drake and has it as a submodule.
For a detailed procedure, visit our wiki: How to build.
First you need to install drakes requirements.
sudo pip3 install -r elle/drake/requirements.txt # Install Drake dependencies.
Note: If you don't want Drake dependencies to be installed system-wide, you should consider using virtualenv.
Change directory to
elle/_build/where you can find a generic Drake configuration script.
cd elle/_build/linux64 ./drake //build -j 2 # Build all libraries using 2 jobs.
cd elle/_build/osx ./drake //build -j 2 # Build all libraries using 2 jobs.
Because Elle was designed to be modular, you can build specific parts of Elle by running
./drake ///build:
./drake //src/elle/cryptography/build -j 2 # To build libcryptography and its dependencies. ./drake //src/elle/reactor/build -j 2 # To build the libreactor and its dependencies. ./drake //src/elle/protocol/build -j 2 # To build the libprotocol and its dependencies. ./drake //...
It will result on
/lib/libelle_.soand its dependencies on GNU/Linux,
/lib/lib.dylibon macOS, ...
Elle depends on a few libraries which are automatically downloaded and built for your system by Drake if needed.
Consult Elle's wiki for more information about Elle.