Continuable Versions Save

C++14 asynchronous allocation aware futures (supporting then, exception handling, coroutines and connections)

4.2.2

8 months ago

4.2.1

1 year ago
  • Maintainance & various bug fixes

4.1.0

3 years ago

Continuable 4.1.0

Contains various follow up fixes for version 4.0.0:

  • #32
  • #36
  • #38

4.0.0

4 years ago

See the release notes here.

3.0.0

6 years ago

See the release notes here.

3.0.0-alpha-1

6 years ago

This is an unstable release

2.0.0

6 years ago

Zero cost futures now with error handling and co_await support


In version 2.0 the library was heavily improved in multiple ways:

Error handling

Usually it is inconvenient to handle error codes and exceptions in an asynchronous context, as we all know std::future supports error handling through exceptions already. We now introduce this capability to the continuable library while allowing error codes to be used as well.

Consider the function cti::continuable<> get_bad_continuable() which always resolves through an error, then you may handle the error code or exception as following:

get_bad_continuable()
  .then([] {
    // ... never invoked
  })
  .then([] {
    // ... never invoked as well
  })
  .fail([] (std::exception_ptr e) {
    try {
      std::rethrow_exception(e);
    } catch(std::exception const& e) {
      // Handle the exception here
    }
  });

Abstracting callbacks as promises

Since a callback may be called through an error or result the cri::promise class was added in order ro provide a similar interface to std::promise:

auto http_request(std::string url) {
return cti::make_continuable<std::string>([url = std::move(url)](cti::promise<std::string> /*or auto&&*/ promise) {
  // Perform the actual request through a different library,
  // resolve the promise upon completion of the task.
  promise.set_value("<html> ... </html>");
 // ...or promise.set_exception(...);
});
}

co_await support

Experimental coroutine (co_await and co_return) support was added, this is available on MSVC 2017 and Clang 5.0.

int i = co_await cti::make_continuable<int>([](auto&& promise) {
  promise.set_value(0);
});

Minor improvements

The library was improved in other ways:

  • constexpr and noexcept improvements
  • Compile-time improvements
  • Documentation improvements

Header split

Since the overall library size was increased the headers were split into smaller chunks.

v1.0.0

7 years ago

Continuable - Release v1.0.0

This is the first stable release of the continuable library.

Changelog

  • Documentation and readme changes
  • Change the assertion type of some GTest macros from expected to assertion.

v0.8.0

7 years ago

Continuable - Release v0.8.0

This is the second pre-release of the continuable library.

Changelog

  • Fixes a major issue with handling the ownership for consumed continuables which led to unintended invocations.
  • Adds partial application support which makes it possible to chain callbacks which accept less arguments then the curret signature.
    http_request("github.com")
      .then([] {
        // ...
      });
    
  • Adds Support for sequential invocation:
    http_request("github.com") >> http_request("atom.io")
      .then([] (std::string github, std::string atom) {
        // ...
      });
    

v0.7.0

7 years ago

Continuable - Release v0.7.0

This is the first public release of the continuable library and ships with:

  • Continuation syntactic sugar
  • Executor support
  • Connection support