ZXC 0.9.0

ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0 ZXC 0.9.0

A avut loc lansarea versiunii 0.9.0 a bibliotecii și a utilitarului de consolă multiplatformă ZXC (github.com), care implementează un sistem multi-threaded de înaltă performanță de compresie asimetrică fără pierderi și optimizat pentru resursele de jocuri, firmware și pachete de aplicații. Formatul a fost dezvoltat pe principiul „scrie o dată, citește de mai multe ori” (WORM).

Spre deosebire de codec-uri precum LZ4, ZXC sacrifică viteza de compresie în favoarea unei lățimi de bandă maxime la decompresie.

Se declară o viteză de decomprimare cu 40%+ mai mare decât LZ4 pe Apple Silicon, cu 25%+ mai mare pe Google Axion (ARM64) și cu 5%+ mai mare pe x86_64, asigurându-se în toate cazurile un coeficient de compresie mai mare.

În această lansare este prezentat API-ul pentru contextul reutilizabil, capacitatea de a configura dimensiunea blocurilor, un ghid de referință complet pentru API și ABI, precum și câteva corecții de securitate, inclusiv remedierea unei vulnerabilități de overflow în heap, descoperită în timpul fuzzing-ului modulului de compresie.

Această versiune conține modificări care întrerup ABI-ul, astfel că SOVERSION a fost crescut la 2.

Proiectul este scris în C și este distribuit sub licența BSD 3.

Detalii
  • Modificările care conduc la incompatibilitate:
    • SOVERSION 2: Versiunea ABI a bibliotecii a fost crescută. Fișierele binare compilate pentru SOVERSION 1 trebuie să fie recompilate.
    • Structuri de opțiuni: funcțiile zxc_compress() și zxc_decompress() acum acceptă zxc_compress_opts_t* și zxc_decompress_opts_t* în loc de parametrii poziționali. Pentru comportamentul implicit, transmiteți NULL.
    • Codificarea dimensiunii blocului: Antetul fișierului acum stochează dimensiunea blocului sub formă de exponent log2 [12..21] în loc de codificarea anterioară cu două scale. Vechea valoare 64 este în continuare acceptată pentru compatibilitate inversă.
  • Funcționalități noi:
    • Contexturi de compresie și decomprimare opace, alocate în heap, care elimină costurile de alocare a memoriei la fiecare apel; ideale pentru pluginuri de sistem de fișiere (squashfs, dwarfs) și procesare în lot:
      • zxc_create_cctx(), zxc_free_cctx() și zxc_compress_cctx() pentru compresie;
      • zxc_create_dctx(), zxc_free_dctx() și zxc_decompress_dctx() pentru decomprimare;
      • buferele interne sunt realocate doar dacă valoarea block_size sau level se schimbă între apeluri.
  • Dimensiuni de bloc personalizabile:
    • dimensiunea blocului poate fi acum configurată folosind câmpul block_size din structura zxc_compress_opts_t;
    • interval permis: de la 4 KB la 2 MB (puterea lui doi);
    • implicit, valoarea rămâne 256 KB;
    • utilitarului de consolă zxc i-a fost adăugat un nou parametru —block-size (sau -B) cu suport pentru sufixe de unități de măsură (4K, 1M sau 4KB, 1MB etc.).
  • Decomprimare rapidă directă:
    • atunci când bufferul de destinație este suficient de plin, în timpul decomprimalării se ocolește copierea intermediară în bufferul de lucru, ceea ce reduce sarcina pe memorie și scade latența.
  • Securitate și stabilitate:
    • corectată depășirea buffer-ului în zxc_bitpack_stream_32: ciclul de ambalare putea scrie până la 4 octeți dincolo de buffer-ul de ieșire, dacă ultima valoare ambalată depășea limita unui octet;
    • corectată verificarea fluxului în timpul desfășurării (în zxc_decompress.c): a fost adăugată o verificare care garantează că dimensiunea fluxului de secvențe este suficientă pentru numărul declarat de secvențe, ceea ce previne citirea dincolo de intervalul permis.
    • verificarea dimensiunii blocului: acum în funcțiile zxc_cctx_init() și zxc_read_file_header() se efectuează o verificare că dimensiunile blocurilor se află în intervalul [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] și sunt puteri ale lui doi;
    • compatibilitate cu C++: toate fișierele de antet publice conțin acum construcții de protecție extern "C" pentru utilizare fără probleme în C++;
    • stocarea corpusului testelor pentru teste fuzzing: este configurată o stocare permanentă a corpusului pentru CI ClusterFuzzLite.
  • Documentație:
    • docs/API.md: un nou ghid cuprinzător pentru API și ABI, care descrie toate cele 21 de simboluri exportate, definiții de tipuri, strategia de vizibilitate, versiunea ABI, garanții de siguranță pentru fire și șabloane pentru gestionarea erorilor;
    • actualizate man și fișierul README cu instrucțiuni de instalare și informații despre starea pachetelor (vcpkg, Conan, Homebrew);
    • fișierul a fost actualizat docs/FORMAT.md cu descrierea codificării dimensiunii blocului bazată pe exponenți.
  • Actualizați wrapper-ele pentru Python, Rust și Node.js.

Sursa: linux.org.ru

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster