diff --git a/_posts/2026-04-20-Ions2026Q1Update.md b/_posts/2026-04-20-Ions2026Q1Update.md new file mode 100644 index 000000000..6d660a364 --- /dev/null +++ b/_posts/2026-04-20-Ions2026Q1Update.md @@ -0,0 +1,103 @@ +--- +layout: post +nav-class: dark +categories: ion +title: Deque rewrite, segtor, segmented algorithms and a hub review ahead +author-id: ion + +--- + +During Q1 2026, I've been working in the following areas: + +### Boost.Container + +The rewritten `boost::container::deque` shipped in 1.90. Leaner container +and iterators. Details and benchmarks against libstdc++, libc++ and +MSVC STL on my blog: +[Inside Boost.Container: comparing different deque implementations](https://boostedcpp.net/2026/03/30/deque/). + +The deque implementation was refactored into a reusable `deque_impl` so it +could back a new **`segtor`** container: a single-ended counterpart to +`deque` (same segmented storage, `push_back`/`pop_back` only) for the +common case of stable references plus append-only growth. Ships in 1.91. + +For the upcoming `hub` review I also added an experimental **`nest`** +container as a neutral reference point for benchmarking against Joaquín's +`hub` and Matthew Bentley's `plf::hive`. + +The largest piece of work was a family of experimental **segmented algorithms** +(`segmented_find_if`, `segmented_mismatch`, `segmented_copy`, +`segmented_partition`, `segmented_set_union`, … around 30 in total) that +understand the block layout of `deque` / `segtor` / `nest` and recurse +into segments instead of walking iterators one element at a time. +Experimented also with loop unrolling in STL-like algorithms. + +Other additions: C++20 `starts_with` / `ends_with` and C++23 `contains` +on `basic_string`; new `inline_chars`, `stored_size` and `growth_factor` +options for `basic_string`; overalignment support across the pool +allocator family (`adaptive_pool`, `private_node_pool`, `shared_node_pool` +and friends); `unchecked_push_back` / `unchecked_emplace_back` on +`vector` / `small_vector` / `static_vector`; a `prefetch` option. + +Fixes: +[#328](https://github.com/boostorg/container/issues/328) (redundant +allocator copy in `deque`, resolved by the rewrite), +[#330](https://github.com/boostorg/container/issues/330) +(`detail/pair.hpp` partial specializations for `std::pair`), +[#332](https://github.com/boostorg/container/issues/332) +(`aligned_alloc` on XCode 12), +[#334](https://github.com/boostorg/container/issues/334) (overload +resolution in the P2363R5 implementation). + +### Boost.Intrusive + +Changed the return type of `list` / `slist` `remove`, `remove_if` and +`unique` from `void` to `size_type` following C++20 (LWG 2959 / P0646). +Merged [PR#104](https://github.com/boostorg/intrusive/pull/104) and +[PR#105](https://github.com/boostorg/intrusive/pull/105), both from +@nkolotov — the first fixes a `noexcept`-specifier bug that broke +`ebo_function_holder_traits` under C++17, the second simplifies +`ebo_functor_holder` by removing custom type-traits machinery. Many +thanks. Also removed MSVC C4180 and switched several constant-condition +branches to `BOOST_IF_CONSTEXPR`. + +### Boost.Move + +Merged [PR#63](https://github.com/boostorg/move/pull/63) by @Lastique +removing Boost.StaticAssert dependencies, addressed +[#64](https://github.com/boostorg/move/pull/64) (`std::pair` +specializations for the trivial type traits), and marked the +conversion-aware helpers `forceinline`. + +### Boost.Interprocess + +Added OS-native **systemwide thread IDs** with backends for Linux, +FreeBSD, macOS, Cygwin (via WinAPI) and Windows. This unblocks +process-shared mutex ownership tracking on systems where +`_POSIX_THREAD_PROCESS_SHARED` is buggy (notably FreeBSD). + +Reworked the allocator stack for **overaligned types** end-to-end: +`segment_manager`, `allocator`, `node_allocator`, `private_node_allocator`, +`cached_node_allocator`, `adaptive_pool` and friends now carry explicit +alignment and use `allocate_aligned` internally. + +Fixes: +[#252](https://github.com/boostorg/interprocess/issues/252) (`offset_ptr` +construction regression with clang since 1.87.0), +[#276](https://github.com/boostorg/interprocess/issues/276) and +[#277](https://github.com/boostorg/interprocess/issues/277) (`-Wundef` +warnings). Windows MSVC 14.5, Windows-ARM64 and Linux-ARM64 were added to +the CI matrix across all four libraries. + +### Review manager for `boost::container::hub` + +I'll be serving as review manager for Joaquín's +[`boost::container::hub`](https://github.com/joaquintides/hub), a +drop-in replacement for C++26 `std::hive`, formally reviewed April 16-26. +Late Q1 went into reading the proposal, running the benchmarks and +putting the reviewer materials together. + +### Support to the community + +Ongoing maintenance and review of community contributions across Move, +Container, Intrusive and Interprocess.