Version 0.9.0 av biblioteket och plattformsoberoende konsolverktyg har slÀppts ZXC (github.com), som implementerar högpresterande flermodulÀr asymmetrisk komprimering utan förlust och optimerad för spelresurser, firmware och programpaket. Formatet har utvecklats enligt principen "skriv en gÄng, lÀs flera gÄnger" (WORM).
Till skillnad frÄn codecs som LZ4 prioriterar ZXC högsta nedladdningshastighet framför komprimeringshastighet.
Det deklareras att uppackningshastigheten Àr över 40% högre Àn LZ4 pÄ Apple Silicon, över 25% högre pÄ Google Axion (ARM64) och över 5% högre pÄ x86_64, med en högre komprimeringsgrad i alla fall.
Denna version innehÄller ett API för ÄteranvÀndbara sammanhang, möjlighet att konfigurera blockstorlekar, en fullstÀndig referenshandbok för API och ABI, samt flera sÀkerhetsfixar, inklusive ÄtgÀrdande av en buffertöverskridningssÄrbarhet som upptÀckts i samband med fuzzing av komprimeringsmodulen.
Denna release innehÄller förÀndringar som bryter ABI, sÄ SOVERSION har ökat till 2.
Projektet Àr skrivet i C och distribueras under BSD 3-licensen.
Detaljer
- Ăndringar som leder till inkompatibilitet:
- SOVERSION 2: ABI-versionen av biblioteket har ökat. BinÀrfiler som kompilerats för SOVERSION 1 mÄste kompileras om.
- Alternativs strukturer: funktionerna zxc_compress() och zxc_decompress() accepterar nu zxc_compress_opts_t* och zxc_decompress_opts_t* istÀllet för positionsparametrar. För standardbeteende, skicka NULL.
- Blockstorlekskodning: Filhuvudet lagrar nu blockstorleken som en exponent log2 [12..21] istÀllet för den tidigare kodningen med tvÄ skalor. Det gamla vÀrdet 64 accepteras fortfarande för bakÄtkompatibilitet.
- Nya funktioner:
- Ogenomskinliga komprimerings- och dekomprimeringskontexter som allokeras pÄ heapen, vilket eliminerar overhead av minnesallokering vid varje anrop; idealiska för filsystemplugin (squashfs, dwarfs) och batchbehandling:
- zxc_create_cctx(), zxc_free_cctx() och zxc_compress_cctx() för komprimering;
- zxc_create_dctx(), zxc_free_dctx() och zxc_decompress_dctx() för dekomprimering;
- interna buffertar omfördelas endast om block_size eller level förÀndras mellan anrop.
- Ogenomskinliga komprimerings- och dekomprimeringskontexter som allokeras pÄ heapen, vilket eliminerar overhead av minnesallokering vid varje anrop; idealiska för filsystemplugin (squashfs, dwarfs) och batchbehandling:
- Anpassningsbara blockstorlekar:
- Blockstorleken kan nu justeras med hjÀlp av block_size-fÀltet i strukturen zxc_compress_opts_t;
- tillÄtet intervall: frÄn 4 KB till 2 MB (potens av tvÄ);
- standardeinstÀllningen förblir 256 KB;
- ett nytt parameter har lagts till konsolverktyget zxc âblock-size (eller -B) med stöd för enhetssuffix (4K, 1M eller 4KB, 1MB och sĂ„ vidare).
- Snabb direkt dekomprimering:
- nÀr destinationsbufferten Àr tillrÀckligt fylld, hoppar man över mellanlagring i arbetsbufferten under dekomprimering, vilket minskar minnesbelastningen och förkortar latensen.
- SĂ€kerhet och stabilitet:
- à tgÀrdat överflödet i zxc_bitpack_stream_32: packningsloopen kunde skriva upp till 4 byte utanför utdata-bufferten om det sista packade vÀrdet översteg bytegrÀnsen;
- à tgÀrdad strömkontroll vid dekomprimering (i zxc_decompress.c): en kontroll har lagts till för att sÀkerstÀlla att storleken pÄ sekvensströmmen Àr tillrÀcklig för det angivna antalet sekvenser, vilket förhindrar lÀsning utanför det tillÄtna intervallet.
- Blockstorlekskontroll: nu utförs en kontroll i funktionerna zxc_cctx_init() och zxc_read_file_header() för att sÀkerstÀlla att blockstorlekarna ligger inom intervallet [ZXC_BLOCK_SIZE_MIN, ZXC_BLOCK_SIZE_MAX] och att de Àr tvÄpotenser;
- Kompatibilitet med C++: alla offentliga header-filer innehÄller nu extern "C" skyddskommandon för smidig anvÀndning i C++;
- Lagring av testfall för fuzzing-testning: en permanent lagring av testfall har stÀllts in för ClusterFuzzLite CI.
- Dokumentation:
- docs/API.md: en ny utförlig API- och ABI-guide som beskriver alla 21 exporterade symboler, typdefinitioner, synlighetsstrategi, ABI-versionering, trÄd-sÀkerhetsgarantier och felhanteringsmönster;
- Man-sidan och README-filen har uppdaterats med installationsinstruktioner och information om paketens status (vcpkg, Conan, Homebrew);
- Filen har uppdaterats docs/FORMAT.md med en beskrivning av blockstorlekens kodning baserat pÄ exponent.
- Wrapper-filerna för Python, Rust och Node.js har uppdaterats.
KĂ€lla: linux.org.ru
