infinit / elle

The Elle coroutine-based asynchronous C++ development framework.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Elle, the coroutine-based asynchronous C++ development framework

Logo - Elle

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.

Example

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;

Getting Elle

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.

Structure

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.

How to build Elle (or parts of Elle)

Requirements

Build system

Elle uses Drake and has it as a submodule.

How to compile

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/<architecture> where you can find a generic Drake configuration script.

GNU/Linux

cd elle/_build/linux64
./drake //build -j 2 # Build all libraries using 2 jobs.

macOS

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 //<module>/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 <module>/lib/libelle_<module>.so and its dependencies on GNU/Linux, <module>/lib/lib<module>.dylib on macOS, ...

Dependencies

Elle depends on a few libraries which are automatically downloaded and built for your system by Drake if needed.

List of projects using Elle

Wiki

Consult Elle's wiki for more information about Elle.

Maintainers

About

The Elle coroutine-based asynchronous C++ development framework.

License:Apache License 2.0


Languages

Language:C++ 83.5%Language:C 8.9%Language:Python 5.5%Language:Shell 0.8%Language:CMake 0.3%Language:Makefile 0.2%Language:C# 0.2%Language:SWIG 0.2%Language:Objective-C++ 0.1%Language:Rich Text Format 0.1%Language:JavaScript 0.0%Language:CSS 0.0%Language:HTML 0.0%Language:Roff 0.0%Language:Batchfile 0.0%Language:Java 0.0%Language:Assembly 0.0%Language:PowerShell 0.0%Language:Starlark 0.0%Language:Emacs Lisp 0.0%Language:Perl 0.0%Language:Dockerfile 0.0%Language:Meson 0.0%Language:Hack 0.0%