The proba module as been removed. (See #1490) It will be reworked as a separate project later on with a proper API.
Architectures/Compilers Support & Fixes
The One Big News for this release: SVE
SVE with fixed size, power of 2 cardinal is now supported for most of our API. Some more optimizations are on the way but the support is functional. (See #1432, #1435, #1436, #1437, #1438, #1448, #1453, #1455, #1456, #1463, #1464, #1472, #1473, #1474,#1487, #1489, #1491, #1494, #1533, #1556)
Other Fixes
EVE now compiles on ARM M1 with Homebrew g++. (See #1471)
EVE now compiles with Apple Clang (See #1479, #1485, #1502, #1530, #1531)
Various efforts have been made to advance the MSVC situation. Help still welcomed.
ARM all and any are now more efficient (See #1500)
Integral sign/signnz functions are now more efficient on x86 (See #1499)
Implementation for X86 AVX2/AVX512 gather and masked gather are now optimized. (See #1526)
Features
jtlap implemented a large amount of new functions for eve::complex.
Functions like exp, log or sqrt can now be called with a real entry and a complex output. (See #1528)
Binary functions for which a n-ary extensions is available now support being called with a tuple-like parameter instead of a dynamic range (See #1422, #1509)
The minmax function is now available. (See #1507)
DenisYaroshevskiy implemented new traits for algorithms to take care of costly kernels, no alignment and to support fused operations. (See #1535, #1543)
Bug Fixes
Convert is now more efficient and don't generate piecewise evaluation in some scenario involving logicals. (See #1447, #1428)
if_else now uses the proper constant generator in optimized cases. (See #1529)
Prevent constant to erroneously be callable with non-specific product types. (See #1540)
A large cleanup of old traits and concepts has been done. The basics concepts around vectorizable and vectorized types has been therefore simplified and streamlined. (See #1468, #1477, #1527, #1488, #1545)
Fix issue with dynamic SIMD extension detection that were broken by accident. (See #1504)
A lot. The main non-code changes is our move from MIT License to the BOOST SOFTWARE License. Next to that, support for more algorithms and complex numbers has been added.
Starting this fall, we will also try to provide more regular release.
This release is an API/ABI breaking changes release.
ABI/API changes
Promote module like includes by removing eve/function/ (See #1378)
This release is an API/ABI breaking changes release.
A lot of improvements in QoL, QoI, and API have been made. Some more breaking ABI changes are planned, including a passive move toward an include file layout more amenable to future modularization.
A bunch of platform supports changes are also in to prepare for new platform including WASM and gasp fixed size SVE.
Improvements of documentation
Revamped docs to add basic 101 tutorials
Fixed most documentation to provide Compiler-Explorer-aware samples
Correct tutorial example code for if_else
Various proofreading by pauljurczak and toughengineer
Improvements on compress (#947, #1013, #1037, #1213)
compress_store is a very important function that has been reimplemented to simplify its implementation in term of support for iterators
better implementation for X86 architectures (SSE2 and BMI).
provide an alternative implementation based on switch
Improvements on algorithms **DenisYaroshevskiy** did a wonderful job on this front.
New algorithm: reverse (#1066, #1068)
New algorithm: reverse_copy (#1060)
New algorithm: iota (#1016)
New algorithm: fill (#1119)
New views : map, map_convert (#889)
Fix copy backward (#1099, #1111)
Improvements on wide handling
Fix the "no garbage after cardinal" for small wide (#815)
Fix aliasing issue in wide::get and wide::set (#1047)
wide<product_type> has correct sizeof
Adapt wide to handle more complex construction from product_type
Added an emulation layer for std::experimental::simd types
Convert
Fixed missing code for eve::convert. All convert calls now produce optimal code.
More specifically and addition to global fixes, aguinet contributed:
Improvement for u64 => u32 when using AVX2
Improvement for u16 => u8 when using AVX2
Improvement for u64=>u32 using AVX2 + clang
Shuffle
Removed shuffling via operator[] and introduced eve::shuffle (#1103)