Releases: stlab/libraries
Releases · stlab/libraries
2.0.0a2
The documentation is now built with Hyde 2.0 but has not yet been updated to finalize the release.
What's Changed
- Updating documentation and documentation system to hyde 2.0 by @sean-parent in #534
Full Changelog: v2.0.0a1...v2.0.0a2
v2.0.0a1
This is a draft of version 2.0.0. Bumping the major version number is due to the breaking changes mentioned below. I'm in the process of updating the documentation to use Hyde 2.0 and moving to use GitHub Actions to build the Jekyll pages. The final release will be done when those tasks are completed. This release is for those who "just need the code".
Breaking Changes
- C++17 or later is now required. The was done to make the executors and
task<>
noexcept aware. Executors now require the tasks being passed to them arenoexcept
.package<>()
can be used to create noexceptpackaged_task<>
s. Thetask<>
interface can now require that a captured task isnoexcept
. For example,task<int(double) noexcept>
will accept a type invocable with a double, where the result is convertible to int, and is declarednoexcept
. This is statically checked. Ifnoexcept
is ommited, the task will except either a function with a matching signature,noexcept
or not. - As part of moving to C++17, the ability to configure the library to use
boost::optional
andboost::variant
has been removed.
Bug fixes and other changes are listed below.
What's Changed
- Adds a call to pre_exit() on each example using default_executor by @fpelliccioni in #500
- new API: bool packaged_task::canceled() const by @KevinHopps in #498
- Changes to support C++14 and fixed missing include file (#501) by @sean-parent in #503
- Fix name conflict with boost math in Boost <= 1.76 by @fpelliccioni in #499
- Changed CMake paths to be robust to subprojects by @laserallan in #507
- Fixes to futures by @sean-parent in #505
- Fix typo from main_scheduler_type to main_executor_type by @nickpdemarco in #516
- Revisit Reduce by @sean-parent in #521
- Add check for C++20, make ambiguous case assume 23 by @nickpdemarco in #522
- Restore Qt5 compatibility by @touraill-adobe in #524
- Minor comment fix by @sean-parent in #526
- Requiring executor tasks are noexcept. by @sean-parent in #528
- Removing use of boost::variant and optional from stlab now that it has moved to C++17 by @thinlang in #531
New Contributors
- @KevinHopps made their first contribution in #498
- @laserallan made their first contribution in #507
- @touraill-adobe made their first contribution in #524
- @thinlang made their first contribution in #531
Full Changelog: v1.7.1...v2.0.0a1
v1.7.1
Patch release that just fixes some missing files in a CMakeLists.txt file
1.7.0
This release was created to address a number of issues.
- Building the library now requires a CMake step to generate a configuration file. Prior versions of the library were self-configuring but that was causing issues when headers were included in different compilation units compiled with different options.
- When using
default_executor
a call topre_exit()
is required prior to exiting main or invokingstd::exit()
. It is not necessary if usingstd::quick_exit()
. This allows the executor to shut down so canceled and detached tasks do not run concurrently with exit. blocking_get()
and associated functions have been renamedawait()
- A new operation
invoke_waiting()
was added to hint the portabledefault_executor
when a task is waiting for some condition. - The
await()
does not attempt to steal tasks from the portabledefault_executor
and instead will spin up additional threads (to a limit) to avoid deadlocking.
See more details in changes.md.
Patch release 1.6.2
- Fixed issues
- [#371]:(#371 include in concurrency/utility.hpp
- The _hold for detach was being done on the executor instead of the continuation. The result was a (silenced) broken exception getting thrown if detach() is called on a ready exception.
This would trigger an exception which is caught internally in a packaged task and dropped.
stlab::make_ready_future(stlab::immediate_executor).detach();
- Fixed an issue with the serial queue using a "temporary" executor which was copied into the future shared state.
- Added stealing to blocking_get
- Also cleaned up blocking_get implementation.
- blocking_get_for() added
- Fix for make_exceptional_future and improvements blocking_get_for added
- deprecated blocking_get() with timeout
- Fixing bugs and naming our threads
- Fixed issue with backoff
- min() duration on a clock apparently is not a minimum length duration as documented, but is a negative duration... instead we us a single tick.
- Update utility.hpp
1.6.1
- Simplified the portable default executor to use a priority queue instead of separate queues for each priority
- Simplified logic for blocking_get()
- Added support for blocking_get() to steal tasks when using the portable task system with exponential backoff
- Fixed a bug where setting the exception on a promise does not resolve the promise, and so subsequent destruction of the promise would change the exception to a broken_promise.
- Fixed two places where objects captured by lambdas were subsequently moved, but the lambdas were not marked as mutable. This meant that you could not move a future passed to
recover()
. - Disabled the task() template constructor in the case where the passed function was a task so that it doesn't match the copy constructor. Previously if you copied a task it would compile, but infinitely recurse when executed. Now copying a task will not compile.
- Fixed an issue where the task invoke arguments where always getting declared as rvalues (I think someone tried to make them universal references) - added a comment to avoid the mistake in the future.
- Made the top-level task invoke actually use universal references and perfect forwarding.
- Reduced the size of task for small object optimization (now will usually be size of 8 pointers, with 6 pointers of space for the small object)
- Fixed tasks for objects that require more than maximum alignment.
- Lifted the invoke vtable entry for task into the local task, filling an otherwise empty memory slot (on most architectures).
- Removed the move() on the invoke calls in task, these were intended to make all tasks single execution, but many are not, and so this is a slightly dangerous and, as far as I know, unused optimization. If needed it could come back as a new virtual (rvalue invoke) call and only be used with the task actually is an rvalue.
Minor feature release 1.6.0
- Backport the library to support C++14 and later
- Better auto-configuration - no need for compiler flags.
- Supported for threaded wasm using the portable tasking system (auto-configured).
Patch release 1.5.6
Patch release 1.5.5
Merge pull request #349 from FelixPetriconi/develop Prepare 1.5.5 release
Patch Release 1.5.4
- Fixed issues
- #317: when_all(range) and when_any(range) must not be used with an immediate_executor