ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Издаден release 0.9.0 на библиотеката и кроссплатформената конзолна утилита ZXC (github.com), реализиращи високо ефективно многопоточно асиметрично компресиране без загуби и оптимизирано за игрови ресурси, фърмуер и пакети приложения. Форматът е разработен по принципа 'запиши веднъж, чети многократно' (WORM).

За разлика от кодеци като LZ4, ZXC жертва скоростта на компресиране в името на максимална пропускна способност при декомпресиране.

Заявява се, че скоростта на декомпресиране е с 40%+ по-висока от LZ4 на Apple Silicon, с 25%+ по-висока на Google Axion (ARM64) и с 5%+ по-висока на x86_64, като във всички случаи се осигурява по-висок коефициент на компресия.

В това издание е представено API за многократно използване, възможност за настройка на размерите на блоковете, пълно ръководство за API и ABI, както и няколко поправки, свързани със сигурността, включително отстраняване на уязвимост при преливане на буфера в купчината, открита по време на фразирането на модула за компресиране.

Тази версия съдържа промени, които нарушават ABI, поради което SOVERSION е увеличена до 2.

Проектът е написан на C и се разпространява под лиценз BSD 3.

Подробности
  • Промени, водещи до несъвместимост:
    • SOVERSION 2: Версията на ABI на библиотеката е увеличена. Бинарните файлове, компилирани под SOVERSION 1, трябва да бъдат преработени.
    • Структури на опции: функциите zxc_compress() и zxc_decompress() сега приемат zxc_compress_opts_t* и zxc_decompress_opts_t* вместо позиционни параметри. За поведение по подразбиране предавайте NULL.
    • Кодиране на размера на блока: Заглавието на файла сега съхранява размера на блока в вид на експонента log2 [12..21] вместо предишното кодиране с две скали. Старото значение 64 все още се приема за обратна съвместимост.
  • Нови възможности:
    • Непрозрачни контексти за компресиране и декомпресиране, разпределяни в купчина, които елиминират разходите за разпределяне на памет при всеки повик. Идеално подходящи за файлови системи (squashfs, dwarfs) и пакетна обработка:
      • zxc_create_cctx(), zxc_free_cctx() и zxc_compress_cctx() за компресиране;
      • zxc_create_dctx(), zxc_free_dctx() и zxc_decompress_dctx() за декомпресиране;
      • вътрешните буфери се преразпределят само ако стойността на block_size или level се променя между повикванията.
  • Настройки на размерите на блоковете:
    • размерът на блока сега може да се настройва чрез полето block_size в структурата zxc_compress_opts_t;
    • допустим диапазон: от 4 КБ до 2 МБ (степен на двойка);
    • по подразбиране стойността остава 256 КБ;
    • В конзолната утилита zxc е добавен нов параметър —block-size (или -B) с поддръжка на суфикси за мерни единици (4K, 1M или 4KB, 1MB и т.н.).
  • Бърза пряка декомпресия:
    • когато целевият буфер е достатъчно запълнен, по време на разопаковането се пропуска междинното копие в работния буфер, което намалява натоварването на паметта и съкращава закъснението.
  • Сигурност и стабилност:
    • отстранено е преливането на купчина в zxc_bitpack_stream_32: цикълът на опаковане можеше да запише до 4 байта извън изходния буфер, ако последната опакована стойност пресичаше границата на байта;
    • отстранена е проверката на потока при разопаковане (в zxc_decompress.c): добавена е проверка, гарантираща, че размерът на потока на последователностите е достатъчен за декларираните количества последователности, което предотвратява четене извън допустимия диапазон.
    • проверка на размера на блока: сега в функциите zxc_cctx_init() и zxc_read_file_header() се извършва проверка, че размерите на блоковете са в диапазона [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] и са степени на двойка;
    • съвместимост с C++: всички публични заглавни файлове сега съдържат защитни конструкции extern "C" за безпроблемна употреба в C++;
    • съхраняване на корпус на тестове за фазинг-тестиране: настроено е постоянно хранилище за корпус за ClusterFuzzLite CI.
  • Документация:
    • docs/API.md: нов изчерпателен справочник по API и ABI, в който са описани всичките 21 експортирани символа, определения на типове, стратегия за видимост, версиониране на ABI, гаранции за потокова безопасност и шаблони за обработка на грешки;
    • актуализирани man и файл README с инструкции за инсталиране и информация за статус на пакети (vcpkg, Conan, Homebrew);
    • актуализиран файл docs/FORMAT.md с описание на кодиране на размера на блока на база експонента.
  • Актуализирани обвивки за Python, Rust и Node.js.

Източник: linux.org.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster