- Stability - Declared the existing public API stable for the first major release.
- Breaking - Raised the minimum supported versions to Elixir 1.14 and OTP 25.
- Performance - Reduced overhead in bit-array set operations, atomics membership checks, and packed-counter access.
- Fix - Added explicit validation and errors for malformed atomics serialization payloads.
- Tests - Added property-based coverage for bitmasks, atomics operations and serialization, and packed counters.
- Documentation - Updated installation instructions, package metadata, Erlang documentation links, and the 64-bit bitmask contract.
- Feature - Added fast atomics resetting via
Abit.clear/1andAbit.Counter.clear/1. - Feature - Added bit toggling via
Abit.toggle_bit_at/2andAbit.Bitmask.toggle_bit_at/2. - Feature - Added the missing set operations:
Abit.difference/2,Abit.symmetric_difference/2, andAbit.invert/1. - Deprecation - Deprecated Abit.merge/2 in favor of
Abit.union/2to align with standard set theory terminology.
- Feature - Added
Abit.Atomics.serialize/1andAbit.Atomics.deserialize/1.
- Fix - Fixed a compile warning caused by using
^^^/2inAbit.Counter.
- Fix - Restored compatibility with Elixir 1.7 by avoiding
Kernel.floor/1andKernel.ceil/1.
- BREAKING - Removed
Abit.Matrixand extracted it to matrax.
- Feature - Implemented the
Enumerableprotocol forAbit.Counter.
- Feature - Added
add/3,exchange/3,compare_exchange/4,min/1,max/1, and other functions toAbit.Matrix. - Feature - Implemented the
Enumerableprotocol forAbit.Matrix. - Feature - Added
Abit.Bitmask.to_list/2. - Feature - Added
Abit.to_list/1.
- Feature - Added
Abit.Matrixfor working with atomics as an M x N matrix.
- Performance - Improved the performance of functions in
AbitandAbit.Bitmask.
- BREAKING - Renamed
set_bit/3toset_bit_at/3for consistency with theAbit.BitmaskAPI.
- BREAKING - Added the
wrap_aroundoption. Wraparound is now disabled by default. - BREAKING - Replaced the custom signed and unsigned integer matching with the built-in implementation. Signed integers now wrap around as they do in Elixir.
- BREAKING - Changed the return value of
put/3andadd/3to{:ok, {index, final_value}}, or{:error, :value_out_of_bounds}whenwrap_aroundisfalseand the value is out of bounds.