Skip to content

v0.1.5

Latest
Compare
Choose a tag to compare
@alandefreitas alandefreitas released this 04 Jan 17:27

πŸš€ 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 traits
    • void_t uses make_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
  • 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
    • executors are classes (not structs)
  • 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
  • core:
    • no dependencies on std::future at all
      • Even future_status is replaced without inclusion
  • exceptions:
    • futures 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
  • 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