Skip to content

chore: release v0.6.4#98

Merged
MagicalTux merged 1 commit into
masterfrom
release-plz-2026-06-15T10-22-24Z
Jun 15, 2026
Merged

chore: release v0.6.4#98
MagicalTux merged 1 commit into
masterfrom
release-plz-2026-06-15T10-22-24Z

Conversation

@MagicalTux

@MagicalTux MagicalTux commented Jun 15, 2026

Copy link
Copy Markdown
Member

🤖 New release

  • compcol: 0.6.3 -> 0.6.4 (✓ API compatible changes)
Changelog

0.6.4 - 2026-06-15

Fixed

  • (cli) drain decoder's internal block buffer before finish

Other

  • changelog for CLI decode-drain fix
  • changelog for iterative optimal brotli parse
  • (enc) enable optimal parse at q9 (2 passes)
  • (enc) cargo fmt encoder_optimal
  • (enc) price ring-reuse short codes for explicit DP matches
  • (enc) iterative zopfli-style optimal parse at q10/q11
  • changelog for round-2 ratio + speed work
  • (enc) cross-block matching + two-pass statistics-driven optimal parse
  • (enc) single-pass scan-and-shift move-to-front
  • tighten encode/decode hot loops
  • (enc) replace prefix-doubling rotation sort with SA-IS
  • test linked-block cross-boundary references and cross-tool decode
  • implement frame linked-block mode (cross-block match window)
  • emit continue-dict chunks; feed uncompressed chunks to the dict
  • continuous cross-chunk dictionary in the shared chunk encoder

Fixed

  • (cli) compcol -d no longer truncates highly-compressible large inputs.
    The streaming decode loop stopped once the compressed input was consumed,
    leaving output a block-buffering decoder (notably bzip2) still held
    internally — finish does not flush it, so compcol -t bzip2 -d cut output
    at 64 KiB. A drain loop now pulls the decoder's buffered output before
    finishing. (Library decoders were already correct; this was CLI-only.)

Added

  • (brotli enc) iterative, statistics-driven optimal LZ77 parse
    (zopfli-style forward DP) at quality 9–11. The cost model is rebuilt from
    the previous pass's command/literal/distance histograms each round;
    candidate matches are precomputed once and shared across passes. Improves
    the max-quality ratio on the 2.9 MB corpus from 707558 to 669632 bytes
    (1.473 → 1.394 vs brotli -q 11) and q9 from 709198 to 680156, with
    reference cross-decode verified.

Performance

  • Round 2 of encoder ratio + codec speed work (encoder-only for ratio;
    decoders unchanged and every format still decodes byte-for-byte with its
    reference tool). Ratios on a 2.9 MB real-source corpus, our max level vs the
    reference's max (ours/ref, lower is better):

    • xz / lzma2: 1.51 → 1.10 — the LZMA2 chunk encoder now keeps the LZ
      dictionary continuous across chunks (emits 0xC0 continue-dict control
      bytes after the first 0xE0, with a single match-finder spanning the whole
      input) instead of resetting every 64 KiB. Closes nearly all of the gap to
      the .lzma path (1.07). Also fixes the raw-LZMA2 decoder to feed
      uncompressed (stored) chunks into the dictionary.
    • zstd: 1.40 → 1.04 vs zstd -19 at max level (now beats zstd -12)
      — cross-block matching over a retained sliding window (≤8 MiB, within the
      advertised window) plus a two-pass, statistics-driven optimal parse
      (btultra2-style repricing) and repeat-offset-aware DP pricing.
    • lz4: 1.18 → 1.02 (frame, -l 12 beats lz4 -9) — implemented LZ4
      frame block-linked mode so matches reference up to 64 KiB of prior
      blocks' output, not just the current block.
  • Standalone-codec encode throughput (output byte-identical):

    • bwt encode ~3× faster — replaced the prefix-doubling rotation sort with
      linear-time SA-IS suffix-array construction.
    • mtf encode ~2.3× faster (single-pass scan-and-shift); rangecoder
      encode/decode ~+15% (tightened hot loops).

    Note: the xz/lzma2 and zstd encoders now buffer the whole input to drive a
    single continuous match-finder (same memory profile the .lzma path already
    had); higher levels trade encode time for ratio, decode speed is unchanged.


This PR was generated with release-plz.

@MagicalTux MagicalTux force-pushed the release-plz-2026-06-15T10-22-24Z branch from 480645a to ca4e3b0 Compare June 15, 2026 11:44
@MagicalTux MagicalTux merged commit 1a22c80 into master Jun 15, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant