v0.2.0
What's Changed
- docs: repo is public; main protection active and enforced by @orieg in #2
- feat(ci): post benchmark results as a PR comment with base deltas by @orieg in #4
- fix(strmap): iterative teardown and removal — no stack overflow on long keys, plus the coverage to see it by @orieg in #7
- eval(bench): cache-pressure arm — does our layout hold when it stops fitting in cache? by @orieg in #5
- perf: monomorphize immed_find, word-wise pop0, class-sized root leaves by @orieg in #6
- bench(instrument): same-shape vs-stock arms, symbols bound in setup by @orieg in #8
- fix(strmap): iterative ordered navigation by @orieg in #9
- fix(ci): per-commit concurrency group so main runs are never evicted by @orieg in #10
- perf(types): inline the tag decode by @orieg in #11
- docs(bench): collapse B2 to a single authoritative baseline by @orieg in #12
- perf(types): force-inline the tag decode — first arm below stock libjudy by @orieg in #13
- perf(alloc): per-kind alignment — raw byte storage off the memalign path by @orieg in #14
- perf(get): match the leaf path's compare idiom in immed_find by @orieg in #15
- perf(get): locate_slot scans immediates in place, like descend by @orieg in #16
- bench(churn): steady-state mixed arm in both harnesses by @orieg in #17
- perf(map): direct copy for class-crossing leaf resizes by @orieg in #18
- perf(bits): runtime popcnt dispatch for the bitmap rank operations by @orieg in #19
- docs(readme): status as scannable tables by @orieg in #21
- perf(set): direct copy for class-crossing leaf resizes — the set twin of #18 by @orieg in #20
- perf(mutate): scratch-free bitmap-leaf build (scope cut to the measured win) by @orieg in #22
- perf(mutate): in-place node allocation and loop-folding same-level re-entries (#24) by @orieg in #28
- perf(alloc): transition NodeAlloc to layout-rounded bytes/key accounting (#25) by @orieg in #29
- feat(validate): defensive trie validator, stats collection, and navigation benchmarks (#26) by @orieg in #30
- chore: panic=abort release profile, glibc-hwcaps recipes, and doc cleanup (#27) by @orieg in #31
- perf(ci): side-by-side x86-64-v3 modern architecture benchmark reporting and hwcaps docs by @orieg in #34
- perf(leaf): O(log N) binary search probe for dense linear leaves (#32) by @orieg in #35
- perf(mutate): monotonic ascending append fast-path for linear leaves (#32) by @orieg in #36
- perf(leaf): branchless pop <= 2 unrolling in lower_bound_fixed (#32) by @orieg in #37
- docs: update benchmark table, algorithm reference, and interactive visualizer (#32) by @orieg in #38
- perf(leaf): AVX2/SSE2 128-bit vector search and lower_bound scans for linear leaves (#32) by @orieg in #39
- perf(root): monotonic append fast-path for root leaf in ExpanseSet and ExpanseMap (#32) by @orieg in #40
- bench: add linear_leaf distribution to instructions benchmark matrix (#32) by @orieg in #41
- docs: clarify benchmark arms catalog, SIMD vector kernels, and visualizer (#32) by @orieg in #42
- perf(trie): multi-level sequential run bypass for ExpanseSet and ExpanseMap by @orieg in #43
- docs(visualizer): add interactive Structural Hierarchy DAG, Growth Lifecycle DAG, and Baseline Comparison mode by @orieg in #44
- perf(cursor): record InsertPath bottom-up to eliminate descent store overhead on random inserts by @orieg in #45
- docs(visualizer): embed ground-truth code & benchmark data, streamline into 2 unified views by @orieg in #46
- feat(visualizer): 15-milestone 1M population scaling, custom slider styling & automated zero-drift sync test by @orieg in #47
- docs: visualizer architecture, data sync protocol & developer workflow guidelines by @orieg in #48
- fix(visualizer): close unclosed comment in architecture_visualizer.html & add JS syntax unit test by @orieg in #49
- feat(visualizer): multi-level trie depth scaling, subarray cascade loops & 8-byte digit breakdown by @orieg in #50
- fix(visualizer): connect Branch U to Bitmap Leaf and illuminate dynamic active traversal paths by @orieg in #51
- feat(visualizer): add multi-factorial workload dynamics, 10M keys scaling milestone, and OCC/mutation pipeline tracing by @orieg in #52
- refactor(visualizer): rename 10M milestone from Enterprise to 8-Lvl Dense by @orieg in #53
- feat(visualizer): add drop-in C-compat ABI benchmark matrix vs stock libjudy by @orieg in #54
- feat(visualizer): clean up View 2 table alignments and sync exact PR CI benchmark dataset by @orieg in #55
- perf(mutate): defer ancestor pop0 increments during clustered and sequential runs by @orieg in #56
- perf(bits): vectorize and unroll 8-byte branch header search by @orieg in #57
- perf(leaf): unroll lower_bound and search for pop <= 4 by @orieg in #58
- perf(capi): direct inlined fast paths for Judy1Test and JudyLGet by @orieg in #59
- perf(bits): fast fused test_and_subexpanse_rank and 32-bit subexpanse count by @orieg in #60
- perf(leaf): fast single-instruction packed key reads and writes for 1, 2, and 4 byte widths by @orieg in #61
- perf(clustered): optimize leaf insert/realloc copies, fast handle access, and CI regression guard by @orieg in #62
- docs: add comprehensive CI architecture & regression guard guide in docs/CI.md by @orieg in #63
- ci: add docs-only fast path for heavy jobs (#64) by @orieg in #67
- perf(set): fast-track LeafB1 bypass terminal_pop and flush on navigation by @orieg in #68
- perf(alloc): slab block freelist recycling for fast steady-state allocations by @orieg in #69
- perf(simd): vectorized SIMD leaf lower_bound and search for 8-byte and 16-byte spans by @orieg in #71
- docs: update performance table and recent optimizations in README by @orieg in #72
- docs: clarify standard baseline vs x86-64-v3 compilation in performance section by @orieg in #74
- pkg(capi): enable crates.io publishing for expanse-capi by @orieg in #75
- perf(get): elide decode_matches when level matches and add path cache to get_value_slot by @orieg in #76
- perf: pure 64-bit SWAR find_byte_8 and root leaf delete hysteresis by @orieg in #77
- perf: direct branch arm dispatch and level lookup in get traversal by @orieg in #79
- fix(ci): format Regression Guard using GitHub Markdown alert syntax by @orieg in #80
- ci: refine file-scope change detection for fuzz-smoke and heavy test jobs by @orieg in #81
- perf: monomorphized linear leaf locate with fused match and bounds elimination by @orieg in #82
- port: enable cargo test --workspace --all-targets on macOS and non-Linux platforms by @orieg in #85
- feat(capi): add expanse_strmap_t ordered string map bindings to modern C API by @orieg in #83
- perf: contiguous insert cursor linear leaf bypass for sequential runs (#32) by @orieg in #86
- perf: OCC epoch freelist recycling to prevent allocator roundtrips (#1, #84) by @orieg in #87
- perf: cross-chunk path compression in ExpanseStrMap (#84) by @orieg in #88
- perf: BranchU descent unrolling, 32-bit subexpanse rank, and LeafB1 hysteresis (#32, #1) by @orieg in #89
- perf: restore hardware bt, specialize linear leaf search, and streamline BranchU (#32, #1) by @orieg in #90
- perf: eliminate demotion heap allocation and accelerate BranchL3/L7 navigation (#32, #1) by @orieg in #91
- perf: unaligned arithmetic packed key access and FromIterator/Extend (#32, #1) by @orieg in #92
- perf: monomorphize linear leaf packed key building (#32, #1) by @orieg in #93
- perf: fast-path path cursor in get_value_slot (#32, #1) by @orieg in #94
- perf: eliminate atomic CAS loop on single-writer NodeAlloc freelists (#32, #1) by @orieg in #97
- perf: fast in-place immediate growth and lockless single-writer accounting by @orieg in #98
- perf(mutate): guard branch empty and downgrade scans behind child-null checks in remove by @orieg in #99
- docs: update README with Sprint 7/8 benchmark results and landed optimizations by @orieg in #100
- perf(mutate): eliminate recursion in single-threaded mutation and close stock parity gaps (Sprint 9) by @orieg in #101
- perf(trie): close sequential/clustered lookup and random insert gaps by @orieg in #102
- docs(readme): update performance benchmark matrix and landed optimizations for sprint 10 by @orieg in #103
- perf(get,mutate): specialize walk_set_impl and raw tag_byte dispatch for random parity by @orieg in #104
- docs: update README benchmark table and recent optimizations for sprint 11 by @orieg in #105
- feat(docs): modernize architecture visualizer with light/dark theme, responsive DAG, and deep dive cards by @orieg in #107
- perf(leaf): specialize fixed-width leaf operations and direct c_int compat entry points by @orieg in #106
- perf(leaf): vectorize 1-byte leaf search and clean README performance table by @orieg in #108
- perf(get): outperform stock libjudy on random test and inline descent hot paths by @orieg in #111
- perf(alloc): intrusive SlabPage freelist arena for micro-allocations by @orieg in #116
- perf(branch): 16-bit presence bloom filter in BranchHeader and vectorized navigation by @orieg in #117
- perf(alloc): zero-branch RAW_CLASS_TABLE lookup and streamlined freelist pop by @orieg in #119
- perf(mutate): direct BranchL3 digit comparison and tag-specialized locate_fixed by @orieg in #121
- docs: link comparative benchmarks, concurrency, and database subsystem issues by @orieg in #125
- perf(mutate): eliminate branch overhead in descent to beat Stock Judy on random map inserts by @orieg in #126
- docs: update status summary, complete milestone #110, and fix rustdoc links by @orieg in #127
- feat(packaging): multi-architecture dynamic packaging with glibc-hwcaps (x86-64-v2, x86-64-v3, x86-64-v4) by @orieg in #130
- ci(release): automated package publishing, crates.io trusted publishing, and distro packaging by @orieg in #131
- docs: comprehensive release engineering and multi-channel distribution guide by @orieg in #132
- Support 64-bit RISC-V (RV64) by @orieg in #133
- Bench: Add comparative and multithreaded concurrency suites by @orieg in #134
- docs(bench): microarchitecture scaling benchmark matrix (x86-64-v1 vs v2 vs v3 vs v4) by @orieg in #135
- chore(release): bump version to v0.2.0 and expand multi-arch release pipeline by @orieg in #136
- ci(release): automated GitHub Pages APT repository publishing by @orieg in #137
- fix(ci): fix release.yml multiline indentation for Debian control block by @orieg in #138
- ci(release): make crates.io publishing resilient and unblock binary artifact matrix by @orieg in #139
- ci(release): robust archive packaging, debian control printf, and apt dependencies by @orieg in #140
New Contributors
Full Changelog: https://github.com/orieg/expanse/commits/v0.2.0