Versioni 0.9.0 i bibliotekës dhe i programit të konsolës ndërplatformë është publikuar. ZXC (github.com), duke zbatuar shumëfiletë me performancë të lartë kompresim asimetrik Pa humbje dhe i optimizuar për asete lojërash, firmware dhe paketa aplikacionesh. Formati është projektuar duke përdorur parimin "shkruaj një herë, lexo shumë" (WORM).
Ndryshe nga kodekët si LZ4, ZXC sakrifikon shpejtësinë e kompresimit për rendiment maksimal gjatë dekompresimit.
Shpejtësia e dekompresimit është deklaruar 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ërsa në të gjitha rastet ofrohet një raport më i lartë kompresimi.
Ky version prezanton një API konteksti të ripërdorshëm, mundësinë për të personalizuar madhësitë e blloqeve, një udhëzues të plotë referimi për API dhe ABI, si dhe disa rregullime që lidhen me sigurinë, duke përfshirë një rregullim për një dobësi të mbingarkesës së buffer-it të bazuar në heap të zbuluar gjatë fuzzimit të modulit të kompresimit.
Ky version përmban ndryshime që prishin ABI-n, kështu që SOVERSION është rritur në 2.
Projekti është shkruar në C dhe shpërndahet sipas licencës BSD 3.
Detalet
- Ndryshimet që çojnë në papajtueshmëri:
- SOVERSION 2: Versioni ABI i bibliotekës është rritur. Skedarët binare të kompiluar për SOVERSION 1 duhet të rikompilohen.
- Strukturat e opsioneve: Funksionet zxc_compress() dhe zxc_decompress() tani pranojnë parametrat zxc_compress_opts_t* dhe zxc_decompress_opts_t* në vend të atyre pozicionale. Për sjelljen e parazgjedhur, kaloni NULL.
- Kodimi i madhësisë së bllokut: Titulli i skedarit tani e ruan madhësinë e bllokut si një eksponent log2 [12..21] në vend të kodimit të mëparshëm me dy shkallë. Vlera e vjetër prej 64 pranohet ende për pajtueshmëri të prapambetur.
- Karakteristika të reja:
- Kontekste të opake të kompresimit dhe dekompresimit të alokuara në grumbull që eliminojnë mbingarkesën e alokimit të memories në secilën thirrje; ideale për shtojcat e sistemit të skedarëve (squashfs, dwarfs) dhe përpunimin në grup:
- 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 dekompresion;
- Buferat e brendshëm rialokohen vetëm nëse vlera e block_size ose level ndryshon midis thirrjeve.
- Kontekste të opake të kompresimit dhe dekompresimit të alokuara në grumbull që eliminojnë mbingarkesën e alokimit të memories në secilën thirrje; ideale për shtojcat e sistemit të skedarëve (squashfs, dwarfs) dhe përpunimin në grup:
- Madhësi të personalizueshme të blloqeve:
- Madhësia e bllokut tani mund të konfigurohet duke përdorur fushën block_size në strukturën zxc_compress_opts_t;
- Diapazoni i pranueshëm: 4 KB deri në 2 MB (fuqia e dyshit);
- si parazgjedhje vlera mbetet 256 KB;
- Një parametër i ri --block-size (ose -B) është shtuar në programin e konsolës zxc, duke mbështetur prapashtesat e njësive (4K, 1M ose 4KB, 1MB, etj.).
- Dekompresim i shpejtë i drejtpërdrejtë:
- Kur buferi i destinacionit është mjaftueshëm i mbushur, dekompresimi anashkalon kopjen e ndërmjetme në buferin e punës, gjë që zvogëlon ngarkesën e memories dhe shkurton vonesën.
- Siguria dhe stabiliteti:
- U rregullua tejmbushja e bufferit të heap-it në zxc_bitpack_stream_32: cikli i paketimit mund të shkruante deri në 4 bajt përtej fundit të buffer-it të daljes nëse vlera e fundit e paketuar kalonte një kufi bajtesh;
- U rregullua kontrolli i rrjedhës gjatë dekompresimit (në zxc_decompress.c): U shtua një kontroll për të siguruar që madhësia e rrjedhës së sekuencës është e mjaftueshme për numrin e deklaruar të sekuencave, duke parandaluar leximin jashtë diapazonit të lejuar.
- Kontroll i madhësisë së bllokut: zxc_cctx_init() dhe zxc_read_file_header() tani kontrollojnë që madhësitë e blloqeve janë në diapazonin [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] dhe që ato janë fuqi të dyshit;
- Pajtueshmëria me C++: Të gjitha skedarët publikë të kokës tani përmbajnë konstrukte mbrojtëse të jashtme "C" për përdorim të përsosur në C++;
- Testimi i ruajtjes së korpusit për testimin fuzz: ruajtja persistente e korpusit është konfiguruar për ClusterFuzzLite CI.
- Records:
- docs/API.mdNjë referencë e re gjithëpërfshirëse për API dhe ABI që përshkruan të 21 simbolet e eksportuara, përkufizimet e tipit, strategjinë e dukshmërisë, versionimin e ABI-t, garancitë e sigurisë së fijeve dhe modelet e trajtimit të gabimeve;
- skedari man dhe README i përditësuar me udhëzime instalimi dhe informacion në lidhje me statusin e paketave (vcpkg, Conan, Homebrew);
- skedari u përditësua dokumente/FORMAT.md me një përshkrim të kodimit të madhësisë së bllokut të bazuar në eksponent.
- Mbështjellësit për Python, Rust dhe Node.js janë përditësuar.
Burimi: linux.org.ru
