namespace tf {

/** @page release-4-1-0 Release 4.1.0 (2026/06/19)

@tableofcontents

@section release-4-1-0_summary Release Summary

Following v4.0, this release (v4.1) further modernizes the codebase with C++20 concepts to improve extensibility, readability, and type safety. 
It introduces new parallel algorithms, including N-dimensional parallel iteration and parallel merge, as well as a redesigned profiler that improves scalability by replacing D3-based rendering with Canvas. 
This release also expands the documentation with many new examples and tutorials to help users learn and adopt %Taskflow more effectively.

@section release-4-1-0_download Download

%Taskflow 4.1.0 can be downloaded <a href="https://github.com/taskflow/taskflow/releases/tag/v4.1.0">here</a>.

@section release-4-1-0_system_requirements System Requirements

To use %Taskflow v4.1.0, you need a compiler that supports C++20:

@li GNU C++ Compiler at least v11.0 with -std=c++20
@li Clang C++ Compiler at least v12.0 with -std=c++20
@li Microsoft Visual Studio at least v19.29 (VS 2019) with /std:c++20
@li Apple Clang (Xcode) at least v13.0 with -std=c++20
@li NVIDIA CUDA Toolkit and Compiler (nvcc) at least v12.0 with host compiler supporting C++20
@li Intel oneAPI DPC++ Compiler at least v2022.0 with -std=c++20

@note
If your project does not support C++20, please use %Taskflow v3.11.0, which can be downloaded <a href="https://github.com/taskflow/taskflow/releases/tag/v3.11.0">here</a>.

@section release-4-1-0_new_features New Features

@subsection release-4-1-0_taskflow_core Taskflow Core

+ refactored the codebase with C++20 concept to enhance readability
  + credit goest to the amazing Anthropic Claude
+ added bulk cache update method in executor
+ added more unit tests to `test_notifiers.cpp`
+ added a new unittest `test_partitioners.cpp`  
+ added module support under `taskflow/modules/`
+ added adopted module task to support composable tasking with move semantics
  + tf::Taskflow::adopt
  + tf::Task::adopt
+ added a new parallel-for algorithm over a multi-dimensional index range
  + tf::Taskflow::for_each_by_index (see @ref ParallelIterations)
+ added a new parallel-merge algorithm tf::Taskflow::merge
  + see @ref ParallelMerge
+ improved the dump format with proper indention
+ improved the dump format of `tf::Subflow` with cluster-level edges
+ optimized executor member variable data layout to reduce false sharing
  + aligned `num_topologies` to a cache line
  + aligned `notifier` to a cache line
+ optimized `tf::Executor::run(Taskflow&&)` with asynchronous tasking
  + removed satellite field from both taskflow and executor classes
+ optimized the locking cost of topology
+ introduced a new profiler to replace the existing [tfprof](https://github.com/taskflow/tfprof)
  + older version of the profiler can be referred to index.html at [pre-v4.0](https://github.com/taskflow/tfprof/tree/pre-v4.0.0)
+ removed extra copy on dependency tasks when creating a dependent-async task

@subsection release-4-1-0_utilities Utilities

+ added tf::GraphLike concept to check if a type has a tf::Graph
+ added tf::StaticTaskLike concept to check if a type is a static task
+ added tf::SubflowTaskLike concept to check if a type is a subflow task
+ added tf::RuntimeTaskLike concept to check if a type is a runtime task
+ added tf::ConditionTaskLike concept to check if a type is a condition task
+ added tf::MultiConditionTaskLike concept to check if a type is a multi-condition task
+ added tf::PartitionerLike concept to check if a type is a partitioner
+ added tf::IndexRangesLike concept to define N-dimensional index ranges
+ added tf::IndexRanges to perform parallel iterations over an N-dimensional range
+ added tf::unroll_until and tf::unroll_while to unroll loops with stopping conditions
+ removed `floor_log2` due to duplication with C++20 `std::bit_width`
+ removed `cpu_pause` due to platform-dependent implementation

@section release-4-1-0_bug_fixes Bug Fixes 

+ fixed the scope bug in creating @c tf::Future<T> from @std_future ([#761](https://github.com/taskflow/taskflow/issues/761))
+ fixed the async bug in taking name as a parameter
+ fixed the redundant call when `N` is zero in `for_each_by_index`
+ fixed the bug in `find_if` where `result` is dangling under `N=0`

@section release-4-1-0_breaking_changes Breaking Changes

+ renamed `tf::IndexRange::discrete_domain` to `tf::IndexRange::unravel`
+ replaced the D3-based rendering in [tfprof](https://taskflow.github.io/tfprof/) with Canvas for better scalability

@note
The newest [tfprof](https://taskflow.github.io/tfprof/) can only take .tfp generated by v4.1, which introduces a more efficient format to load by the browser than the previous version.
For .tfp generated before v4.1, please refer to the old version of tfprof at [pre-v4.0](https://github.com/taskflow/tfprof/tree/pre-v4.0.0).

@section release-4-1-0_documentation Documentation

+ switched to the native doxygen for C++20 support
+ revised @ref Cookbook
  + added video tutorial links
+ revised @ref ComposableTasking
  + added @ref CreateAnAdoptedModuleTask
+ revised @ref Profiler
+ revised @ref ParallelIterations
  + added @ref ParallelIterationsIndexRangeBased
+ revised @ref Examples
  + added @ref ExamplesStencil3D
  + added @ref ExamplesDivideAndConquer
  + added @ref ExamplesAsyncProducerConsumer
  + added @ref ExamplesDynamicDependencyGraph
  + added @ref ExamplesBFS
  + added @ref ExamplesCholesky
  + added @ref ExamplesSpMV
  + added @ref ExamplesConv2D
  + added @ref ExamplesTSP
  + added @ref ExamplesGraphColoring
  + added @ref ExamplesPERT
  + added @ref ExamplesMakeGraph
  + added @ref ExamplesSpeculativeExecution
+ revised @ref Profiler
+ added @ref ParallelMerge

@section release-4-1-0_miscellaneous_items Miscellaneous Items

If you are interested in collaborating with us on applying %Taskflow to your projects, please feel free to reach out to @twhuang!

*/

}


