Skip to content
/ elle Public
forked from infinit/elle

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

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE
Unknown
LICENSE.md
Notifications You must be signed in to change notification settings

dyu/elle

 
 

Repository files navigation

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 smaller specialized libraries to provide elegant ways to approach coroutine, networking, formatting, serialization, logging, RPCs, etc.

Notes:

  • Elle is under development, used and maintained by Infinit as a set of core libraries. 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

reactor::http::Request r("https://en.wikipedia.org/w/api.php",
                         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;

Full example here.

Getting Elle.

To download the sources and build Elle by yourself, you can just get it from GitHub by running the following commands.

git clone https://github.com/infinit/elle --recursive # Clone elle and its submodules.

Structure

As mentioned earlier, Elle is a set of 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 library (RPCs)
  • das: Model manipulator and generator
  • athena: Byzantine environment library
  • aws: reactorified AWS API wrapper
  • dropbox: reactorified Dropbox API wrapper

How to build Elle (or parts of Elle)

Requirements

Build system

Elle uses Drake and has it as a submodule.

How to compile

First you need to install drakes requirements.

sudo pip3 install elle/drake/requirements.txt # Install Drake dependencies.

Note: If you don't want Drake dependencies to be installed on your system, you should consider using virtualenv.

Then, change directory to _build/<architecture> where you can find a generic Drake configuration script.

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 //cryptography/build -j 2 # To build libcryptography and its dependencies.
./drake //reactor/build -j 2 # To build the libreactor and its dependencies.
./drake //protocol/build -j 2 # To build the libprotocol and its dependencies.
./drake //...

It will result on <module>/lib/lib<module>.so and its dependencies on 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

Maintainers

About

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

Resources

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE
Unknown
LICENSE.md

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 77.3%
  • Python 20.5%
  • C 1.9%
  • Assembly 0.1%
  • CMake 0.1%
  • Objective-C++ 0.1%