ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

Бостоялся выпуск 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ