Skip to content

Commit b467952

Browse files
committed
added Joaquín's 2025Q4 update
1 parent 3178173 commit b467952

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
---
2+
layout: post
3+
nav-class: dark
4+
categories: joaquin
5+
title: Containers galore
6+
author-id: joaquin
7+
author-name: Joaquín M López Muñoz
8+
---
9+
10+
During Q4 2025, I've been working in the following areas:
11+
12+
### Boost.Bloom
13+
14+
* Written [an article](https://bannalia.blogspot.com/2025/10/bulk-operations-in-boostbloom.html) explaining
15+
the usage and implementation of the recently introduced bulk operations.
16+
17+
### Boost.Unordered
18+
19+
* Written maintenance fixes
20+
[PR#320](https://github.com/boostorg/unordered/pull/320),
21+
[PR#321](https://github.com/boostorg/unordered/pull/321),
22+
[PR#326](https://github.com/boostorg/unordered/pull/326),
23+
[PR#327](https://github.com/boostorg/unordered/pull/327),
24+
[PR#328](https://github.com/boostorg/unordered/pull/328),
25+
[PR#335](https://github.com/boostorg/unordered/pull/335).
26+
27+
### Boost.MultiIndex
28+
29+
* Refactored the library to use Boost.Mp11 instead of Boost.MPL ([PR#87](https://github.com/boostorg/multi_index/pull/87)),
30+
remove pre-C++11 variadic argument emulation ([PR#88](https://github.com/boostorg/multi_index/pull/88))
31+
and remove all sorts of pre-C++11 polyfills ([PR#90](https://github.com/boostorg/multi_index/pull/90)).
32+
These changes are explained in [an article](https://bannalia.blogspot.com/2025/12/boostmultiindex-refactored.html)
33+
and will be shipped in Boost 1.91. Transition is expected to be mostly backwards
34+
compatible, though two Boost libraries needed adjustments as they use MultiIndex
35+
in rather advanced ways (see below).
36+
37+
### Boost.Flyweight
38+
39+
* Adapted the library to work with Boost.MultiIndex 1.91
40+
([PR#25](https://github.com/boostorg/flyweight/pull/25)).
41+
42+
### Boost.Bimap
43+
44+
* Adapted the library to work with Boost.MultiIndex 1.91
45+
([PR#50](https://github.com/boostorg/bimap/pull/50)).
46+
47+
### Other Boost libraries
48+
49+
* Helped set up the Antora-based doc build chain for DynamicBitset
50+
([PR#96](https://github.com/boostorg/dynamic_bitset/pull/96),
51+
[PR#97](https://github.com/boostorg/dynamic_bitset/pull/97),
52+
[PR#98](https://github.com/boostorg/dynamic_bitset/pull/98)).
53+
* Same with OpenMethod
54+
([PR#40](https://github.com/boostorg/openmethod/pull/40)).
55+
* Fixed concept compliance of iterators provided by Spirit
56+
([PR#840](https://github.com/boostorg/spirit/pull/840),
57+
[PR#841](https://github.com/boostorg/spirit/pull/841)).
58+
59+
### Experiments with Fil-C
60+
61+
[Fil-C](https://fil-c.org/) is a C and C++ compiler built on top of LLVM that adds run-time
62+
memory-safety mechanisms preventing out-of-bounds and use-after-free accesses.
63+
I've been experimenting with compiling Boost.Unordered test suite with Fil-C and running
64+
some benchmarks to measure the resulting degradation in execution times and memory usage.
65+
Results follow:
66+
67+
* Articles
68+
* [Some experiments with Boost.Unordered on Fil-C](https://bannalia.blogspot.com/2025/11/some-experiments-with-boostunordered-on.html)
69+
* [Comparing the run-time performance of Fil-C and ASAN](https://bannalia.blogspot.com/2025/11/comparing-run-time-performance-of-fil-c.html)
70+
* Repos
71+
* [Compiling Boost.Unordered test suite with Fil-C](https://github.com/joaquintides/fil-c_boost_unordered)
72+
* [Benchmarks of Fil-C and ASAN against baseline](https://github.com/boostorg/boost_unordered_benchmarks/tree/boost_unordered_flat_map_fil-c)
73+
* [Memory consumption of Fil-C and ASAN with respect to baseline](https://github.com/boostorg/boost_unordered_benchmarks/tree/boost_unordered_flat_map_fil-c_memory)
74+
75+
### Proof of concept of a semistable vector
76+
77+
By "semistable vector" I mean that pointers to the elements may be invalidated
78+
upon isertion and erasure (just like a regular `std::vector`) but iterators
79+
to non-erased elements remain valid throughout.
80+
I've written a small [proof of concept](https://github.com/joaquintides/semistable_vector/)
81+
of this idea and measured its performance against non-stable `std::vector` and fully
82+
stable `std::list`. It is dubious that such container could be of interest for production
83+
use, but the techniques explored are mildly interesting and could be adapted, for
84+
instance, to write powerful safe iterator facilities.
85+
86+
### Teaser: exploring the `std::hive` space
87+
88+
In short, `std::hive` (coming in C++26) is a container with stable references/iterators
89+
and fast insertion and erasure. The [reference implementation](https://github.com/mattreecebentley/plf_hive)
90+
for this container relies on a rather convoluted data structure, and I started to wonder
91+
if something simpler could deliver superior performance. Expect to see the results of
92+
my experiments in Q1 2026.
93+
94+
### Website
95+
96+
* Filed issues
97+
[#1936](https://github.com/boostorg/website-v2/issues/1936),
98+
[#1937](https://github.com/boostorg/website-v2/issues/1937),
99+
[#1984](https://github.com/boostorg/website-v2/issues/1984).
100+
101+
### Support to the community
102+
103+
* I've been part of a task force with the C++ Alliance to review the entire
104+
catalog of Boost libraries (170+) and categorize them according to their
105+
maintainance status and relevance in light of additions to the C++
106+
standard library over the years.
107+
* Supporting the community as a member of the Fiscal Sponsorhip Committee (FSC).

0 commit comments

Comments
 (0)