Login  |  Packages  |  Support  |  Bugs

Return

Changelog for Judy
Release What has changed?
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

Return

PRIVACY POLICY  |  CREDITS
Copyright © 2001-2026 The PHP Group
All rights reserved.
Last updated: Wed Sep 03 10:50:24 2025 UTC
Bandwidth and hardware provided by: pair Networks