Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions _posts/2026-04-20-Ions2026Q1Update.md
Original file line number Diff line number Diff line change
@@ -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.