| Version | Message |
| 2.4.0 |
- NEW FEATURE: Fast ZPP (Zend Parameter Parsing) macros across all methods for improved performance - NEW FEATURE: Native zend_object_handlers (read/write/has/unset_dimension) bypass ArrayAccess overhead - NEW FEATURE: Native C iterators via get_iterator for zero-overhead foreach loops - NEW FEATURE: BITSET set operations -- union(), intersect(), diff(), xor() methods - NEW FEATURE: INT_TO_INT set operations -- union/intersect/diff/xor with left-wins value semantics - NEW FEATURE: slice($start, $end) for efficient range extraction on all array types - NEW FEATURE: JsonSerializable interface -- json_encode() works natively on Judy arrays - NEW FEATURE: __serialize()/__unserialize() for native PHP serialize/unserialize support - NEW FEATURE: Batch operations -- fromArray(), toArray(), putAll(), getAll(), increment() - NEW FEATURE: INT_TO_PACKED type (type 6) -- GC-free opaque value storage via php_var_serialize - NEW FEATURE: STRING_TO_MIXED_HASH type (type 7) -- JudyHS-backed O(1) string-to-mixed map - NEW FEATURE: STRING_TO_INT_HASH type (type 8) -- JudyHS-backed O(1) string-to-int map - NEW FEATURE: STRING_TO_MIXED_ADAPTIVE type (type 9) -- SSO short-string optimization via JudyL - NEW FEATURE: STRING_TO_INT_ADAPTIVE type (type 10) -- SSO for string-to-int - NEW FEATURE: .stub.php arginfo generation replaces hand-written C arginfo - NEW FEATURE: keys(), values() -- native C extraction of keys and values (2-3x faster) - NEW FEATURE: sumValues(), averageValues() -- C-level aggregation for integer-valued types - NEW FEATURE: populationCount(start, end) -- range counting via Judy internal population cache - NEW FEATURE: deleteRange(start, end) -- bulk deletion in a single C pass - NEW FEATURE: equals(Judy other) -- short-circuit identity comparison - NEW FEATURE: C-level forEach(), filter(), map() -- bypass PHP Iterator protocol - NEW FEATURE: String set operations -- union/intersect/diff/xor for STRING_TO_INT and STRING_TO_MIXED types - NEW FEATURE: mergeWith(Judy $other) -- in-place merge for accumulation patterns (avoids union() allocation) - FIX: JudySL hang on Windows x64 -- cJU_MASKATSTATE 0xffL truncation at States 5-8 (issue #46) - FIX: Double-traversal elimination in adaptive types -- removes redundant JLG/JHSG before JLI/JHSI - FIX: hs_array NULL-check in judy_free_array_internal prevents memory leak in adaptive types - PERF: JLG+JLI elimination -- 50% fewer tree traversals in write paths for STRING types - PERF: Branch prediction hints (JUDY_LIKELY/JUDY_UNLIKELY) on hot lookup and validation paths - PERF: LTO and loop unrolling enabled in compiler flags - PERF: Memory layout repacked for cache-line alignment and reduced padding - PERF: Stack safety -- 64KB stack buffers replaced with heap-allocated key_scratch buffer (Fiber-safe) - PERF: foreach iterator overhaul -- valid flag, heap key buffer, zend_string reuse - PERF: tagged-union packed format for INT_TO_PACKED -- eliminates serialize for scalars - PERF: O(1) count() for all types -- counter on every insert/delete replaces O(n) scans - PERF: type-specialized bulk-insert loops in fromArray()/putAll()/__unserialize() - PERF: ecalloc to emalloc on 9 zval allocs; direct judy_free_array_internal in __destruct - IMPROVEMENT: 174 tests covering all features |
| 2.3.0 |
- NEW FEATURE: Windows PECL DLL builds now published with each release (PHP 8.1-8.5, x86/x64, TS/NTS) - NEW FEATURE: PHP 8.5 support added to CI matrix - FIX: PHP 8.1+ compile fix - ZVAL_DUP replaced with ZVAL_COPY throughout - FIX: free_obj memory leak resolved (Judy array, zvals, and iterator state now properly freed) - FIX: BITSET clone bug fixed (was iterating new array instead of source) - FIX: STRING_TO_INT counter no longer overcounts on value overwrite - FIX: E_ERROR replaced with exceptions in constructor and write_dimension - FIX: foreach-by-ref now throws a proper error instead of E_ERROR; fixed emalloc leak - FIX: long->zend_long throughout; JLF() iterator bug fixed; redundant JLG lookups removed - FIX: Removed -march=native and -flto from config.m4 for portability - IMPROVEMENT: CI workflow consolidated; Windows benchmarks added to CI reporting |
| 2.2.0 |
- **BREAKING CHANGE**: Renamed Judy::next() to Judy::searchNext() to resolve Iterator interface conflicts - **NEW FEATURE**: Implemented proper Iterator interface support (rewind, valid, current, key, next methods) - **NEW FEATURE**: Added support for SPL iterators (LimitIterator, FilterIterator, etc.) - **IMPROVEMENT**: Enhanced benchmark examples with accurate memory measurements - **IMPROVEMENT**: Updated BENCHMARK.md with comprehensive design explanations and performance analysis - **IMPROVEMENT**: Added comprehensive benchmark suite with statistical analysis - **IMPROVEMENT**: Fixed iterator performance analysis and methodology - **FIX**: All tests now pass (100% success rate) - **FIX**: Improved memory measurement reliability across different environments - **FIX**: Fixed critical iterator bugs (next, rewind, valid methods) - **DOCUMENTATION**: Added O(log n) vs O(1) complexity explanations - **DOCUMENTATION**: Enhanced benchmark methodology with environment details |
| 2.1.0 |
- Performance improvements for string-keyed arrays through strict key typing (Breaking Change). - Modernized zval handling for better performance and PHP 8+ compatibility. - Fixed test suite to accomodate for strict key typing. |
| 2.0.0 |
- Added compatibility for PHP 8.0 and newer. - Dropped support for PHP versions older than 8.0 (Breaking Change). - Added a comprehensive benchmark suite (`examples/run-benchmarks.php`) to test realistic workloads. - Added a `BENCHMARK.md` file with detailed performance results and recommendations. - Added a `Dockerfile` to provide a consistent development and testing environment. - Updated `README.md` with modern installation instructions and a link to the benchmark results. |
| 1.0.2 |
- Bug fix with count/size, see https://github.com/orieg/php-judy/issues/15 - Add missing test files in package.xml |
| 1.0.1 |
- Fixes for Windows DDL creation - Support for PHP 5.5 - Add support for Travis CI - Update minimum PHP version to 5.3 |
| 1.0.0 | - First stable release based on 0.1.6 beta |
| 0.1.6 |
- Performance improvement from GitHub pull request #10 - Add countable spl interface from GitHub pull request #9 |
| 0.1.5 | - Multiple bug fixes and improvment from GitHub pull request #8 |
| 0.1.4 |
- Bug fix foreach with usigned/signed int, see https://github.com/orieg/php-judy/issues/3 - Bug fix segfault with iterator, see https://github.com/orieg/php-judy/issues/2 - Add new test case + fix some ZVAL refcount |
| 0.1.3 |
- Add PHP 5.4 support - Bug fix count() for STRING_TO_MIXED type, cf. https://github.com/orieg/php-judy/issues/1 |
| 0.1.2 |
- Update examples php code - Fix Mac OS X support - Fix infinite loop with foreach() on Windows |
| 0.1.1 |
- Implement array access and iterator to provide access to judy objects as arrays - Add a judy_type() function and Judy::getType() method - Remove unused methods, refactor and clean-up some code - Proper Windows support |
| 0.0.1 | - Initial PECL release |