Ka bëhet lansimi i versionit 0.9.0 të bibliotekës dhe utilitarit konsolë shumëplatformësh. ZXC (github.com), duke implementuar një shumëprerje me performancë të lartë kompresim asimetrik pa humbje dhe i optimizuar për burimet e lojërave, firmware dhe paketat e aplikacioneve. Formati është zhvilluar mbi parimin 'shkruaj një herë, lexoj shumë herë' (WORM).
Në krahasim me kodekët si LZ4, ZXC sakrifikon shpejtësinë e kompresimit për maksimalizimin e kapacitetit gjatë shpërbërjes.
Shpejtësia e shkarkimit deklarohet të jetë mbi 40% më e lartë se LZ4 në Apple Silicon, mbi 25% më e lartë në Google Axion (ARM64) dhe mbi 5% më e lartë në x86_64, ndërkohë që në të gjitha rastet ofrohet një raport më i lartë kompresimi.
Në këtë version është prezantuar një API për kontekstin e përsëritur, mundësia për të personalizuar madhësinë e blloqeve, një manual i plotë referencë për API dhe ABI, si dhe disa rregullime të lidhura me sigurinë, përfshirë eliminimin e një vulnerabiliteti të mbushjes së tamponit në heap, i zbuluar gjatë fazzimit të modulit të kompresimit.
Ky lëshim përmban ndryshime që shkelin ABI, prandaj SOVERSION është rritur në 2.
Projekti është shkruar në gjuhën C dhe shpërndahet nën licencën BSD 3.
Detajet
- Ndryshime që çojnë në moskompatibilitet:
- SOVERSION 2: Versioni ABI i bibliotekës është rritur. Skedarët binarë të kompiluar për SOVERSION 1 duhet të ripërpunohen.
- Strukturat e opsioneve: funksionet zxc_compress() dhe zxc_decompress() tani pranojnë zxc_compress_opts_t* dhe zxc_decompress_opts_t* në vend të parametrave pozicionalë. Për sjelljen e parazgjedhur, dërgoni NULL.
- Kodimi i madhësisë së bllokut: Kreu i skedarit tani ruan madhësinë e bllokut në formën e eksponencës log2 [12..21] në vend të kodimit të mëparshëm me dy shkallë. Vlera e vjetër 64 akoma pranohet për shkak të përputhshmërisë mbrapa.
- Mundësi të reja:
- Kontekste të pandriçueshme të kompresimit dhe dekompresimit, të alokuara në heap, të cilat eliminonin ngarkesat e alokimit të memories gjatë çdo thirrjeje; ideale për pluginet e sistemit të skedarëve (squashfs, dwarfs) dhe për përpunim me grupe:
- zxc_create_cctx(), zxc_free_cctx() dhe zxc_compress_cctx() për kompresim;
- zxc_create_dctx(), zxc_free_dctx() dhe zxc_decompress_dctx() për dekompresim;
- Bufrat e brendshëm rishpërndahen vetëm nëse vlera e block_size ose level ndërron midis thirrjeve.
- Kontekste të pandriçueshme të kompresimit dhe dekompresimit, të alokuara në heap, të cilat eliminonin ngarkesat e alokimit të memories gjatë çdo thirrjeje; ideale për pluginet e sistemit të skedarëve (squashfs, dwarfs) dhe për përpunim me grupe:
- Madhësi të personalizueshme të bllokut:
- madhësia e bllokut tani mund të personalizohet me fushën block_size në strukturën zxc_compress_opts_t;
- ndërmjetësi i pranueshëm: nga 4 KB deri në 2 MB (shpërndarje e dyfishtë);
- vlera parazgjedhur mbetet 256 KB;
- NjĂ« parametr i ri Ă«shtĂ« shtuar nĂ« utilitarin konsolĂ« zxc âblock-size (ose -B) me mbĂ«shtetje pĂ«r sufixet e njĂ«sive tĂ« masĂ«s (4K, 1M ose 4KB, 1MB etj.).
- Dekompresim i shpejtë dhe të drejtpërdrejtë:
- kur bufferi i destinacionit është mjaft i mbushur, gjatë dekompresimit kalohen kopjet ndërmjetëse në bufferin në punë, që lejon uljen e ngarkesës së memories dhe shkurtimin e vonesës.
- Siguria dhe stabiliteti:
- është rregulluar mbushja e tamponit të heaps në zxc_bitpack_stream_32: cikli i kompresimit mund të shkruajë deri në 4 byte jashtë bufferit të daljes, nëse vlera e fundit e kompresuar kalonte kufirin e byte-it;
- është rregulluar kontrolli i rrjedhës gjatë dekompresimit (në zxc_decompress.c): është shtuar një kontroll që siguron se madhësia e rrjedhës së sekuencave është e mjaftueshme për numrin e deklaruar të sekuencave, duke parandaluar leximin përtej kufijve të lejuar.
- kontrolli i madhësisë së bllokut: tani në funksionet zxc_cctx_init() dhe zxc_read_file_header() kryhet këqyrja që madhësitë e bllokut janë brenda intervalit [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] dhe janë fuqitë e dyta;
- kompatibilitet me C++: të gjitha skedarët e titullit publik tani përmbajnë struktura mbrojtëse extern "C" për përdorim pa probleme në C++;
- ruajtja e korpusit të testeve për testimin e fazzimit: është konfiguruar një ruajtje e përhershme e corpusit për ClusterFuzzLite CI.
- Dokumentacioni:
- docs/API.md: një doracak i ri gjithëpërfshirës për API dhe ABI, i cili përshkruan të gjithë 21 simbolet e eksportuara, definicionet e tipeve, strategjinë e dukshmërisë, versionizimin e ABI, garancitë e sigurisë së rrjedhave dhe modelet e përpunimit të gabimeve;
- janë rishikuar man dhe skedari README me udhëzime për instalim dhe informacion mbi statusin e paketave (vcpkg, Conan, Homebrew);
- është përmirësuar skedari docs/FORMAT.md me përshkrimin e kodimit të madhësisë së bllokut në bazë të eksponencës.
- Janë përmirësuar mbështetësit për Python, Rust dhe Node.js.
Burimi: linux.org.ru
