ZXC 0.13.0 и 0.13.1

14 и 15 июля, после почти месяца разработки, состоялись выпуски 0.13.0 и 0.13.1 SIMD-оптимизированной библиотеки и кроссплатформенной консольной утилиты ZXC (github.com), реализующих высокопроизводительное многопоточное асимметричное сжатие без потерь и оптимизированное для игровых ресурсов, прошивок и пакетов приложений. Формат разработан по принципу «один раз записать, многократно читать» (WORM).
В отличие от таких кодеков, как LZ4, ZXC жертвует скоростью сжатия ради максимальной пропускной способности при распаковке.
Декларируется скорость распаковки на 9–48% выше, чем у LZ4 с уровнем компрессии по умолчанию, с равным или более высоким коэффициентом сжатия.
Главное изменение этих версий — новый уровень сжатия 7 (ультра) с использованием сравнительно недавно опубликованным SIMD-оптимизированным алгоритмом PivCo-Huffman («pivot-coded Huffman») (репозиторий), который позволяет превысить коэффициент сжатия zstd (-1), при этом скорость декодирования остаётся примерно в 2 раза выше, чем у zstd. Энтропийное декодирование было переработано, что позволило увеличить её скорость на уровне 6 на 5–13% на всех эталонных процессорах.
Формат контейнера обновлён до версии 7 и это последнее запланированное изменение формата. Версия 0.13 является последним этапом перед выпуском версии 1.0, в которой формат контейнера ZXC будет зафиксирован, что обеспечит его стабильность и обратную совместимость.
Проект написан на языке C и распространяется по лицензии BSD 3.
Другие изменения:
- декомпрессия теперь может выполняться в одном буфере: сжатые входные данные располагаются в правой части буфера и декодируются слева направо в пределах одного выделенного блока памяти, что позволяет снизить пиковые затраты памяти в интеграциях с жесткими ограничениями по объему памяти;
- кеширование словаря дерева Хаффмана: общая таблица литералов словаря декодируется в готовое к использованию дерево один раз — во время присоединения, а не для каждого блока, что значительно ускорило декодирование словаря с мелкими блоками;
- повышение отказоустойчивости и усовершенствование механизмов управления памятью во всей библиотеке;
- улучшения консольной утилиты
zxc: индикатор прогресса, более надёжный анализ аргументов и усовершенствованная обработка ввода-вывода файлов; - значительные улучшения врапперов (Go, NodeJS, Python, Rust и WASM);
- улучшена документация;
- исправлены ошибки.
>>> Подробности на GitHub
