Changelog
View Source0.7.1
Changed
- Bumped
foildependency from0.1.3to0.1.4(CI/infrastructure refresh;error/0type tightened; macro-based DRY refactor with no perf change). - Bumped
metaldependency from0.1.1to0.1.2(CI/infrastructure refresh; onesystem_continue/3spec fix fromoktono_return()).
No source changes in shackle itself. Behaviour, API, and benchmarks are identical to 0.7.0.
0.7.0
Breaking
- Minimum supported Erlang/OTP version is now 25. OTP 21–24 are no longer tested and the compatibility code paths for those releases have been removed.
Changed
Replaced the
granderldependency withknot(in-house C NIF using wyrand).shackle_utils:random/1now callsknot:uniform/1— same signature, same range guarantees, no behavioural difference at call sites.granderl 0.1.5on hex.pm fails to build on OTP 27+ (itspreamble.shinvokeserl -noshell -s init stop -eval ...with options in an order that causes the node to terminate before-evalruns, leavingERTS_INCLUDE_DIRempty); the fix exists in granderl's master but its hex package is not under our ownership, so we couldn't release a fix.knotis a tiny C NIF (~80 LOC) that builds correctly on every supported OTP and matches hand-written C dispatch overhead. Benchmarks (Apple Silicon, OTP 29, 10M iterations ofuniform(254), median of 5 runs):conc rand:uniform/1 granderl:uniform/1 knot:uniform/1 1 34 ns 13 ns 12 ns 8 9 ns 7 ns 3.3 ns 32 6 ns 8 ns 3.2 ns 128 6 ns 8.5 ns 3.1 ns CI matrix now covers OTP 25, 26, 27, and 28;
actions/checkoutupgraded to v5.telemetrydependency bumped from 1.2.1 to 1.4.2.README documents the full set of telemetry events shackle emits and their measurement shapes.
Removed
ATOMICS,DECENTRALIZED_COUNTERS,ETS_TAKE, andSSL_HANDSHAKEplatform_define macros.OTP_RELEASEifdef block inshackle_internal.hrland the associated pre-OTP-21 logger / stacktrace fallbacks.shackle_utils:info_msg/3andshackle_utils:warning_msg/3.- ETS-based fallback path in
shackle_status(the persistent_term + counters path is now unconditional).
0.6.20
See git history for details.