π Features
- β¨ support C++14
- π« concepts: C++20 uses concepts
- executor:
- β¨
execution_context
traits - π«
execute
free-function - π library
thread_pool
- β¨
- π« iterator concept traits
- π
futures::future_status
- β¨ throw: support no exceptions
- config:
- π symbol visibility macros
- β¨ public config
- π« modules: main headers for modules
β‘οΈ Performance
- allocator:
- default pool allocator used for eager futures
- use
boost.core
for allocator traits
- adaptors: continuation tags
- traits: simplify traits to improve compile-time
- tuple algorithm: use mp11 algorithms for tuples
- operation state: use never valueless
variant2
- empty base: use
boost.core
- operation states: use compressed tuples
- schedule: eager vs deferred benchmark
β»οΈ Refactor
- concepts: traits are the ones defined in terms of concepts
- traits:
future_like
traitsvoid_t
usesmake_void
(required by some older GCC versions)- future-like traits infer defaults from member functions
- partitioner:
- split headers
- concept is
partitioner_for
(π¨ BREAKING)- The concept used to be called
partitioner
- The concept used to be called
- templates:
- use terse concept syntax
- public functions use concepts
- This improves documentation while private functions use a single syntax for C++14 and C++20
- use
class
keyword to define templates
- executor:
- built-in
asio_executor
concept- This avoids including
asio
headers, which is what takes the longest in our time-traces
- This avoids including
- executors are
class
es (notstruct
s)
- built-in
- execute: only const executors are supported
- executors are const but execution contexts are usually not and can't execute anything
- includes: std includes removed
- algorithm: parallel algorithms filter forward iterators
- future:
- fundamental future types are
extern template
- use
boost.core
noncopyable
- fundamental future types are
- core:
- no dependencies on
std::future
at all- Even
future_status
is replaced without inclusion
- Even
- no dependencies on
- exceptions:
future
s always throw native exceptions- use boost
throw_exception
- deps: fetched asio is installed as bundled
- continue: template continuations support
- error: make error code is private
- config:
- require macros
- public config macros
- asio: compiled futures uses compiled asio
- split implementation files
- detail: regular
void
- adaptors:
- use
mp11
algorithm traits - next future traits
- use
- futures: move main module to root
π Documentation
- doxygen:
- update exclude folders
- namespace cppreference links
- adaptors indicate implementation detail types
- future.hpp is always parsed first
- disable autolink
- traits use std aliases
- benchmark: eager future benchmark has 30000 replicates
- template: not made with mdsplit
- algorithm_traits: trait derived classes
- readme: update badges
- macros:
- FUTURES_PREFER_STANDALONE_ASIO is in config reference
- doxygen does not expand requires
- add table of macros
- index:
- coverage badge
- update GHA badge
- banner has no link to self
- mkdocs: reference links are lowercase
- javadocs: fix javadocs typos
- when_any: result type has briefs
- reference:
- use default doxybook templates
- simplify indexes
- exception safety section
- refactor javadoc
- modules: launch module has no submodules
- snippets: snippets as unit tests
- badges: center badges
- motivation:
- merge motivation section
- simplify abstract
- mermaid: remove mkdocs-mermaid2-plugin
- quickstart:
- fix typo
- reflect bundled deps
- style: update banner
- abstract: improve code reuse
π¨ Style
- clang-format:
- exclude bundled directories
- insert braces
- set qualifier alignment
- update brace wrapping for classes
- rename root directories
π¦οΈ Build
- linter:
- create glob includes
- fix unreachable headers
- print stats
- bundle deps
- If dependencies are not found, then use the bundled ones
- bundle standalone Asio
- This significantly reduces the number of bundled Boost dependencies
- dev-mode:
- clang flame graphs
- warning as error option
- amalgamator:
- remove single header build
- keep comments in bundled deps
π§ͺ Tests
- time-trace: clang version 9 for time-trace
- coverage: coverage includes tests
- integration: integration tests
- algorithm: split algorithm tests
- unit:
- aggregate headers
- bundle catch2
- tests per public header
π¦ Continuous Integration
- docs:
- doxygen from source
- cache doxybook installation
- cache doxygen
- use doxybook develop in the general case
- workflow concurrency
- enable docs workflow in develop
- build:
- apt-get has no cache
- coverage disables Release
- build jobs run on all branches
- check conventional commit
- junit test
- update macos
- update actions
- no header package
- time-trace: combine time-trace results
- matrix:
- c++ standards
- test bundled dependencies
- deps: cache dependencies
- config: test all compiler variants
- codecov: setup codecov
ποΈ Chores
- bump version to 0.1.5
- examples: include macros