Skip to content

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 24 Sep 19:08
· 399 commits to main since this release
v0.8.2
710f109

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() on ExpanseMap / ExpanseSet now 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 / JudySLFreeArray are 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