Deque rewrite, segtor, segmented algorithms and a hub review ahead
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.
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 (redundant
allocator copy in deque, resolved by the rewrite),
#330
(detail/pair.hpp partial specializations for std::pair),
#332
(aligned_alloc on XCode 12),
#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 and
PR#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 by @Lastique
removing Boost.StaticAssert dependencies, addressed
#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 (offset_ptr
construction regression with clang since 1.87.0),
#276 and
#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, 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.