يحتوي هذا المستودع على جميع أمثلة التعليمات البرمجية المرتبطة بسطح الشريحة التالي:
سطح الشريحة متاح للتنزيل على:
يتم تنظيم المستودع على النحو التالي:
يتم تنظيم كل مثال رمز أو مجموعة من أمثلة التعليمات البرمجية كمشروع منفصل CMAKE. يتيح ذلك للمستخدمين تجربة مثال رمز فردي دون الحاجة إلى إنشاء جميع أمثلة التعليمات البرمجية. للراحة ، يتم توفير ملفات اثنين من cmakelists.txt تقوم بإنشاء جميع مشاريعها المرئية. يمكن بناء جميع المشاريع باستخدام برنامج نصي للبناء المقدم (الذي يستدعي هذين Cmake Superbuilds).
يستخدم هذا المستودع سير عمل CI استنادًا إلى إجراءات GitHub. في كل مرة يتم فيها دفع التزام جديد ، يتم بناء أمثلة الكود في المستودع وتشغيلها كاختبار عقل أساسي. يعمل سير عمل CI هذا كمثال لإظهار كيف يمكن استخدام حزم LLVM/Clang Ubuntu التي يتم توفيرها بواسطة مشروع LLVM (على https://apt.llvm.org/) في عداء GitHub-Hosted Linux. يعمل سير عمل CI حاليًا على عدد قليل من مجموعات ما يلي:
تحتوي أمثلة الكود على تبعيات البرامج التالية:
يجب تثبيت هذه التبعيات قبل إنشاء أمثلة الرمز.
إذا كانت المكتبة القياسية C ++ لا تدعم تنسيق STD :: ، يمكن تثبيت إصدار مخصص من مكتبة FMT تلقائيًا (كجزء من عملية الإنشاء) لتوفير هذا الدعم. (يوفر هذا الإصدار المخصص من مكتبة FMT رأس مكتبة قياسي يسمى "Format" ويضع بعض الإعلانات الرئيسية في مساحة الاسم STD في هذا الرأس.) المكتبة القياسية C ++ المدرجة في الإصدار 13 وما فوق GCC لديها دعم لـ Std ::.
للراحة ، يتم توفير Dockerfile من أجل بناء بيئة حاويات تتضمن جميع تبعيات البرامج اللازمة. يتم توفير مزيد من المعلومات حول Dockerfile في قسم لاحق.
تستخدم أمثلة الكود عملية بناء قائمة على CMAKE. يتم تنظيم كل مثال رمز أو مجموعة من الأمثلة ذات الصلة كمشروع منفصل CMAKE. للراحة ، يتم توفير برنامج نصي لبناء جميع أمثلة التعليمات البرمجية في خطوة واحدة.
تتطلب بعض أمثلة التعليمات البرمجية تنسيق STD :: (تم تقديمه في C ++ 20). إذا كان تطبيق المكتبة C ++ القياسي المستخدم لا يدعم تنسيق STD :: ، يمكن تثبيت إصدار مخصص من مكتبة FMT تلقائيًا (كجزء من عملية الإنشاء) لتوفير هذا الدعم.
لإنشاء جميع أمثلة التعليمات البرمجية (وتشغيل جميع العروض التوضيحية المرتبطة اختياريا) ، قم بما يلي:
تهيئة البيئة بحيث يمكن العثور على تبعيات البرامج اللازمة (على سبيل المثال ، التنفيذيين أو الرؤوس أو المكتبات) بنجاح في وقت الإنشاء. عادةً ما تكون هذه الخطوة مطلوبة فقط إذا تم تثبيت بعض تبعيات البرامج في مواقع لا يمكن العثور عليها عادة بواسطة عملية الإنشاء. عندما تكون هذه الخطوة مطلوبة ، قد تبدو مثل ما يلي:
# Initialize the following variables used to configure the
# environment:
# cmake_dir
# - The directory under which CMake has been installed
# (e.g., /usr, /usr/local).
# clang_dir
# - The directory under which LLVM/Clang has been installed
# (e.g., /usr, /usr/local).
# gcc_dir
# - The directory under which GCC has been installed
# (e.g., /usr, /usr/local).
# boost_dir
# - The directory under which Boost has been installed
# (e.g., /usr, /usr/local).
# Use the preceding variables to configure the environment by
# setting several key environment variables:
export BOOST_INCLUDEDIR=$boost_dir/include
export BOOST_LIBRARYDIR=$boost_dir/lib
export PATH=$cmake_dir/bin:$clang_dir/bin:$gcc_dir/bin:$PATH
export LD_LIBRARY_PATH=$BOOST_LIBRARYDIR:$LD_LIBRARY_PATH
export CPATH=$boost_dir/include:$CPATH
قم بتعيين دليل العمل الحالي على الدليل الأعلى للشجرة العاملة لمستودع GIT المستنسخة.
استدعاء البرنامج النصي للبناء مع الخيارات المناسبة. اسميا ، يتم استدعاء البرنامج النصي على النحو التالي:
./build --defaults
إذا حدثت مكتبة C ++ القياسية التي يتم استخدامها لدعم تنسيق STD :: ، يمكن إضافة خيار "--FMT" إلى استدعاء البرنامج النصي للبناء أعلاه (بحيث لا يتم استخدام الإصدار المخصص من مكتبة FMT). وهذا هو ، يمكن استخدام الأمر التالي:
./build --defaults --no-fmt
يدعم برنامج Build Script العديد من الخيارات. للحصول على معلومات الاستخدام التفصيلية ، استدعاء البرنامج النصي مع خيار "-H" أو "-help". تتم معالجة وسيطات سطر الأوامر بالترتيب من اليسار إلى اليمين. لذلك ، في الحالة التي يتم فيها إنشاء الإعداد بواسطة أكثر من خيار سطر الأوامر ، يصبح الإعداد من الخيار الأقصى الصحيح ساري المفعول.
إذا رغبت في ذلك ، قم بتشغيل البرامج النصية التجريبية (كاختبار عقل أساسي) مع الأمر:
./build --demo
يتم وضع إخراج عملية الإنشاء في الدلائل:
يتم وضع الإخراج لكل مشروع CMAKE في دليل له نفس الاسم مثل هذا المشروع. على سبيل المثال ، يتم وضع إخراج البناء للمشروع المسمى cyclomatic_complexity من أمثلة Deck الشريحة في الدليل:
slides/examples/tmp_build/cyclomatic_complexity
تحتوي معظم المشاريع على برنامج نصي تجريبي (يسمى "العرض التوضيحي" أو باسم "Demo"). على سبيل المثال ، لتشغيل البرنامج النصي التجريبي لمشروع cyclomatic_complexity ، استخدم الأمر:
slides/examples/tmp_build/cyclomatic_complexity/demo
يتم توفير Dockerfile يمكن استخدامها لإنشاء حاوية Podman/Docker مع جميع تبعيات البرامج اللازمة لبناء وتشغيل أمثلة الكود في هذا المستودع. وترد التعليمات أدناه حول كيفية استخدام هذه البيئة الحافية. على الرغم من أن هذه التعليمات تستخدم (بدون جذور) podman ، فإن برامج Podman و Docker لديها واجهات خط الأوامر متطابقة تقريبًا. لذلك ، يجب أن يكون من الممكن استبدال "Docker" لـ "Podman" في التعليمات.
دع $ TOP_DIR يشير إلى الدليل الأعلى للشجرة العاملة لمستودع GIT المستنسخ (أي ، الدليل الذي يحتوي على الملف المسمى README.MD الذي تقرأه حاليًا). لاحظ أن $ top_dir يجب أن يكون مسارًا مطلقًا.
قم بتعيين دليل العمل على الدليل الأعلى لشجرة العمل باستخدام الأمر:
cd $TOP_DIR
بناء الحاوية باستخدام الأمر:
podman build --tag cl-demo - < podman/Dockerfile
قم بإنشاء مثيل مؤقت للحاوية وقم بتشغيل قشرة باش في الحاوية باستخدام الأمر:
podman run -i -t --rm -v $TOP_DIR:$TOP_DIR:rw -w $TOP_DIR
--cap-add=SYS_PTRACE --security-opt label=disable
cl-demo /bin/bash
لاحظ أنه قد لا تكون هناك حاجة إلى خيارات "--Cap-Add" و "-Security-OPT".
إذا كنت لا تريد حذف الحاوية بعد خروج قذيفة باش ، فاحصل على خيار "-RM".
تابع إنشاء وتشغيل البرامج النصية التجريبية كما هو موضح بالتفصيل في قسم سابق. على سبيل المثال ، قد يستدعي المرء الأمر التالي من قشرة باش التي تعمل في الحاوية:
./build --defaults
في بعض الأحيان ، يمكن أن يكون استخدام مطهر العنوان (ASAN) مشكلة ، على سبيل المثال ، على المراوغات في النظام الأساسي الذي يتم تشغيل الكود عليه. يمكن التحكم في سلوك وقت التشغيل لـ ASAN من خلال متغير البيئة ASAN_OPTIONS ، الذي تكون قيمته قائمة مفصولة بالقولون من أزواج القيمة الرئيسية (على سبيل المثال ، "Verbosity = 1: detect_leaks = 0").
في بعض المنصات ، لوحظت بعض المكتبات المستخدمة في أمثلة الكود على تسرب ذاكرة. إذا اشتكت ASAN من وجود بعض المكتبات التي تحتوي على تسرب ذاكرة ، فيمكن تعطيل اكتشاف تسرب الذاكرة عن طريق إضافة "detect_leaks = 0" إلى قائمة خيارات ASAN في متغير بيئة ASAN_OPTIONS. على سبيل المثال ، يمكن تعيين ASAN_OPTIONS على النحو التالي:
ASAN_OPTIONS=detect_leaks=0
يبدو أن تسمم المستخدم للذاكرة يمكن أن يؤدي في بعض الأحيان إلى إيجابيات خاطئة من ASAN (أي أخطاء الاستخدام بعد الظهر) ، اعتمادًا على كيفية بناء LLVM/Clang. ويرجع ذلك على الأرجح إلى التناقضات في كيفية معالجة تسمم المستخدم في مكتبات LLVM/Clang والتطبيق باستخدام هذه المكتبات. إذا تمت مواجهة هذه المشكلة ، فيمكن تعطيل تسمم المستخدم بإضافة "ALMBLE_USER_POISONING = 0" إلى قائمة خيارات ASAN في متغير بيئة ASAN_OPTIONS. على سبيل المثال ، يمكن تعيين ASAN_OPTIONS على النحو التالي:
ASAN_OPTIONS=allow_user_poisoning=0
يجب أن يعمل هذا البرنامج مع معظم الأنظمة المستندة إلى UNIX (شريطة تثبيت تبعيات البرامج اللازمة). يضمن سير عمل GitHub CI (تمت مناقشته أعلاه) أن يقوم البرنامج ببناء وتشغيله بشكل موثوق بشكل معقول على Ubuntu Linux و MacOS. منصة التطوير الرئيسية للمؤلف هي Fedora Linux. لذلك ، يجب أن يعمل البرنامج أيضًا بشكل موثوق على هذا النظام الأساسي أيضًا.