سي آي | مستقر | يطور |
---|---|---|
إجراءات جيثب | ||
عامل الكود | ||
OSS-Fuzz | ||
كوديكوف |
مكتبة ضغط البيانات zlib لأنظمة الجيل القادم
تمت صيانته بواسطة Hans Kristian Rosbach المعروف أيضًا باسم Dead2 (zlib-ng àt Circlestorm dót org)
كان الدافع وراء هذا الانقسام هو رؤية العديد من مساهمات الجهات الخارجية مع تحسينات جديدة لم يتم تنفيذها في مستودع zlib الرسمي.
لقد قام مارك أدلر بصيانة 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
وبدلاً من ذلك، يمكنك استخدام أداة تكوين واجهة المستخدم الرسومية cmake ccmake:
ccmake .
لإنشاء zlib-ng باستخدام البرنامج النصي لتكوين bash:
./configure
make
make test
CMake | تكوين | وصف | تقصير |
---|---|---|---|
ZLIB_COMPAT | --zlib-متوافق | ترجمة باستخدام واجهة برمجة التطبيقات المتوافقة مع zlib | عن |
ZLIB_ENABLE_TESTS | بناء ثنائيات الاختبار | على | |
مع_GZFILEOP | --without-gzfileops | ترجمة مع دعم الوظائف المتعلقة بـ gzFile | على |
مع_OPTIM | --بدون تحسينات | البناء مع التحسينات | على |
مع_NEW_STRATEGIES | --بدون استراتيجيات جديدة | استخدم استراتيجيات جديدة | على |
مع_NATIVE_INSTRUCTIONS | يتم تجميعه مع مجموعة التعليمات الكاملة المدعومة على هذا المضيف (gcc/clang -march=native) | عن | |
مع_RUNTIME_CPU_DETECTION | يجمع مع الكشف عن وحدة المعالجة المركزية في وقت التشغيل | على | |
مع_المطهر | البناء باستخدام المطهر (الذاكرة، العنوان، غير محدد) | عن | |
مع_GTEST | بناء gtest_zlib | على | |
مع_FUZZERS | بناء اختبار/زغب | عن | |
مع_المقاييس | بناء الاختبار/المعايير | عن | |
مع_MAINTAINER_WARNINGS | البناء مع تحذيرات مشرف المشروع | عن | |
مع_CODE_COVERAGE | تمكين الإبلاغ عن تغطية التعليمات البرمجية | عن |
تحذير: لا ننصح بالتثبيت يدويًا إلا إذا كنت تعرف حقًا ما تفعله، لأن هذا من المحتمل أن يتجاوز مكتبة zlib الافتراضية للنظام، وأي عدم توافق أو تكوين خاطئ لـ zlib-ng يمكن أن يجعل النظام بأكمله غير قابل للاستخدام، مما يتطلب الاسترداد أو إعادة التثبيت. إذا كنت لا تزال ترغب في التثبيت اليدوي، نوصي باستخدام بادئة المسار /opt/.
بالنسبة لتوزيعات Linux، هناك طريقة بديلة لاستخدام 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. المساعدة في اختبار ومراجعة طلبات السحب وما إلى ذلك هي أيضًا موضع تقدير كبير.
يرجى مراجعة الويكي لمزيد من المعلومات: المساهمة
شكرًا جزيلاً لجميع الأشخاص والشركات الذين خصصوا وقتًا للمساهمة في مراجعات التعليمات البرمجية و/أو الاختبارات و/أو التصحيحات. لم يكن Zlib-ng ليكون جيدًا بدونك.
تم تعريف تنسيق الانكماش الذي يستخدمه zlib بواسطة Phil Katz.
تمت كتابة مواصفات الانكماش والزليب بواسطة L. Peter Deutsch.
تم إنشاء zlib في الأصل بواسطة جان لوب جيلي (الضغط) ومارك أدلر (إزالة الضغط).
CMake | تكوين | وصف | تقصير |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | تخطي التحقق من وقت التشغيل لتعليمات SSE2 (يتم تشغيله دائمًا لـ x86_64) | إيقاف (x86) |
مع_AVX2 | البناء باستخدام جوهر AVX2 | على | |
مع_AVX512 | البناء باستخدام جوهر AVX512 | على | |
مع_AVX512VNNI | قم بالتصميم باستخدام جوهر AVX512VNNI | على | |
مع_SSE2 | البناء باستخدام جوهر SSE2 | على | |
مع_SSSE3 | البناء باستخدام جوهرية SSSE3 | على | |
مع_SSE42 | البناء باستخدام جوهر SSE42 | على | |
مع_PCLMULQDQ | البناء باستخدام جوهرية PCLMULQDQ | على | |
مع_VPCLMULQDQ | --بدون-vpclmulqdq | البناء باستخدام جوهر VPCLMULQDQ | على |
مع_ACLE | --بدون عقل | البناء باستخدام جوهر ACLE | على |
مع_نيون | --بدون نيون | البناء باستخدام جوهر النيون | على |
مع_ARMV6 | --بدون-armv6 | البناء باستخدام جوهريات ARMv6 | على |
مع_ALTIVEC | --بدون ألتيفيك | البناء باستخدام مكونات AltiVec (VMX). | على |
مع_القوة8 | --بدون طاقة8 | البناء باستخدام تحسينات POWER8 | على |
مع_RVV | البناء باستخدام جوهر RVV | على | |
مع_CRC32_VX | --بدون-crc32-vx | البناء باستخدام CRC32 المتجه على IBM Z | على |
مع_DFLTCC_DEFLATE | --with-dfltcc-deflate | البناء باستخدام جوهر DFLTCC للضغط على IBM Z | عن |
مع_DFLTCC_INFLATE | --with-dfltcc-تضخيم | البناء باستخدام جوهر DFLTCC لإزالة الضغط على IBM Z | عن |
مع_UNALIGNED | --بدون محاذاة | السماح بالتحسينات التي تستخدم القراءات غير المحاذاة إذا كانت آمنة على القوس الحالي | على |
مع_INFLATE_STRICT | تم البناء مع فحص صارم لمسافة النفخ | عن | |
مع_INFLATE_ALLOW_INVALID_DIST | بناء بدون تعبئة لتضخيم المسافات غير الصالحة | عن | |
INSTALL_UTILS | انسخ minigzip وminideflate أثناء التثبيت | عن | |
ZLIBNG_ENABLE_TESTS | اختبار واجهة برمجة التطبيقات الخاصة بـ zlib-ng | على |