Repository navigation
v0.8.2
Behaviour change. ExpanseStrMap::remove no longer returns the allocator's retained blocks when it takes the last key (introduced in 0.8.1). A drained map now keeps them for its next insert, as ExpanseMap and ExpanseSet do. Call shrink_to_fit() after the drain, or clear(), to return them. Releasing on every emptying remove cost a map that repeatedly empties about 21× the instructions per insert-and-remove cycle (strmap_oscillate, #1119).
mem_held()/shrink_to_fit(): Rust API since 0.8.0; C ABI (expanse_{map,set,strmap}_{mem_held,shrink_to_fit}), C++ and the Python, Node, Java, .NET, Go, PHP and Ruby bindings from 0.8.2. Not yet on WebAssembly or concurrent wrappers (#1135).clear()onExpanseMap/ExpanseSetnow returns retained memory; dropping a tree no longer runs that release first (also removing a per-drop cost the string map carried in 0.8.1).JudySLDel/JudySLFreeArrayare unchanged.
What's Changed
📦 Packaging & Distribution
Other Changes
- ci(miri-ub-sites): record the innermost frame, do not gate on it (Refs #1086) by @orieg in #1117
- eval(patricia): reference-host re-run after the prefix-scan fixes (Refs #1096) by @orieg in #1118
- bench(set): add a set_remove Callgrind arm by @orieg in #1115
- test(sync): pin the covered-writer window with a positive control (Refs #1086) by @orieg in #1121
- bench(strmap): prefix-scan instruments for the remaining losses (Refs #1096) by @orieg in #1120
- fix(map,set): return retained blocks on clear; keep Drop off the release path by @orieg in #1116
- perf(strmap): keep only live levels' sub-map cursors in StrCursor (Refs #1096) by @orieg in #1123
- perf(strmap): size cursor_at_or_after's buffers from the seek key (Refs #1096) by @orieg in #1127
- bench: drain-and-refill and empty-tree oscillation arms (Refs #1119) by @orieg in #1125
- docs(architecture): the class-1 plan for #1086, before any code (Refs #1086) by @orieg in #1122
- feat(capi,bindings): expose mem_held and shrink_to_fit (Refs #1119) by @orieg in #1128
- bench: root-leaf variants of the sync_* read and churn arms (Refs #1086) by @orieg in #1132
- perf(strmap): step a live level in place in StrCursor::next (Refs #1096) by @orieg in #1131
- fix(strmap): keep a drained map's blocks until shrink_to_fit or clear (Refs #1119) by @orieg in #1129
- perf(strmap): step root-leaf levels positionally in StrCursor (Refs #1096) by @orieg in #1134
- test(bindings,capi,alloc): pin a drained string map's retention everywhere (Refs #1119) by @orieg in #1136
Full Changelog: v0.8.1...v0.8.2