@@ -4,8 +4,52 @@ Release notes for C-Blosc2
44Changes from 2.23.1 to 3.0.0-rc.1
55=================================
66
7- * Fixed several safety issues in the core library, as well as in ndcell/ndlz plugins.
8- Thanks to Trail of Bits (in collaboration with Anthropic).
7+ * This release introduces support for variable-length chunks and variable-length
8+ blocks, which is the main reason for the major version bump.
9+
10+ Until now, a schunk/frame generally assumed that all chunks shared the same
11+ logical chunk size, and regular Blosc2 chunks assumed fixed-size internal blocks
12+ (except for the last remainder block). In 3.0.0-rc.1, schunks can switch to
13+ variable chunk sizes when needed, and there is also a new chunk layout for
14+ variable-length blocks (VL-blocks), where each block can carry a different
15+ uncompressed size inside the same chunk.
16+
17+ This is especially useful for workloads made of naturally variable-size pieces
18+ of data, like strings, records, JSON fragments, or other irregular payloads
19+ that previously had to be padded, split awkwardly, or stored as independent
20+ chunks. The new layout keeps these pieces grouped together while still making
21+ them individually recoverable.
22+
23+ Together with this, there are new public APIs for VL-block chunks:
24+ ` blosc2_vlcompress_ctx() ` , ` blosc2_vldecompress_ctx() ` ,
25+ ` blosc2_vlchunk_get_nblocks() ` , ` blosc2_vldecompress_block_ctx() ` , and
26+ ` blosc2_schunk_get_vlblock() ` . Lazy loading also works with VL-block chunks,
27+ so individual blocks can be fetched on demand without materializing the whole
28+ chunk first.
29+
30+ * The chunk and cframe formats have been extended to represent variable chunk
31+ sizes, VL-block chunks, and dictionary usage more explicitly. Forward
32+ compatibility checks were tightened as part of this work, and regular chunks
33+ keep their previous stable format version while VL-block chunks use a new one.
34+
35+ * Dictionary compression has been expanded and improved:
36+ ` use_dict ` now works with LZ4 and LZ4HC in addition to ZSTD, the dictionary
37+ state is preserved correctly across chunk compression/decompression, and the
38+ frame metadata now round-trips the dictionary setting. There is also a new
39+ minimum useful dictionary threshold to avoid training or using dictionaries
40+ that are too small to help.
41+
42+ * The necessary changes for accommodating all these improvements have been fully
43+ documented in README_CHUNK_FORMAT.md and README_CFRAME_FORMAT.md. Again,
44+ care has been taken to ensure that the chunk and frame formats are backward
45+ compatible with previous versions of C-Blosc2.
46+
47+ * Fixed several safety issues in the core library, as well as in ndcell/ndlz
48+ plugins. Thanks to Trail of Bits (in collaboration with Anthropic).
49+
50+ * Additional compatibility and portability fixes include better protection
51+ against unsupported future chunk/frame versions and proper VSX shuffle support
52+ detection on big-endian ppc64. Thanks to @AutoJanitor for these.
953
1054
1155Changes from 2.23.0 to 2.23.1
0 commit comments