The format is based on Keep a Changelog
- Initial commit.
- Migrated logic from ti-yong.
- Introduced High-Level API: Added poly/assoc and poly/dissoc functions using simple keywords (e.g., :get, :assoc) for easier customization of common behaviors.
- Added examples-high-level.md and updated documentation.
- Implemented specialized internal types (PolyMap+...) to significantly speed up baseline assoc and get operations by reducing runtime dispatch overhead.
- Optimized poly-map constructor, especially when called via apply, bringing performance close to native hash-map.
- Improved transient batch assoc! performance to be nearly on par with native transients.
- Improved persistent! performance, though it remains an area with overhead compared to native maps.
- Clojure Benchmark changes:
- Read Existing Key
- Read Missing Key
- Write (Update Existing Key)
- Reduce (Sum Val)
- Construct (into)
- Construct (apply)
- Simple assoc (Baseline Poly)
- Simple assoc (Logging Poly)
- assoc New Key (Baseline Poly)
- assoc New Key (Validated Poly)
- Batch assoc! (Baseline Poly)
- Batch assoc! (Logging Poly)
- persistent! Cost
- Contended Update
- ClojureScript Benchmark changes:
- Read Existing Key (Large Map)
- Read Missing Key
- Write (Update Existing Key - Large Map)
- Reduce (Sum Values - Large Map)
- -2.6% regression (still faster than vanilla
hash-map
s here though)
- Simple assoc (Baseline Poly - Small)
- Simple assoc (Logging Poly - Small)
- assoc New Key (Baseline Poly - Large)
- assoc New Key (Validated Poly - Large)
- Batch assoc! (Baseline Poly)
- persistent! Cost
- Using repo/git workflow from https://bogoyavlensky.com/blog/build-and-publish-clojure-lib-with-slim/
- Will migrate commands to
bb
tasks in a future release.