Välja on antud 0.9.0 teek ja platvormideülene konsooli utiliit ZXC (github.com), mis rakendavad kõrge jõudlusega mitme lõime asümmeetrilist kokkutõmbumist ilma kaota ja optimeeritud mänguressursside, püsivarade ja rakenduste pakettide jaoks. Formaadi põhimõte on "korraga kirjutada, korduvalt lugeda" (WORM).
Erinevalt kodeerimistest nagu LZ4, loob ZXC kokkuvoldimisel maksimaalse läbilaskevõime taastamise arvelt kiirusest.
Deklaritud on, et lahtipakkimise kiirus on 40%+ kõrgem kui LZ4 Apple Siliconil, 25%+ kõrgem Google Axionil (ARM64) ja 5%+ kõrgem x86_64-l, samas tagades igas olukorras kõrgema kokkutõmbumisteguri.
Selles väljaandes on esitletud API korduvkasutatava konteksti, plokkide suuruse kohandamise võimalus, täielik API ja ABI dokumentatsioon ning mitmed turvaparandused, sealhulgas purunemismudeli viimase etapi hälbimine, mis tuvastati kokkutõmbumise mooduli fuzzerimise käigus.
See väljaanne sisaldab ABI vea muutusi, seega on SOVERSION tõusnud 2-ni.
Projekt on kirjutatud keeles C ja jagatakse BSD 3 litsentsi alusel.
Üksikasjad
- Üksikasjalikud muutused:
- SOVERSION 2: Teegi ABI versioon on tõusnud. SOVERSION 1 all kompileeritud binaarfailid tuleb uuesti kompileerida.
- Valikustruktuurid: funktsioonid zxc_compress() ja zxc_decompress() aktsepteerivad nüüd zxc_compress_opts_t* ja zxc_decompress_opts_t* positsiooniliste parameetrite asemel. Vaikimisi käitumise tagamiseks edastage NULL.
- Ploki suuruse kodeerimine: faili pealkiri salvestab nüüd ploki suuruse log2 [12..21] eksponentsina, mitte varasemate kahe skaalaga kodeeringuna. Endine väärtus 64 on endiselt heaks kiidetud tagurpidi ühilduvuse jaoks.
- Uued võimalused:
- Kokkuvolditud ja lahtipakitud kontekstid, mis eraldatakse mäluhaldusest, mis kaotab mälu eraldamise kulu iga kutse jaoks; ideaalsed failisüsteemi pluginate (squashfs, dwarfs) ja partiide töötlemiseks:
- zxc_create_cctx(), zxc_free_cctx() ja zxc_compress_cctx() kokkutõmbumise jaoks;
- zxc_create_dctx(), zxc_free_dctx() ja zxc_decompress_dctx() lahtipakkumise jaoks;
- sisemised puhvried jaotatakse ümber ainult juhul, kui kutsete vahel muudetakse block_size või level väärtust.
- Kokkuvolditud ja lahtipakitud kontekstid, mis eraldatakse mäluhaldusest, mis kaotab mälu eraldamise kulu iga kutse jaoks; ideaalsed failisüsteemi pluginate (squashfs, dwarfs) ja partiide töötlemiseks:
- Kohandatavad ploki suurused:
- ploki suurust saab nüüd kohandada zxc_compress_opts_t struktuuri block_size väljade kaudu;
- lubatud vahemik: 4 KB kuni 2 MB (kahe astme);
- vaikimisi väärtus jääb 256 KB-ks;
- konsoolirakendusse zxc on lisatud uus parameeter —block-size (või -B), mis toetab mõõtühikute suffikse (4K, 1M või 4KB, 1MB jne).
- Kiire otse dekompressioon:
- kui sihiku puhvrisse on piisavalt täidetud, vahele jätkub vahekopimine tööläbisest, vähendades mälukoormust ja lühemaks viivitust.
- Turvalisus ja stabiilsus:
- korrektne hunniku puhvri ületäitumine zxc_bitpack_stream_32: pakkimisring võib kirjutada kuni 4 baiti väljaspool väljundpuhvrit, kui viimane pakendatud väärtus ületas byte'i piiri;
- korrektselt kontrollitud voolu dekompressioonil (zxc_decompress.c): lisatud kontroll, mis tagab, et järjestuste voolu suurus on piisav deklareeritud järjestuste arvu jaoks, mis takistab ülekande lugemist lubatust kaugemale.
- bloki suuruse kontroll: nüüd on funktsioonides zxc_cctx_init() ja zxc_read_file_header() kontroll, et plokkide suurused on vahemikus [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] ja need on kahe astmed;
- C++ ühilduvus: kõik avalikud pealkirjade failid sisaldavad nüüd kaitsestruktuure extern "C" probleemideta kasutamiseks C++-s;
- testide korpuse salvestamine fuzz-testi jaoks: seadistatud püsiv salvestus korpus ClusterFuzzLite CI jaoks.
- Dokumentatsioon:
- docs/API.md: uus põhjalik API ja ABI käsiraamat, kus on kirjeldatud kõik 21 eksporditud sümbolit, tüüpide määratlemise, nähtavuse strateegia, ABI versioonimine, lõike turvalisuse garantiid ja veahaldusmallid;
- man ja README faili on värskendatud installimisjuhiste ja pakettide (vcpkg, Conan, Homebrew) staatuse teabega;
- fail on värskendatud docs/FORMAT.md ploki suuruse kodeerimise kirjeldus eksponentsiaalsel alusel.
- Python, Rust ja Node.js umbrohujad on värskendatud.
Allikas: linux.org.ru
