ซีไอ | มั่นคง | พัฒนา |
---|---|---|
การดำเนินการ GitHub | ||
รหัสปัจจัย | ||
OSS-ฟัซ | ||
โคเดคอฟ |
ไลบรารีการบีบอัดข้อมูล zlib สำหรับระบบรุ่นต่อไป
ดูแลโดย Hans Kristian Rosbach หรือที่รู้จักในชื่อ Dead2 (zlib-ng àt circlestorm dót org)
แรงจูงใจสำหรับการแยกนี้คือการเห็นการมีส่วนร่วมของบุคคลที่สามหลายครั้งพร้อมการเพิ่มประสิทธิภาพใหม่ที่ไม่ได้นำไปใช้กับพื้นที่เก็บข้อมูล zlib อย่างเป็นทางการ
Mark Adler ดูแล zlib มาเป็นเวลานานแล้ว และเขาได้ทำงานที่ยอดเยี่ยมและหวังว่าเขาจะดำเนินต่อไปอีกนาน แนวคิดของ zlib-ng ไม่ใช่การแทนที่ zlib แต่เพื่อให้อยู่ร่วมกันเป็นการแทนที่แบบดรอปอินโดยมีเกณฑ์ที่ต่ำกว่าสำหรับการเปลี่ยนแปลงโค้ด
zlib มีประวัติอันยาวนานและพกพาได้อย่างไม่น่าเชื่อ แม้กระทั่งรองรับระบบต่างๆ มากมายที่เริ่มมีอินเทอร์เน็ต
เยี่ยมมาก แต่อาจทำให้การพัฒนาและบำรุงรักษาเพิ่มเติมมีความซับซ้อนได้ รหัส zlib มีวิธีแก้ไขปัญหามากมายสำหรับคอมไพเลอร์เก่าๆ หรือเพื่อรองรับระบบที่มีข้อจำกัด เช่น การทำงานในสภาพแวดล้อม 16 บิต
วิธีแก้ปัญหาหลายอย่างเหล่านี้เป็นเพียงภาระในการบำรุงรักษาเท่านั้น แต่บางวิธีก็ค่อนข้างจะต้องใช้โค้ดจำนวนมาก เนื่องจากมีวิธีแก้ปัญหาหลายอย่างที่เกะกะทั่วทั้งโค้ด จึงทำให้ยากขึ้นสำหรับโปรแกรมเมอร์ใหม่ที่มีแนวคิด/ความสนใจที่ zlib จะมีส่วนร่วม
ฉันตัดสินใจแยกทาง รวมการเพิ่มประสิทธิภาพของ Intel ทั้งหมด การเพิ่มประสิทธิภาพ Cloudflare บางส่วน และแพตช์เล็กๆ อื่นๆ อีกสองสามรายการ จากนั้นเริ่มทำความสะอาดวิธีแก้ปัญหา โค้ดที่ไม่ทำงานต่างๆ โค้ดที่สนับสนุนทั้งหมดและโค้ดตัวอย่าง
ผลลัพธ์ที่ได้คือประสิทธิภาพที่ดีขึ้นและง่ายต่อการบำรุงรักษา zlib-ng
zlib-ng มีการปรับปรุงมากมายตั้งแต่เริ่มต้น และผู้คนและบริษัทจำนวนมากได้มีส่วนร่วมในการปรับปรุงทั้งเล็กและใหญ่ หรือการทดสอบที่มีคุณค่า
โปรดอ่าน LICENSE.md มันเรียบง่ายและเสรีนิยมมาก
มีสองวิธีในการสร้าง zlib-ng:
ในการสร้าง zlib-ng โดยใช้ตัวสร้าง makefile ข้ามแพลตฟอร์ม cmake
cmake .
cmake --build . --config Release
ctest --verbose -C Release
หรือคุณสามารถใช้เครื่องมือ GUI การกำหนดค่า cmake ccmake:
ccmake .
หากต้องการสร้าง zlib-ng โดยใช้สคริปต์กำหนดค่า bash:
./configure
make
make test
ซีเมค | กำหนดค่า | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | คอมไพล์ด้วย API ที่เข้ากันได้กับ zlib | ปิด |
ZLIB_ENABLE_TESTS | สร้างไบนารีทดสอบ | บน | |
WITH_GZFILEOP | --ไม่มี-gzfileops | คอมไพล์พร้อมรองรับฟังก์ชันที่เกี่ยวข้องกับ gzFile | บน |
WITH_OPTIM | --ไม่มีการเพิ่มประสิทธิภาพ | สร้างด้วยการเพิ่มประสิทธิภาพ | บน |
WITH_NEW_STRATEGIES | --ไม่มี-กลยุทธ์ใหม่ | ใช้กลยุทธ์ใหม่ | บน |
WITH_NATIVE_คำแนะนำ | คอมไพล์พร้อมชุดคำสั่งแบบเต็มที่รองรับบนโฮสต์นี้ (gcc/clang -march=native) | ปิด | |
WITH_RUNTIME_CPU_DETECTION | คอมไพล์ด้วยการตรวจจับ CPU รันไทม์ | บน | |
WITH_SANITIZER | สร้างด้วยน้ำยาฆ่าเชื้อ (หน่วยความจำ ที่อยู่ ไม่ได้กำหนด) | ปิด | |
WITH_GTEST | สร้าง gtest_zlib | บน | |
WITH_FUZZERS | สร้างการทดสอบ/คลุมเครือ | ปิด | |
WITH_BENCHMARKS | สร้างการทดสอบ/เกณฑ์มาตรฐาน | ปิด | |
WITH_MAINAINER_WARNINGS | สร้างโดยมีคำเตือนผู้ดูแลโครงการ | ปิด | |
WITH_CODE_COVERAGE | เปิดใช้งานการรายงานการครอบคลุมโค้ด | ปิด |
คำเตือน: เราไม่แนะนำให้ติดตั้งด้วยตนเอง เว้นแต่คุณจะรู้จริงๆ ว่าคุณกำลังทำอะไรอยู่ เนื่องจากอาจแทนที่ไลบรารี zlib เริ่มต้นของระบบได้ และความไม่เข้ากันหรือการกำหนดค่า zlib-ng ที่ไม่ถูกต้องอาจทำให้ทั้งระบบใช้งานไม่ได้ โดยต้องมีการกู้คืนหรือติดตั้งใหม่ หากคุณยังคงต้องการติดตั้งด้วยตนเอง เราขอแนะนำให้ใช้คำนำหน้า /opt/ path
สำหรับ Linux distros อีกวิธีหนึ่งในการใช้ zlib-ng (หากคอมไพล์ในโหมด zlib-compat) แทน zlib คือการใช้ตัวแปรสภาพแวดล้อม LD_PRELOAD หากโปรแกรมเชื่อมโยงแบบไดนามิกกับ zlib โปรแกรมจะพยายามใช้ zlib-ng แทนชั่วคราว โดยไม่เสี่ยงต่อความไม่เสถียรทั้งระบบ
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
วิธีติดตั้ง zlib-ng ทั้งระบบโดยใช้ cmake:
cmake --build . --target install
หากต้องการติดตั้ง zlib-ng ทั้งระบบโดยใช้สคริปต์กำหนดค่า:
make install
หลังจากสร้างด้วย cmake แล้ว สามารถสร้างแพ็คเกจการติดตั้งได้โดยใช้ cpack ตามค่าเริ่มต้น แพ็คเกจ tgz จะถูกสร้างขึ้น แต่คุณสามารถผนวก -G
ต่อท้ายแต่ละคำสั่งเพื่อสร้างประเภทแพ็คเกจทางเลือก (TGZ, ZIP, RPM, DEB) หากต้องการสร้างแพ็คเกจ rpm หรือ deb อย่างง่ายดาย คุณจะต้องใช้ -G RPM
หรือ -G DEB
ตามลำดับ
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
หรือคุณสามารถสร้างและติดตั้ง zlib-ng โดยใช้ตัวจัดการการพึ่งพา vcpkg:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # "./bootstrap-vcpkg.bat" for powershell
./vcpkg integrate install
./vcpkg install zlib-ng
พอร์ต zlib-ng ใน vcpkg ได้รับการปรับปรุงให้ทันสมัยโดยสมาชิกทีม Microsoft และผู้ร่วมให้ข้อมูลในชุมชน หากเวอร์ชันล้าสมัย โปรดสร้างปัญหาหรือดึงคำขอบนที่เก็บ vcpkg
Zlib-ng ตั้งเป้าที่จะเปิดให้มีส่วนร่วม และเรายินดีอย่างยิ่งที่ได้รับคำขอดึงข้อมูลบน GitHub ความช่วยเหลือในการทดสอบและตรวจสอบคำขอดึง ฯลฯ ก็ได้รับการชื่นชมอย่างมากเช่นกัน
โปรดตรวจสอบ Wiki สำหรับข้อมูลเพิ่มเติม: การสนับสนุน
ขอขอบคุณบุคคลและบริษัททุกคนที่สละเวลาในการตรวจสอบโค้ด การทดสอบ และ/หรือแพตช์ Zlib-ng คงไม่ดีเท่านี้หากไม่มีคุณ
รูปแบบการยุบที่ใช้โดย zlib ถูกกำหนดโดย Phil Katz
ข้อมูลจำเพาะของ deflate และ zlib เขียนโดย L. Peter Deutsch
zlib ถูกสร้างขึ้นโดย Jean-loup Gailly (การบีบอัด) และ Mark Adler (การบีบอัด)
ซีเมค | กำหนดค่า | คำอธิบาย | ค่าเริ่มต้น |
---|---|---|---|
FORCE_SSE2 | --บังคับ-sse2 | ข้ามการตรวจสอบรันไทม์สำหรับคำแนะนำ SSE2 (เปิดเสมอสำหรับ x86_64) | ปิด (x86) |
WITH_AVX2 | สร้างด้วย AVX2 ภายใน | บน | |
WITH_AVX512 | สร้างด้วย AVX512 ภายใน | บน | |
WITH_AVX512VNNI | สร้างด้วย AVX512VNNI ภายใน | บน | |
WITH_SSE2 | สร้างด้วยข้อมูลภายใน SSE2 | บน | |
WITH_SSSE3 | สร้างด้วย SSSE3 ภายใน | บน | |
WITH_SSE42 | สร้างด้วยข้อมูลภายใน SSE42 | บน | |
WITH_PCLMULQDQ | สร้างด้วย PCLMULQDQ ภายใน | บน | |
WITH_VPCLMULQDQ | --ไม่มี-vpclmuqdq | สร้างด้วย VPCLMULQDQ ภายใน | บน |
WITH_ACLE | --ไม่มีความฉลาด | สร้างด้วยข้อมูลภายในของ ACLE | บน |
WITH_นีออน | --ไม่มี-นีออน | สร้างด้วยธาตุแท้ของนีออน | บน |
WITH_ARMV6 | --ไม่มี-armv6 | สร้างด้วย ARMv6 ภายใน | บน |
WITH_ALTIVEC | --ไม่มี-altivec | สร้างด้วยข้อมูลภายใน AltiVec (VMX) | บน |
WITH_POWER8 | --ไม่มี-อำนาจ8 | สร้างด้วยการเพิ่มประสิทธิภาพ POWER8 | บน |
WITH_RVV | สร้างด้วยคุณสมบัติที่แท้จริงของ RVV | บน | |
WITH_CRC32_VX | --ไม่มี-crc32-vx | สร้างด้วย vectorized CRC32 บน IBM Z | บน |
WITH_DFLTCC_DEFLATE | --with-dfltcc-deflate | สร้างด้วยข้อมูลภายใน DFLTCC สำหรับการบีบอัดบน IBM Z | ปิด |
WITH_DFLTCC_INFLATE | --with-dfltcc-พอง | สร้างด้วยข้อมูลภายในของ DFLTCC สำหรับการขยายการบีบอัดบน IBM Z | ปิด |
WITH_UNALIGNED | --ไม่มี-ไม่ตรง | อนุญาตการเพิ่มประสิทธิภาพที่ใช้การอ่านที่ไม่สอดคล้องกันหากปลอดภัยบนส่วนโค้งปัจจุบัน | บน |
WITH_INFLATE_STRICT | สร้างด้วยการตรวจสอบระยะเติมลมอย่างเข้มงวด | ปิด | |
WITH_INFLATE_ALLOW_INVALID_DIST | สร้างโดยเติมศูนย์สำหรับระยะทางที่ไม่ถูกต้อง | ปิด | |
INSTALL_UTILS | คัดลอก minigzip และ minideflate ระหว่างการติดตั้ง | ปิด | |
ZLIBNG_ENABLE_TESTS | ทดสอบ API เฉพาะของ zlib-ng | บน |