folly
؟Folly (المختصرة بشكل فضفاض بعد Facebook Open Source Library) هي مكتبة مكونة من مكونات C++ 17 مصممة مع أخذ التطبيق العملي والكفاءة في الاعتبار. يحتوي Folly على مجموعة متنوعة من مكونات المكتبة الأساسية المستخدمة على نطاق واسع في Facebook . على وجه الخصوص، غالبًا ما يكون ذلك اعتمادًا على جهود Facebook الأخرى مفتوحة المصدر في C++ والمكان الذي يمكن لهذه المشاريع فيه مشاركة التعليمات البرمجية.
إنه يكمل (على عكس المنافسة) عروض مثل Boost وبالطبع std
. في الواقع، نحن لا نبدأ في تحديد المكون الخاص بنا إلا عندما يكون الشيء الذي نحتاجه غير متوفر، أو لا يلبي ملف تعريف الأداء المطلوب. نحن نسعى لإزالة الأشياء من الحماقة إذا أو عندما عفا عليها std
أو Boost.
تتخلل المخاوف المتعلقة بالأداء الكثير من الحماقة، مما يؤدي في بعض الأحيان إلى تصميمات أكثر خصوصية مما قد تكون عليه بطريقة أخرى (انظر على سبيل المثال PackedSyncPtr.h
و SmallLocks.h
). الأداء الجيد على نطاق واسع هو موضوع موحد في كل الحماقة.
الحماقة عبارة عن مجموعة من المكونات المستقلة نسبيًا، بعضها بسيط مثل بعض الرموز. لا يوجد أي قيود على التبعيات الداخلية، مما يعني أن وحدة فولي معينة قد تستخدم أي مكونات فولي أخرى.
يتم تعريف جميع الرموز في مساحة الاسم ذات المستوى الأعلى folly
، باستثناء وحدات الماكرو بالطبع. أسماء الماكرو هي ALL_UPPERCASE ويجب أن تكون مسبوقة بـ FOLLY_
. تحدد folly
مساحة الاسم مساحات أسماء داخلية أخرى مثل internal
أو detail
. يجب ألا يعتمد رمز المستخدم على الرموز الموجودة في مساحات الأسماء تلك.
يحتوي Folly على دليل experimental
أيضًا. يشير هذا التعيين في المقام الأول إلى أننا نشعر أن واجهة برمجة التطبيقات (API) قد تتغير بشكل كبير بمرور الوقت. هذا الرمز، عادةً، لا يزال قيد الاستخدام بكثافة وتم اختباره جيدًا.
في المستوى الأعلى، يستخدم الحماقة نظام "التأتأة" الكلاسيكي folly/folly
الذي يستخدمه Boost وآخرون. يعمل الدليل الأول كجذر تثبيت للمكتبة (مع إمكانية إصدار إصدار la folly-1.0/
)، والثاني هو لتمييز المكتبة عند تضمين الملفات، على سبيل المثال #include <folly/FBString.h>
.
بنية الدليل مسطحة (تقليد بنية مساحة الاسم)، أي ليس لدينا تسلسل هرمي مفصل للدليل (من الممكن أن يتغير هذا في الإصدارات المستقبلية). يحتوي الدليل الفرعي experimental
على ملفات يتم استخدامها داخل Folly وربما في Facebook ولكنها لا تعتبر مستقرة بدرجة كافية لاستخدام العميل. يجب ألا يستخدم الكود الخاص بك الملفات بطريقة folly/experimental
خشية أن تنكسر عند تحديث الحماقة.
يتضمن الدليل الفرعي folly/folly/test
اختبارات الوحدات لجميع المكونات، والتي تسمى عادة ComponentXyzTest.cpp
لكل ComponentXyz.*
. يحتوي دليل folly/folly/docs
على الوثائق.
نظرًا لبنية Folly المسطحة إلى حد ما، فإن أفضل طريقة لمعرفة ما بداخلها هي النظر إلى الرؤوس الموجودة في دليل المستوى الأعلى folly/
. يمكنك أيضًا التحقق من مجلد docs
بحثًا عن الوثائق، بدءًا من النظرة العامة.
تم نشر الحماقة على GitHub على https://github.com/facebook/folly.
نظرًا لأن Folly لا توفر أي ضمانات لتوافق ABI من الالتزام إلى الالتزام، فإننا نوصي عمومًا ببناء Folly كمكتبة ثابتة.
يدعم الحماقة دول مجلس التعاون الخليجي (5.1+) أو clang أو MSVC. يجب أن يعمل على Linux (x86-32 وx86-64 وARM) وiOS وmacOS وWindows (x86-64). يتم اختبار بنية CMake فقط على بعض هذه الأنظمة الأساسية؛ على الأقل، نهدف إلى دعم نظامي التشغيل macOS وLinux (في أحدث إصدار من Ubuntu LTS أو أحدث.)
getdeps.py
يتم استخدام هذا البرنامج النصي بواسطة العديد من أدوات Meta OSS. سيقوم بتنزيل وبناء جميع التبعيات الضرورية أولاً، ثم سيقوم بعد ذلك باستدعاء cmake وما إلى ذلك لإنشاء الحماقة. سيساعد ذلك على ضمان إنشاء الإصدارات ذات الصلة لجميع المكتبات التابعة، مع الأخذ في الاعتبار الإصدارات المثبتة محليًا على نظامك.
إنه مكتوب بلغة python لذا ستحتاج إلى python3.6 أو إصدار أحدث في PATH. وهو يعمل على Linux وmacOS وWindows.
يتم الاحتفاظ بإعدادات بناء cmake الخاص بـ folly في ملف getdeps Manifest build/fbcode_builder/manifests/folly
، والذي يمكنك تعديله محليًا إذا رغبت في ذلك.
إذا كنت تستخدم Linux أو MacOS (مع تثبيت برنامج homebrew)، فيمكنك تثبيت تبعيات النظام لحفظ بنائها:
# Clone the repo
git clone https://github.com/facebook/folly
# Install dependencies
cd folly
sudo ./build/fbcode_builder/getdeps.py install-system-deps --recursive
إذا كنت ترغب في رؤية الحزم قبل تثبيتها:
./build/fbcode_builder/getdeps.py install-system-deps --dry-run --recursive
على الأنظمة الأساسية الأخرى أو إذا كنت تستخدم Linux وبدون تبعيات النظام، سيقوم getdeps.py
في الغالب بتنزيلها وإنشائها لك أثناء خطوة الإنشاء.
بعض التبعيات التي يستخدمها getdeps.py
وتثبيتها هي:
سيقوم هذا البرنامج النصي بتنزيل وبناء جميع التبعيات الضرورية أولاً، ثم سيقوم بعد ذلك باستدعاء cmake وما إلى ذلك لإنشاء الحماقة. سيساعد ذلك على ضمان إنشاء الإصدارات ذات الصلة لجميع المكتبات التابعة، مع الأخذ في الاعتبار الإصدارات المثبتة محليًا على نظامك.
يتطلب getdeps.py
حاليًا أن يكون إصدار python 3.6+ في طريقك.
سوف يقوم getdeps.py
باستدعاء cmake وما إلى ذلك.
# Clone the repo
git clone https://github.com/facebook/folly
cd folly
# Build, using system dependencies if available
python3 ./build/fbcode_builder/getdeps.py --allow-system-packages build
يضع الإخراج في منطقة الصفر الخاصة به:
installed/folly/lib/libfolly.a
: المكتبة يمكنك أيضًا تحديد وسيطة --scratch-path
للتحكم في موقع دليل التسويد المستخدم للإنشاء. يمكنك العثور على موقع التثبيت المؤقت الافتراضي من السجلات أو باستخدام python3 ./build/fbcode_builder/getdeps.py show-inst-dir
.
هناك أيضًا وسيطات --install-dir
و- --install-prefix
لتوفير المزيد من التحكم الدقيق في أدلة التثبيت. ومع ذلك، نظرًا لأن الحماقة لا توفر أي ضمانات للتوافق بين الالتزامات، فإننا نوصي عمومًا ببناء المكتبات وتثبيتها في موقع مؤقت، ثم توجيه بناء مشروعك إلى هذا الموقع المؤقت، بدلاً من تثبيت الحماقة في أدلة تثبيت النظام التقليدية. على سبيل المثال، إذا كنت تقوم بالإنشاء باستخدام CMake، فيمكنك استخدام المتغير CMAKE_PREFIX_PATH
للسماح لـ CMake بالعثور على الحماقة في دليل التثبيت المؤقت هذا عند إنشاء مشروعك.
إذا كنت تريد استدعاء cmake
مرة أخرى للتكرار، فهناك مخرجات نصية مفيدة run_cmake.py
في دليل البناء المؤقت. يمكنك العثور على دليل البناء المؤقت من السجلات أو باستخدام python3 ./build/fbcode_builder/getdeps.py show-build-dir
.
افتراضيًا، سيقوم getdeps.py
بإنشاء اختبارات الحماقة. لتشغيلها:
cd folly
python3 ./build/fbcode_builder/getdeps.py --allow-system-packages test
build.sh
/ build.bat
يمكن استخدام build.sh
على Linux وMacOS، وعلى نظام Windows، استخدم البرنامج النصي build.bat
بدلاً من ذلك. إنه غلاف حول getdeps.py
.
إذا كنت لا تريد السماح لـ getdeps باستدعاء cmake لك، فسيتم تعطيل إنشاء الاختبارات بشكل افتراضي كجزء من هدف CMake all
. لإنشاء الاختبارات، حدد -DBUILD_TESTS=ON
لـ CMake في وقت التكوين.
ملاحظة: إذا كنت تريد استدعاء cmake
مرة أخرى للتكرار على بنية getdeps.py
، فهناك مخرجات نصية مفيدة run_cmake.py
في دليل إنشاء مسار التسويد. يمكنك العثور على دليل البناء المؤقت من السجلات أو باستخدام python3 ./build/fbcode_builder/getdeps.py show-build-dir
.
يعمل تشغيل الاختبارات باستخدام ctests أيضًا إذا قمت بالضغط على دليل البنية، على سبيل المثال (cd $(python3 ./build/fbcode_builder/getdeps.py show-build-dir) && ctest)
إذا كان لديك تبعيات Boost أو gtest أو غيرها مثبتة في موقع غير افتراضي، فيمكنك استخدام متغيرات CMAKE_INCLUDE_PATH
و CMAKE_LIBRARY_PATH
لجعل CMAKE يبحث أيضًا عن ملفات الرأس والمكتبات في المواقع غير القياسية. على سبيل المثال، للبحث أيضًا في المجلدين /alt/include/path1
و /alt/include/path2
عن ملفات الرأس وفي المجلدين /alt/lib/path1
و /alt/lib/path2
للمكتبات، يمكنك استدعاء cmake
كما يلي:
cmake
-DCMAKE_INCLUDE_PATH=/alt/include/path1:/alt/include/path2
-DCMAKE_LIBRARY_PATH=/alt/lib/path1:/alt/lib/path2 ...
استخدم نهج getdeps.py
أعلاه. نحن نختبر CI على Ubuntu LTS، وأحيانًا على توزيعات أخرى.
إذا وجدت أن مجموعة حزم النظام ليست مناسبة تمامًا للتوزيعة التي اخترتها، فيمكنك تحديد تجاوزات محددة لإصدار التوزيعة في بيانات التبعية (على سبيل المثال https://github.com/facebook/folly/blob/main/build/fbcode_builder/ يظهر/تعزيز). ربما يمكنك جعله يعمل على أحدث التوزيعات المشتقة من Ubuntu/Debian أو Fedora/Redhat.
في وقت كتابة هذا التقرير (ديسمبر 2021)، يوجد عطل في الأنظمة المستندة إلى الإصدار 11.x من دول مجلس التعاون الخليجي في lang_badge_test. إذا لم تكن بحاجة إلى وظيفة الشارة، فيمكنك حلها عن طريق التعليق عليها من CMakeLists.txt (لسوء الحظ يحتاجها fbthrift)
لاحظ أنه تم تعطيل العديد من الاختبارات بسبب إنشاءات Windows الحمقاء، ويمكنك رؤيتها في السجل من خطوة تكوين cmake، أو من خلال البحث عن WINDOWS_DISABLED في CMakeLists.txt
ومع ذلك، getdeps.py
يبني العمل على نظام التشغيل Windows ويتم اختباره في CI.
إذا كنت تفضل ذلك، يمكنك تجربة Vcpkg. يتوفر folly في Vcpkg ويمكن إنشاء الإصدارات عبر vcpkg install folly:x64-windows
.
يمكنك أيضًا استخدام vcpkg install folly:x64-windows --head
للبناء على main
.
يعمل getdeps.py
على نظام التشغيل macOS ويتم اختباره في CI، ومع ذلك، إذا كنت تفضل ذلك، يمكنك تجربة أحد مديري حزم macOS
الحماقة متاحة كصيغة ويمكن إنشاء الإصدارات عبر brew install folly
.
يمكنك أيضًا استخدام folly/build/bootstrap-osx-homebrew.sh
للبناء على main
:
./folly/build/bootstrap-osx-homebrew.sh
سيؤدي هذا إلى إنشاء دليل بناء _build
في المستوى الأعلى.
قم بتثبيت الحزم المطلوبة من MacPorts:
sudo port install
boost
cmake
gflags
git
google-glog
libevent
libtool
lz4
lzma
openssl
snappy
xz
zlib
تنزيل وتثبيت التحويل المزدوج:
git clone https://github.com/google/double-conversion.git
cd double-conversion
cmake -DBUILD_SHARED_LIBS=ON .
make
sudo make install
قم بتنزيل وتثبيت Folly باستخدام المعلمات المذكورة أدناه:
git clone https://github.com/facebook/folly.git
cd folly
mkdir _build
cd _build
cmake ..
make
sudo make install