Repository navigation
release: 2.8.0 - #226
release: 2.8.0#226
Conversation
discipline: passedBase
|
Test Results
Benchmark Results
Run Status
Memory (Linux, PHP 8.6)Peak RSS of a child process building one structure, n = 500,000, minus an empty-process floor. Judy's memory advantage is type- and scale-dependent — see BENCHMARK.md for the curve across sizes on a dedicated host.
API Speedups (Linux, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
Core Types (Linux, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
All types detailCore Types (Linux, PHP 8.6) — AllSpeedup = PHP time / Judy time. Bold = Judy faster.
Cross-version detail (Linux)Core Types — LinuxEach cell: Judy ms (speedup vs PHP array).
API — Linux
Cross-version detail (Windows)Core Types — WindowsEach cell: Judy ms (speedup vs PHP array).
API — Windows
Windows results (PHP 8.6)Memory (Windows, PHP 8.6)Peak RSS of a child process building one structure, n = 500,000, minus an empty-process floor. Judy's memory advantage is type- and scale-dependent — see BENCHMARK.md for the curve across sizes on a dedicated host.
API Speedups (Windows, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
Core Types (Windows, PHP 8.6)Speedup = PHP time / Judy time. Bold = Judy faster.
All types detailCore Types (Windows, PHP 8.6) — AllSpeedup = PHP time / Judy time. Bold = Judy faster.
Release Comparison (2.6.0 → 2.8.0)
Summary: 0 regressions, 90 unchanged, 10 not evaluated (unstable)
10 benchmarks not evaluated (within-arm scatter exceeded the effect being claimed)
Memory ComparisonMemory: 0 regressions, 10 unchanged
Full benchmark outputLinux — PHP 8.6Windows — PHP 8.6 |
Summary
Prepare the 2.8.0 release: bump the version files in lockstep and record the
notes. Follows the same shape as the 2.7.1 (#199) and 2.7.0 (#195) release
commits — only
php_judy.handpackage.xmlchange.php_judy.hPHP_JUDY_VERSION2.7.1→2.8.0package.xml<date>→2026-10-08;<release>/<api>→2.8.0; new<notes>; 2.7.1 notes moved into<changelog>as the top entryWhat 2.8.0 ships (unreleased since v2.7.1)
Craftsmanship hardening sprint (#217), fixing several memory-safety defects and
tightening behavior:
$j[] = ...on a string-keyed array (incl.STRING_TO_ENTRY) no longer crashes; the append guard enumerates all seven string-keyed types.forEach()/filter()/map()onSTRING_TO_ENTRYread values through the entry accessor instead of reinterpreting a cache-entry struct as azval;equals()gained a matching ENTRY branch.set()rejects keys longer than the 64 KB key buffer before taking a slot (heap overflow);deleteRange()on string-keyed ENTRY arrays now frees the struct and its value reference instead of leaking both.STRING_TO_ENTRYvalues are hidden from reads/traversals whilecount()/size()stay raw-counter O(1) untilpruneExpired();mergeWith()copies TTL/flags verbatim;get_gc()collects stored ENTRY values.TypeErrorinstead of silently coercing to a wrong-range read.__unserialize()validates type, payload shape andoptimizeIterationstrictly before touching the object, so a malformed payload throws without destroying an already-populated array, and an out-of-range type throws instead of emitting anE_WARNING(fix(serialize): strict validation in __unserialize() rejection paths #225).Release-ceremony checklist
php_judy.hversion bumped (step 1)package.xmlversion/date/notes + previous notes moved to<changelog>(step 2)php_judy.handpackage.xmlboth2.8.0);xmllintcleanBENCHMARK.mdstamps reviewed (left at their Craftsmanship hardening sprint: security, resilience, coverage, CI gate, docs #217-reconciled, honest state — see PR discussion)Base is
origin/main@57df19c, whose main CI run is success.