È disponibile il rilascio della libreria zlib-ng 2.0, contrassegnato come primo rilascio stabile del progetto (subito dopo è disponibile il rilascio correttivo 2.0.1). Zlib-ng è compatibile con zlib a livello API, ma offre ottimizzazioni aggiuntive non incluse nel repository ufficiale di zlib a causa di un approccio conservativo nell'accettazione delle modifiche. Inoltre, è stata proposta un'API modernizzata, basata su zlib, ma modificata per semplificare il porting. Il codice del progetto è scritto in C e viene distribuito sotto licenza Zlib.
I test condotti su sistemi x86_64 hanno dimostrato che, durante le operazioni di compressione, Zlib-ng è circa 4 volte più veloce di zlib e 2,1 volte più veloce di gzip. Durante lo scompattamento, Zlib-ng è circa 2,4 volte più veloce di zlib e 1,8 volte più veloce di gzip. Un significativo aumento delle prestazioni nella compressione/scompattamento è stato ottenuto principalmente grazie all'uso di istruzioni vettoriali SSE*, AVX2, VSX e Neon.
È stata aggiunta, tra l'altro, l'implementazione dell'algoritmo di calcolo dei checksum Adler32, ottimizzata mediante istruzioni SSSE3, AVX2, Neon e VSX, l'implementazione di CRC32-B basata su PCLMULQDQ e ACLE, tabelle hash migliorate, l'implementazione dell'hash Slide basata su SSE2, AVX2, Neon e VSX, e operazioni di confronto basate su SSE4.2 e AVX2. Sono state incluse anche modifiche mirate a migliorare le prestazioni utilizzate nei fork dalle aziende Intel e Cloudflare. È stato ottimizzato il processo di gestione dei buffer. È stato aggiunto il supporto per i sistemi di build CMake e NMake. Sono stati utilizzati sistemi di integrazione continua per i test.
Oltre alle ottimizzazioni, in Zlib-ng sono stati inclusi i patch accumulati nei pacchetti di distribuzione e il codice è stato ripulito dalle soluzioni di bypass utilizzate in zlib per supportare vecchi compilatori e piattaforme, che ostacolavano l'implementazione di metodi più efficaci (ad esempio, le limitazioni necessarie per supportare sistemi a 16 bit e compilatori non compatibili con ANSI C). È stato svolto un lavoro per identificare e correggere errori rilevati da analizzatori statici, sistemi di test fuzzing e strumenti per rilevare problemi di gestione della memoria (AddressSanitizer e MemorySanitizer).
Fonte: opennet.ru
