Skip to content

Commit 08fc7f7

Browse files
jensensclaude
andcommitted
Update 1.4.0 changelog with all optimization rounds (R1-R4)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent edaf55c commit 08fc7f7

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

CHANGES.md

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
# Changelog
22

3-
## 1.4.0 (2026-02-24)
3+
## 1.4.0 (2026-02-25)
44

55
- Add `decode_zodb_record_for_pg_json()` — converts ZODB pickle records
66
directly to a JSON string entirely in Rust with the GIL released,
77
eliminating the intermediate Python dict + `json.dumps()` step
8-
(1.3x faster full pipeline on real-world data)
8+
- Direct PickleValue → JSON string writer (`json_writer.rs`), bypassing
9+
all `serde_json::Value` intermediate allocations (PG path 1.3-3.3x
10+
faster than dict + `json.dumps()`)
11+
- Direct known-type encoding for datetime, date, time, timedelta, and
12+
Decimal — writes pickle opcodes inline, skipping PickleValue intermediate
13+
- Thread-local buffer reuse for both encode and JSON writer paths
14+
- Thread-local class pickle cache per (module, name) pair — single memcpy
15+
replaces 7 opcode writes for ~99.6% of records
16+
- O(1) `@cls` hash lookup replaces O(n) key scan for marker detection
17+
- Direct i64 LONG1 encoding (eliminates BigInt heap allocation)
918
- Enable thin LTO (`lto = "thin"`) and single codegen unit
10-
(`codegen-units = 1`) in Cargo release profile for 6-9% faster
11-
decode/encode
19+
(`codegen-units = 1`) in release profile
20+
- Profile-guided optimization (PGO) support with real FileStorage +
21+
synthetic data profiling (adds 5-15%)
22+
23+
### Performance (PGO build, vs CPython pickle)
24+
25+
- Encode: 1.7-9.2x faster (synthetic), 3-5x faster (real FileStorage)
26+
- Decode: 1.0-2.3x faster (synthetic), near parity on real-world data
27+
- PG JSON path: 1.4x faster at median on 1,692 real ZODB records
28+
- Full codec overhead: ~28 µs per object (both directions)
1229

1330
## 1.3.0 (2026-02-24)
1431

0 commit comments

Comments
 (0)