تحتوي مكتبة دعم الإرشادات (GSL) على وظائف وأنواع يتم اقتراحها للاستخدام من قبل الإرشادات الأساسية C ++ التي تحتفظ بها مؤسسة C ++ القياسية. يحتوي هذا الريبو على تنفيذ Microsoft لـ GSL.
يتم توفير التنفيذ بأكمله مضمّنًا في الرؤوس تحت دليل GSL. يفترض التنفيذ عمومًا منصة تنفذ دعم C ++ 14.
على الرغم من أن بعض الأنواع قد تم تقسيمها إلى رؤوسها الخاصة (على سبيل المثال GSL/SPAN) ، فمن الأبسط فقط تضمين GSL/GSL والوصول إلى المكتبة بأكملها.
ملاحظة: نشجع المساهمات التي تعمل على تحسين أو صقل أي من الأنواع في هذه المكتبة وكذلك المنافذ إلى منصات أخرى. يرجى الاطلاع على المساهمة. md لمزيد من المعلومات حول المساهمة.
اعتمد هذا المشروع رمز سلوك المصدر المفتوح Microsoft. لمزيد من المعلومات ، راجع مدونة الشهادة الأسئلة الشائعة أو الاتصال بـ [email protected] مع أي أسئلة أو تعليقات إضافية.
يستخدم هذا المشروع مكتبة اختبار Google. يرجى الاطلاع على ملف ThirdPartynotices.txt للحصول على تفاصيل بشأن ترخيص اختبار Google.
ميزة | مدعوم؟ | وصف |
---|---|---|
1. وجهات النظر | ||
مالك | ☑ | اسم مستعار للمؤشر الخام |
not_null | ☑ | يقيد مؤشر/مؤشر ذكي لعقد القيم غير الفريدة |
فترة | ☑ | عرض على تسلسل متجاور من الذاكرة. استنادًا إلى الإصدار الموحد من std::span ، ولكن gsl::span يفرض حدوث حدود. |
span_p | ☐ | يمتد نطاق يبدأ من مؤشر إلى المقام الأول الذي يكون المسند صحيحًا له |
basic_zstring | ☑ | مؤشر لسلسلة C (صفيف منتهية الصفر) مع نوع Char templated |
Zstring | ☑ | مستعار لـ basic_zstring مع مدى ديناميكي ونوع char |
CZSTRING | ☑ | مستعار لـ basic_zstring مع مدى ديناميكي ونوع شار من const char |
wzstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من wchar_t |
cwzstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من const wchar_t |
u16zstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من char16_t |
Cu16zstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من const char16_t |
u32zstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من char32_t |
Cu32zstring | ☑ | الاسم المستعار لـ basic_zstring مع مدى ديناميكي ونوع char من const char32_t |
2. المالكين | ||
فريدة من نوعها | ☑ | الاسم المستعار ل std::unique_ptr |
shared_ptr | ☑ | اسم مستعار لـ std::shared_ptr |
Stack_array | ☐ | صفيف مكدس تلقاه |
Dyn_array | ☐ | صفيف تلقّم كومة |
3. التأكيدات | ||
يتوقع | ☑ | التأكيد المسبق ؛ على الفشل ينتهي |
يضمن | ☑ | تأكيد ما بعد الشرط ؛ على الفشل ينتهي |
4. المرافق | ||
move_owner | ☐ | وظيفة مساعد تنقل owner إلى الآخر |
بايت | ☑ | إما الاسم المستعار لـ std::byte أو نوع بايت |
Final_Action | ☑ | فئة على طراز Raii تستدعي فطرًا على تدميرها |
أخيراً | ☑ | وظيفة المساعد في وضع إنشاء Final_Action |
GSL_Suppress | ☑ | ماكرو يأخذ وسيطة ويحولها إلى [[gsl::suppress(x)]] أو [[gsl::suppress("x")]] |
[[ضمني]] | ☐ | "علامة" لوضعها على منشئو الحوثة الواحدة لجعلهم غير محظوظين صراحة |
فِهرِس | ☑ | نوع لاستخدامه لجميع فهرسة الحاويات والمصفوفة (حاليًا اسم مستعار لـ std::ptrdiff_t ) |
Joining_Thread | ☐ | نسخة نمط Raii من std::thread التي تنضم |
ضيق | ☑ | نسخة محددة من narrow_cast ؛ يمكن أن يرمي ضيقة _error |
rearrow_cast | ☑ | طاقم تضييق للقيم ومرادف لـ static_cast |
ضيقة | ☑ | نوع استثناء مخصص ألقاه الضيق |
5. المفاهيم | ☐ |
ميزة | مدعوم؟ | وصف |
---|---|---|
Strict_not_null | ☑ | نسخة أكثر صرامة من not_null مع مُنشئين صريحين |
multi_span | ☐ | تم إهماله. امتداد متعدد الأبعاد. |
Strident_span | ☐ | تم إهماله. تم إيقاف دعم هذا النوع. |
basic_string_span | ☐ | تم إهماله. مثل span ولكن للسلاسل مع نوع شار templated |
String_span | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من char |
CSTRING_SPAN | ☐ | تم إهماله. الاسم المستعار لـ basic_string_span مع نوع char من const char |
WSTRING_SPAN | ☐ | تم إهماله. اسم مستعار لـ basic_string_span مع نوع char من wchar_t |
CWSTRING_SPAN | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من const wchar_t |
u16string_span | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من char16_t |
CU16STRING_SPAN | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من const char16_t |
u32string_span | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من char32_t |
CU32STRING_SPAN | ☐ | تم إهماله. مستعار لـ basic_string_span مع نوع char من const char32_t |
ويستند هذا على CPPCOREGUIDELINES شبه التوصيف.
يدعم GSL رسميًا الإصدارات الرئيسية الحديثة من Visual Studio مع كل من MSVC و LLVM و GCC و Clang و Xcode مع Apple-Clang. لكل من هذه الإصدارات الرئيسية ، تدعم GSL رسميًا C ++ 14 و C ++ 17 و C ++ 20 و C ++ 23 (عند دعمها بواسطة المترجم). فيما يلي جدول يوضح الإصدارات التي يتم اختبارها حاليًا (انظر أيضًا [.github/سير العمل/المترجمين.
المترجم | تم اختبار إصدارات مجموعة الأدوات حاليًا |
---|---|
مجلس التعاون الخليجي | 10 ، 11 ، 12 |
xcode | 14.3.1 ، 15.4 |
كلانج | 13 ، 14 ، 15 |
Visual Studio مع MSVC | VS2019 ، VS2022 |
Visual Studio مع LLVM | VS2019 ، VS2022 |
إذا نجحت في نقل GSL إلى منصة أخرى ، نود أن نسمع منك!
هدف | حالة CI/CD |
---|---|
iOS | |
Android |
ملاحظة: يتم تشغيل خطوات CI/CD مع كل طلب سحب ، ولكن الفشل فيها غير محظورة.
لبناء الاختبارات ، سوف تحتاج إلى ما يلي:
تفترض هذه الخطوات أن الكود المصدري لهذا المستودع قد تم استنساخه في دليل يسمى c:GSL
.
قم بإنشاء دليل لاحتواء مخرجات الإنشاء لهندسة معينة (نسميها c:GSLbuild-x86
في هذا المثال).
cd GSL
md build-x86
cd build-x86
قم بتكوين CMake لاستخدام المترجم الذي تختاره (يمكنك رؤية قائمة عن طريق تشغيل cmake --help
).
cmake -G "Visual Studio 15 2017" c:GSL
قم بإنشاء مجموعة الاختبار (في هذه الحالة ، في تكوين التصحيح ، يعد الإصدار خيارًا جيدًا آخر).
cmake --build . --config Debug
تشغيل جناح الاختبار.
ctest -C Debug
يجب أن تمر جميع الاختبارات - تشير إلى أن النظام الأساسي مدعوم بالكامل وأنت مستعد لاستخدام أنواع GSL!
يمكنك تنزيل وتثبيت GSL باستخدام مدير التبعية VCPKG:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install ms-gsl
يتم الاحتفاظ بمنفذ GSL في VCPKG من قبل أعضاء فريق Microsoft والمساهمين في المجتمع. إذا كان الإصدار قديمًا ، فيرجى إنشاء مشكلة أو سحب طلب على مستودع VCPKG.
نظرًا لأن الأنواع يتم تنفيذها بالكامل في الرؤوس ، فلا توجد متطلبات ربط.
يمكنك نسخ دليل GSL إلى شجرة المصدر الخاصة بك بحيث يكون متاحًا لمترجم الخاص بك ، ثم قم بتضمين الرؤوس المناسبة في البرنامج.
بدلاً من ذلك ، قم بتعيين برنامج المترجم الخاص بك ، قم بتضمين علامة المسار للإشارة إلى مجلد تطوير GSL ( c:GSLinclude
في المثال أعلاه) أو مجلد التثبيت (بعد تشغيل التثبيت). على سبيل المثال.
MSVC ++
/I c:GSLinclude
GCC/Clang
-I$HOME/dev/GSL/include
قم بتضمين المكتبة باستخدام:
#include <gsl/gsl>
توفر المكتبة ملف تكوين لـ CMake ، بمجرد تثبيته يمكن العثور عليه عبر find_package
.
والتي ، عند النجاح ، ستضيف هدف المكتبة المسمى Microsoft.GSL::GSL
والتي يمكنك استخدامها عبر آلية target_link_libraries
المعتادة.
find_package (Microsoft.GSL CONFIG REQUIRED )
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
إذا كنت تستخدم Cmake الإصدار 3.11+ ، يمكنك استخدام وحدة FetchContent الرسمية. يتيح لك ذلك دمج GSL بسهولة في مشروعك.
# NOTE: This example uses CMake version 3.14 (FetchContent_MakeAvailable).
# Since it streamlines the FetchContent process
cmake_minimum_required ( VERSION 3.14)
include (FetchContent)
FetchContent_Declare(GSL
GIT_REPOSITORY "https://github.com/microsoft/GSL"
GIT_TAG "v4.1.0"
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(GSL)
target_link_libraries (foobar PRIVATE Microsoft.GSL::GSL)
بالنسبة لمستخدمي Visual Studio ، يمكن إضافة ملف gsl.natvis في الدليل الجذر للمستودع إلى مشروعك إذا كنت ترغب في تصور أكثر فاعلية لأنواع GSL في Visual Studio Debugger أكثر مما سيتم تقديمه افتراضيًا.
للحصول على معلومات حول Microsoft Gray Systems Lab (GSL) لإدارة البيانات التطبيقية وأبحاث النظام ، انظر https://aka.ms/gsl.