أوراق من مؤتمر الربيع C ++ Russia 2018


في الفترة من 19 إلى 21 أبريل ، عُقد مؤتمر C ++ Russia 2018 في سانت بطرسبرغ ، ومن عام لآخر ، أصبح التنظيم والسلوك أعلى بمستوى واحد ، وهو خبر جيد. بفضل المنظم الدائم لـ C ++ Russia Sergey Platonov لمساهمته في تطوير هذا المجال.

في 19 أبريل ، تم التخطيط لفصول رئيسية ، والتي للأسف لم نتمكن من حضورها ، وفي 20-21 تم عقد البرنامج الرئيسي للمؤتمر ، والذي شاركنا فيه باهتمام كبير. قام سيرجي سيرم بعمل رائع وجذب العديد من المتحدثين الأجانب البارزين كمتحدثين. تم افتتاح اليوم الأول من المؤتمر من قبل جون كالب ، منظم CppCon ومؤلف C ++ Today: The Beast is Back. بدأ اليوم الثاني بعرض تقديمي من Daveed Vandevoorde ، عضو لجنة التقييس ، أحد مؤلفي قوالب C ++: الدليل الكامل. كان أندريه ألكسندرسكو في مركز الاهتمام ، بعد أن جمع تقريره بعد استثناءات حشدًا كبيرًا من الأشخاص الذين أرادوا الحصول على توقيع شخصي والتقاط صورة مشتركة. لأول مرة ، تم بث حديث Herb Sutter على Skype حول مشغل Spaceship لـ C ++ 20.

على الرغم من أن المؤتمر عقد منذ أكثر من 3 أشهر ، فقد تم نشر الفيديو ( قائمة التشغيل الكاملة ) عليه الآن ، لذا فقد حان الوقت لتحديث ذكرياتك والانغماس في الميزات الرائعة لـ C ++.

جون كلب. C ++ اليوم: الوحش عاد



يغطي هذا الحديث سبب اختيار المهندسين الباحثين عن الأداء لـ C ++. يقدم جون منظورًا تاريخيًا لـ C ++ يركز على ما يحدث في مجتمع C ++ في الوقت الحالي وإلى أين تتجه اللغة وقاعدة المستخدمين. مع اهتمام متجدد بالأداء لكل من مراكز البيانات والأجهزة المحمولة ، ونجاح مكتبات البرامج مفتوحة المصدر ، عادت C ++ وهي ساخنة. يشرح هذا الحديث لماذا لغة C ++ هي لغة معظم مهندسي البرمجيات من أجل الأداء. سوف تتلقى رسمًا تاريخيًا تقريبيًا يضع C ++ في منظورها ويغطي تقلبات شعبيتها.

أرنو شودل. من المكرر إلى النطاقات



أزواج التكرار موجودة في كل مكان في مكتبة C ++. من المقبول عمومًا أن دمج مثل هذا الزوج في كيان واحد عادةً ما يطلق عليه النطاق يوفر كودًا أكثر إيجازًا وقراءة. ولكن تحديد الدلالات الدقيقة لمفهوم المدى هذا أمر صعب بشكل مدهش. تتعارض الاعتبارات النظرية مع الاعتبارات العملية. بعض أهداف التصميم غير متوافقة معًا تمامًا.

جوناثان بوكارا. 105 خوارزميات المحكمة الخاصة بلبنان في أقل من ساعة



ندرك جميعًا أننا يجب أن نعرف خوارزميات STL. يسمح لنا تضمينها في تصميماتنا بجعل الكود الخاص بنا أكثر تعبيراً وأكثر قوة. وأحياناً بطريقة مذهلة.

ولكن هل تعرف خوارزميات STL الخاصة بك؟

في هذا الحديث ، يقدم المؤلف 105 خوارزميات لدى المحكمة الخاصة بلبنان حاليًا ، بما في ذلك تلك المضافة في C ++ 11 و C ++ 17. ولكن أكثر من مجرد قائمة ، فإن الهدف من هذا الحديث هو تقديم مجموعات مختلفة من الخوارزميات ، والأنماط التي تشكلها في المحكمة الخاصة بلبنان ، وكيف ترتبط الخوارزميات معًا.

هذا النوع من الصور الكبيرة هو أفضل طريقة لتذكرهم جميعًا ، وتشكيل صندوق أدوات مليء بالطرق لجعل الكود الخاص بنا أكثر تعبيراً وأكثر قوة.

فيكتور كيريلوف. تجميع C ++ التفاعلي (REPL): الطريق الهزيل



هل سبق لك أن أردت تعديل بعض القيمة أو تنفيذ بعض العبارات أثناء تشغيل برنامج C ++ لمجرد اختبار شيء ما - ليس تافهًا أو ممكنًا باستخدام مصحح أخطاء؟ لغات البرمجة النصية لها REPL (read-Eval-print-loop). أقرب شيء لـ C ++ هو التشبث (تم تطويره من قبل الباحثين في CERN) ولكنه مبني على أعلى LLVM وهو مرهق جدًا للإعداد. RCRL (Read-Compile-Run-Loop) هو مشروع تجريبي يعرض نهجًا مبتكرًا للقيام بتجميع وقت التشغيل C ++ في نظام أساسي وطريقة إدراك المترجم التي يمكن تضمينها بسهولة. في هذا العرض التقديمي ، يتم عرض كيفية استخدامه ، وكيف يعمل وكيف يمكن تعديله ودمجه في أي تطبيق وسير عمل.

فيكتور سيورا. ما يكفي من سلسلة_التعليق لشنق أنفسنا



ألن يكون لطيفًا إذا كان لدينا نوع C ++ قياسي لتمثيل السلاسل؟ أوه ، انتظر ... نفعل: std :: string. ألن يكون لطيفًا إذا تمكنا من استخدام هذا النوع القياسي خلال التطبيق / المشروع بالكامل؟ حسنا ... لا نستطيع! ما لم نكتب تطبيق وحدة تحكم أو خدمة. ولكن ، إذا كنا نكتب تطبيقًا باستخدام واجهة المستخدم الرسومية أو نتفاعل مع واجهات برمجة التطبيقات الحديثة لنظام التشغيل ، فمن المحتمل أننا سنحتاج إلى التعامل مع نوع سلسلة C ++ غير قياسي واحد آخر على الأقل. اعتمادًا على النظام الأساسي والمشروع ، قد يكون CString من MFC أو ATL ، Platform :: String من WinRT ، QString من Qt ، wxString من wxWidgets ، إلخ. أوه ، دعونا لا ننسى صديقنا القديم كون تشار * ، والأفضل من ذلك كونه wchar_t * لعائلة C من واجهات برمجة التطبيقات ...

لذلك انتهى بنا الأمر بنوعين من السلاسل في قاعدة التعليمات البرمجية لدينا. حسنًا ، هذا سهل الإدارة: نحن نتمسك بسلسلة std :: string لجميع الأنظمة الأساسية المستقلة للنظام الأساسي ونقوم بالتحويل ذهابًا وإيابًا إلى XString الآخر عند التفاعل مع واجهات برمجة تطبيقات النظام أو كود GUI. سنقوم بعمل بعض النسخ غير الضرورية عند عبور هذا الجسر وسننتهي ببعض الوظائف المضحكة للتلاعب في نوعين من الأوتار. ولكن هذا رمز الغراء ، على أي حال ... أليس كذلك؟

إنها خطة جيدة ... حتى ينمو مشروعنا ونقوم بتجميع الكثير من أدوات السلسلة والخوارزميات. هل نقصر هذه الخوارزميات على std :: string؟ هل نتراجع عن المقام المشترك ، ونفقد سلامة النوع / الذاكرة من نوع C ++ الخاص بنا؟ هل C ++ 17 std :: string_view هو الحل لجميع مشاكل السلسلة لدينا؟

يحاول المؤلف استكشاف الخيارات ، معًا ، مع دراسة حالة على تطبيق Windows عمره 15 عامًا: Advanced Installer (www.advancedinstaller.com) - مشروع C ++ تم تطويره بنشاط ، تم تحديثه إلى C ++ 17 ، بفضل clang-tidy و "Clang Power Tools" ( www.clangpowertools.com) ...

Andrei Alexandrescu. توقع المتوقع



لطالما كانت كتابة الشفرة المرنة على الأخطاء نقطة ألم في جميع اللغات. الاستثناءات هي الوسائل الصحيحة سياسياً للإشارة إلى الأخطاء في C ++ ، لكن العديد من التطبيقات لا تزال تلجأ إلى رموز الخطأ لأسباب تتعلق بسهولة الفهم ، وسهولة معالجة الأخطاء محليًا ، وفعالية الشفرة التي تم إنشاؤها.

يوضح هذا الحديث كيف يمكن الجمع بين مجموعة متنوعة من التحف النظرية والعملية معًا لمعالجة رموز الخطأ والاستثناءات في حزمة واحدة بسيطة وبسيطة. يمكن استخدام النوع العام المتوقع لكل من السلوكيات المحلية (نمط رمز الخطأ) والمركزية (نمط الاستثناء) ، مستمدة من نقاط القوة لكل منها.

بوريسلاف ستانيميروف. DynaMix: نظرة جديدة على تعدد الأشكال



غالبًا ما تحتاج البرامج ذات منطق الأعمال المعقد للغاية ، مثل الألعاب وأنظمة CAD وأنظمة المؤسسات ، إلى إنشاء الكائنات وتعديلها في وقت التشغيل - على سبيل المثال لإضافة أو تجاوز طريقة في كائن موجود. يحتوي معيار C ++ على أنواع جامدة يتم تحديدها في وقت الترجمة ويجعل ذلك صعبًا. من ناحية أخرى ، فإن اللغات ذات الأنواع الديناميكية مثل lua و Python و JavaScript تجعل ذلك سهلاً للغاية. لذلك ، من أجل إبقاء الشفرة قابلة للقراءة وصيانتها ، وتحقيق متطلبات منطق الأعمال المعقدة ، تستخدم العديد من المشاريع مثل هذه اللغات جنبًا إلى جنب مع C ++. تتضمن بعض عيوب هذا النهج التعقيد الإضافي في طبقة ربط اللغة ، وفقدان الأداء من استخدام لغة مفسرة ، وتكرار الشفرة الحتمية للعديد من وظائف المرافق الصغيرة.

DynaMix هي مكتبة تحاول إزالة ، أو على الأقل تقليل الحاجة إلى لغة برمجة نصية منفصلة عن طريق السماح للمستخدمين بتكوين وتعديل كائنات متعددة الأشكال في وقت التشغيل في C ++. يشرح هذا الحديث هذه المشكلة ويقدم المكتبة وميزاتها الرئيسية للمستخدمين المحتملين أو الأشخاص الذين قد يستفيدون من هذا النهج بمثال توضيحي وعرض توضيحي صغير.

ميخائيل متروسوف. تطبيق تنوعا C ++



في C ++ ، يمكنك حل مهمة واحدة بطرق متعددة. يختار المؤلف مهمة فعلية من الإنتاج ، ويحقق في كيفية حلها من خلال عدد من الأدوات التي توفرها C ++: حاويات STL ، و boost.range ، ونطاقات C ++ 20 ، و coroutines. يقارن أيضًا قيود API وأداء الحلول المختلفة ، وكيف يمكن تحويلها بسهولة من واحد إلى آخر إذا كانت الشفرة منظمة بشكل جيد. أثناء الطريقة ، يستكشف المؤلف أيضًا تطبيقات بعض ميزات C ++ 17 المفيدة مثل constexpr if وعبارات التحديد باستخدام المُهيئ و std :: not_fn وما إلى ذلك. يتم إيلاء اهتمام خاص للموضوع - الخوارزميات القياسية.

ألكسندر جرانين. النهج الوظيفي لذاكرة المعاملات البرمجيات



البرمجة المتوازية موضوع عميق ومتعدد الأوجه. على مدى عقود من البحث ، تم تطوير عدد كبير من المناهج والممارسات والأدوات ، ولكن لا يمكننا افتراض أن لغة C ++ تواكب هذه الاتجاهات. بدءًا بمعيار C ++ 11 ، تم إدخال مفاهيم مثل std :: thread و std :: atomic و std :: future و std :: mutex ، ومن المتوقع في المستقبل إضافة coroutines ، وهو نموذج للحسابات غير المتزامنة. حسنًا ، هذه كلها أشياء مثيرة للاهتمام للدراسة ، لكن التقرير سيركز على فكرة مختلفة تمامًا.

ذاكرة المعاملات البرمجية للبرامج (STM) - مفهوم نموذج البيانات القابلة للتحويل للمعاملات - موجود منذ فترة طويلة ولديه عدد من التطبيقات لجميع اللغات. باستخدام STM ، فإنك تعبر عن نموذج بياناتك وتبدأ في تغييره عبر سلاسل رسائل متعددة ، بشكل تنافسي ، دون الحاجة إلى القلق بشأن مزامنة سلسلة الرسائل ، أو حالة البيانات الصالحة ، أو الأقفال. ستقوم STM بكل شيء من أجلك. يبدو هذا جيدًا جدًا ، ولكن ليست كل مكتبات STM مفيدة بنفس القدر. STMs الحتمية التقليدية معقدة للغاية ، وعرضة للأخطاء متعددة المؤشرات غير التافهة ، وصعبة الاستخدام. من ناحية أخرى ، في عالم البرمجة الوظيفية ، كان مفهوم STM التوافقي موجودًا منذ فترة طويلة ، والمعاملات التي تكون من الطوب القابل للتكوين ، والتي تبني منها معاملات على مستوى أعلى. يتيح لك النهج التجميعي لـ STM التعبير عن نموذج بيانات تنافسي بشكل أكثر مرونة ووضوحًا وموثوقية. يمكن أن تكون البرمجة الموازية ممتعة أيضًا!

في التقرير ، سيتحدث المؤلف عن ميزات STM التوافقية ، وكيفية استخدامها ، وكيف يمكن تنفيذها في C ++ 17.

Vadim Vinnik. معالجة المجموعة. جوهر واحد ، مظاهر متعددة



على طول التاريخ الكامل للبرمجة ، كانت المعالجة المتسلسلة للعناصر المختلفة من المجموعات ولا تزال واحدة من المهام العملية الأكثر شيوعًا. قد يختلف التمثيل الداخلي للمجموعات ، بالإضافة إلى الخوارزمية المستخدمة لجلب العناصر اللاحقة ، في نطاق واسع جدًا: مجموعة ، قائمة مرتبطة ، شجرة ، جدول التجزئة ، ملف وآخرون. ومع ذلك ، وراء مجموعة متنوعة من التعبيرات الاصطلاحية ، وظائف المكتبة القياسية ، الحلول المخصصة ، يمكن للمرء أن يكشف عن الجوهر الذي لا يزال ثابتًا لفئة المهام بأكملها. يهدف هذا الحديث إلى إظهار انتقال خطوة بخطوة من الخوارزميات استنادًا إلى وصف صريح للإجراءات على العناصر الفردية نحو أدوات معالجة تعريفية عالية المستوى تعامل المجموعة ككيان وتكشف بشكل كافٍ عن منطق المجال.

ديمتري بانشيكوف. مكتبات مشتركة بدون تبعيات خارجية



سوف يخبر المؤلف عن تجربته في تطوير محرك مكافحة الفيروسات في C ++ في شكل مكتبة مشتركة. ميزة فريدة هي عدم وجود أي تبعيات خارجية (وقت التشغيل C ++ أو C). تم إنشاء هذه المجموعة بأكملها حول استخدام سلسلة أدوات مخصصة في دول مجلس التعاون الخليجي لهدف خاص ، والذي سيستخدمه libc newlib لنفس الهدف ، وعلى رأسه يتم بناء libstdc ++. وفقًا لذلك ، يتم تجميع المكتبة المشتركة من خلال سلسلة أدوات مخصصة مع libgcc_s ، libc ، libcstdc ++ مخصصة (التغييرات فقط في التجميع). كل التفاعل مع وقت التشغيل يتم من خلال المكتبة المشتركة ABI. وبالتالي ، تحتفظ المكتبة بالقدرة على استخدام C ++ الحديثة كاملة بدون قيود (RTTI ، الاستثناءات ، iostream ، إلخ) ، والتي تذهب إلى libstdc ++ libc (newlib) | l ibgcc-ABI. تم اختبار نهج مماثل على سلاسل أدوات GCC / newlib / libstdc ++ لنظام Linux ، و clang / newlib / libc ++ لنظام MacOS. قد يكون التقرير موضع اهتمام لأولئك الذين يرغبون في استخدام C ++ في المكتبات المشتركة ، ولكن لا يمكنهم تحمله بسبب التبعيات الخارجية.

ايليا شيشكوف. كيفية تدريس لغة C ++: تجربة إنشاء دورات على Coursera



خلال السنة والنصف الماضية ، قاد المؤلف ابتكار تخصص Coursera في لغة C ++ الحديثة. سيتكون التخصص من خمس دورات ، اثنتان منها قيد التشغيل بالفعل ، وأخرى جاهزة تقريبًا.

سيقول التقرير:

  • ما هي المشاكل التي يمكن مواجهتها في العمل في الدورات (على سبيل المثال ، بعد 3 أشهر من العمل ، قام المطورون بالتخلص من جميع المواد وبدأوا مرة أخرى)
  • كيف يتم تشكيل المنهج ولماذا بالضبط (على سبيل المثال ، لماذا لم تظهر كلمة "مؤشر" في الدورتين الأوليين ولو مرة واحدة)

بالإضافة إلى ذلك ، أثناء العمل على التخصص ، تم تطوير مجموعة من المبادئ التي تنطبق على العمل اليومي:

  • في عملية دمج موظف جديد في المشروع
  • أثناء مراجعة التعليمات البرمجية
  • عند التوظيف

لذلك ، لا يريد المؤلف فقط معرفة كيفية إجراء التخصص ، بل سيحاول أيضًا نقل الخبرة المكتسبة إلى المهام اليومية.

إيفان بونوماريف. تقارير تحطم Android NDK



ليس سرا أن التطوير في C / C ++ له متطلبات أعلى بكثير لجودة التعليمات البرمجية من التطوير في Java. احتمال ارتكاب خطأ فادح أعلى بكثير. في الوقت نفسه ، يعد جمع المعلومات حول مثل هذه الأخطاء مهمة غير تافهة حتى للمبرمجين ذوي الخبرة.

في الجزء الأول من التقرير ، سنراجع بإيجاز التطورات الحالية: كيف يعمل مصحح أخطاء Android المدمج ، ما هي الحلول الموجودة بالفعل. الجزء الثاني مخصص لقصة كيفية عمله "تحت غطاء المحرك": كيفية الحصول على حالة المعالج في وقت الخطأ ، وكيفية فك مكدس المكالمة ، وكيفية معرفة أرقام الأسطر في التعليمات البرمجية المصدر. نظرة عامة على مكتبات تعزيز المكدس مثل libcorkscrew ، libunwind ، libunwindstack.

سيكون التقرير مفيدًا لكل من مطوري Android ، الذين تستخدم تطبيقاتهم NDK ، والجميع لتوسيع آفاقهم.

فيدور شورت. الذاكرة هي التجريد المثالي



int * ptr = int int؛
* ptr = 42 ؛
حذف ptr ؛

ماذا يحدث بالفعل عندما يتم تنفيذ هذه الأسطر الثلاثة من التعليمات البرمجية؟ سوف ننظر داخل مخصص الذاكرة ونظام التشغيل والأجهزة الحديثة لإعطاء إجابة شاملة لهذا السؤال.

أليكسي سالمين. نصائح وحيل حول إدارة الذاكرة



في عام 2017 ، لا تفقد مسألة اختيار الموزع في C ++ أهميتها. لقد أضافوا طريقة جديدة إلى المعيار لاختيار موزع محلي للحاويات (std :: pmr) ، و tcmalloc العالمي و jemalloc يستمران في التطور ، بالإضافة إلى واجهات النواة التي يعتمدون عليها. هذا التقرير مخصص لـ "الطابق السفلي" من هذا التصميم: ميزات mmap و madvise في Linux kernel وتأثير هذه الميزات على أداء الموزعين.

عشب سوتر. الجديد في C ++ 20: مشغل سفينة الفضاء



تم اعتماد سفينة الفضاء الجديدة مؤخرًا كميزة لغوية لـ C ++ 20. في هذا الحديث ، يقدم المصمم والمؤلف لاقتراح سفينة الفضاء لمحة عامة عن الميزة ، ويناقش دوافعها وتصميمها ، ويسير عبر أمثلة حول كيفية استخدامها. يركز بشكل خاص على كيفية جعل الميزة رمز C ++ أكثر نظافة للكتابة والقراءة ، بشكل أسرع من خلال تجنب العمل الزائد ، وأكثر قوة من خلال تجنب العديد من المزالق المهمة ولكن الدقيقة في الشفرة الأكثر هشاشة التي كان علينا في السابق كتابتها يدويًا دون هذه الميزة.

أناستاسيا كازاكوفا. تصحيح التعليمات البرمجية C ++ دون تشغيل و ترجمة



عندما تنظر إلى القوالب ، والتفكير ، وإنشاء الشفرة في مرحلة التجميع ، والنقوش ، تشعر بأن C ++ قد حددت لنفسها مهمة "إخفاء" الشفرة النهائية من المطور قدر الإمكان. الاستخدام غير التافه للمعالج (والعديد من الفروع) يمكن أن يجعل تسلسل البرنامج غير واضح للغاية. وبطبيعة الحال ، فإن هذه الأساليب تنقذ المطورين من اللصق اللامتناهي للنسخ وتكرار الأجزاء المماثلة من قاعدة التعليمات البرمجية ، ولكنها تتطلب المزيد من الدعم المتقدم في أدوات التطوير.

هل من الممكن تصحيح التعليمات البرمجية دون إعادة تشغيلها باستمرار ، وبدون مصحح أخطاء ، وحتى بدون تجميع بسيط لقاعدة التعليمات البرمجية بالكامل؟ هل من الممكن العثور على أخطاء في التعليمات البرمجية التي لا يمكن تجميعها أو تشغيلها على الجهاز المحلي؟ يوجد! تتمتع بيئات التطوير المتكاملة (IDE) بمعرفة وفهم واسعين بالشفرة المخصصة ، وهم الذين يمكنهم توفير الأدوات المناسبة.

سيوضح هذا التقرير كيف يمكن للمرء "تصحيح" بدائل الماكرو المتداخلة المتداخلة بواسطة الكتابة ، وفهم أنواع المتغيرات (التي غالبًا ما تكون "مخفية" في C ++ الحديثة) ، وتصحيح الفروع المختلفة للمعالج المسبق أو عامل التشغيل الزائد ، وأكثر من ذلك بكثير بمساعدة مستخدم ذكي حقًا IDE بعض الميزات متاحة بالفعل في CLion و ReSharper C ++ ، وبعضها مجرد أفكار مثيرة للاهتمام للمستقبل ، والتي ستكون مثيرة للاهتمام لمناقشتها مع الجمهور.

يوجين لوكيانيتس. بناء في Docker باستخدام كونان



يمكن نقل تجميع مشروع C ++ داخل حاوية عامل الميناء ، بينما بدلاً من تثبيت المكتبات والتبعيات الضرورية في النظام المضيف ، يمكن إما تثبيتها مباشرة في صورة عامل الميناء (على سبيل المثال ، Cuda) ، أو تثبيتها باستخدام مدير مكتبة Conan C ++ (على سبيل المثال ، زيادة). وينتج عن ذلك بيئة معزولة يتم التحكم فيها (وفي نفس الوقت) للتجميع ، حيث يمكنك توصيل ذاكرة التخزين المؤقت Conan ، لذلك ستستخدم المشاريع المختلفة التي تستخدم نفس المكتبات نفس التجميعات. أيضا ، لم يعد البناء يعتمد على توزيع Linux حيث يتم بناء المشروع ، الشيء الرئيسي هو أنه يمكنك تشغيل Docker على هذا التوزيع.

دينيس بانين. البرمجة التخطيطية العملية: كتابة جدول تجزئة غير متجانس



في سياق التقرير ، سنكتب مكتبة صغيرة للعمل مع std :: tuple. باستخدام هذه المكتبة ، نقوم بتجميع وقت الترجمة إلى جدول تجزئة غير متجانس. علاوة على ذلك - على أساسها سنكتب إطار عمل RPC صغير ، باستخدام حقيقة أنه ليس لدينا محو من النوع.

سيكون هناك العديد من العمليات الحسابية والقوالب والميزات الجديدة في C ++ 17 (على وجه التحديد ، إذا كانت constexpr).

دميتري سوكولوف. توليد الكود باعتباره انعكاس للفقراء



غالبًا ما يلزم التفكير في تعميم خوارزميات التسلسل. تنفيذ البروتوكولات المختلفة والعمل مع قواعد البيانات. لحل مثل هذه المشاكل ، كتبنا مترجم IDL منزلي الصنع لإنشاء هياكل C ++ ومكتبة للتفاعل مع النتيجة. Protobuf مع الدواسات وما إذا كان الأمر يستحق ذلك.

ديف فانديفورد. البرمجة العاكسة في C ++



منذ بعض الوقت ، أنشأت لجنة التوحيد القياسي C ++ مجموعة فرعية "SG-7" لاستكشاف كيفية إضافة إمكانات التفكير إلى اللغة. في الآونة الأخيرة ، أضافت تلك المجموعة "البرمجة التخطيطية" إلى لوحتها واتخذت بعض القرارات المهمة بشأن شكل الحل النهائي. في هذا الحديث ، ينظر المؤلف إلى الماضي الذي أوصلنا إلى هنا ويفحص المسار المحتمل لدعم C ++ من الدرجة الأولى لـ "metaprogramming العاكسة".

ديتمار كول. الاختبار القائم على المفهوم



مع إضافة المفاهيم إلى المراجعة التالية لـ C ++ ، من المتوقع أن يتم تعريف المفاهيم الجديدة. يحدد كل مفهوم مجموعة من العمليات التي يستخدمها الرمز العام. يمكن أن يكون أحد هذه الاستخدامات اختبارًا عامًا للتحقق من تحديد جميع أجزاء المفهوم والتحقق من التفاعلات العامة بين عمليات المفهوم. من الناحية المثالية ، يعمل هذا الاختبار حتى مع الفصول الدراسية بشكل جزئي فقط لنمذجة مفهوم لتوجيه تنفيذ الفصول.

لا يستخدم هذا العرض التقديمي امتدادات المفاهيم الفعلية ولكنه يوضح كيف يمكن إنشاء الاختبارات العامة باستخدام ميزات C ++ 17. بالنسبة للاختبارات العامة ، يتم استخدام لغة الكشف و constexpr إذا تم استخدامها لتحديد مدى توفر العمليات المطلوبة والتعامل بلطف مع انحسار العمليات. يجب أن تكون الاختبارات العامة قادرة على تغطية أساسيات الفصول التي تشكل نموذجًا للمفهوم. من الواضح أن السلوك المحدد للفصول سيظل يتطلب اختبارات مقابلة.

سيمون براند توازي C ++ الحديث من وحدة المعالجة المركزية إلى وحدة معالجة الرسومات



يمكن استخدام البرمجة المتوازية للاستفادة من البنى المتعددة النوى وغير المتجانسة ويمكن أن تزيد بشكل كبير من أداء البرنامج. لقد قطعت لغة C ++ الحديثة شوطًا طويلاً لتسهيل البرمجة المتوازية وإمكانية الوصول إليها ؛ توفير كل من التجريدات عالية المستوى ومنخفضة المستوى. يأخذ C ++ 17 هذا الأمر أكثر من خلال توفير خوارزميات متوازية عالية المستوى ، ويتوقع المزيد في C ++ 20. يقدم هذا الحديث نظرة عامة على أدوات التوازي الحالية المتاحة ، ويتطلع إلى مستقبل كيفية دعم وحدات معالجة الرسومات والأنظمة غير المتجانسة من خلال ميزات المكتبة القياسية الجديدة والمعايير الأخرى مثل SYCL.

أندري كاربوف. فعالية C ++ (مايرز ليس له علاقة :)



تستمر لغة C ++ والبنية التحتية المحيطة بها في التطور ، مما يجعل هذه اللغة واحدة من أكثر الأدوات فعالية في الوقت الحاضر. أود أن أسلط الضوء على ثلاثة عوامل تجعل لغة C ++ جذابة للغاية الآن.

  • أولاً: الابتكارات في معيار اللغة ، مما يسمح لك بكتابة كود فعال.
  • ثانياً: نضوج أدوات التطوير وزيادة سرعة تجميع المشاريع.
  • ثالثًا: أدوات الدعم الناضجة التي تسمح لك بالتحكم في جودة الشفرة والجوانب الأخرى لدورة حياة المشروع.

هذا التقرير هو قصيدة للغة البرمجة C ++!

إيفان بوزيريفسكي. عدم التزامن في البرمجة



في مجال تطوير تطبيقات ذات مؤشرات تحميل أو توزيع عالية التحميل ، يمكن للمرء أن يسمع بشكل متزايد محادثات حول التعليمات البرمجية غير المتزامنة ، بما في ذلك التكهنات حول الحاجة (عدم الحاجة) إلى مراعاة عدم التزامن في التعليمات البرمجية ، حول فهم (عدم الفهم) للشفرة غير المتزامنة ، وكفاءتها (عدم الكفاءة). في هذا التقرير ، سنحاول التعمق أكثر في مجال الموضوع: سنحلل ما هو عدم التزامن ؛ عندما ينشأ. كيف تؤثر على الشفرة التي نكتبها ولغة البرمجة التي نستخدمها. سنحاول معرفة ما يجب القيام به في المستقبل والوعود ، دعونا نتحدث قليلاً عن coroutines والممثلين. سنؤثر على JavaScript وأنظمة التشغيل. الغرض من التقرير هو جعل التنازلات التي تنشأ مع طريقة أو أخرى لتطوير البرامج متعددة مؤشرات التوزيع أو الموزعة أكثر وضوحًا.

بافيل بولاتوف. التبديل إلى WebAssembly: هل اللعبة تستحق الشمعة؟



سوف يناقش التقرير الحالة الحالية لـ WebAssembly فيما يتعلق بالمنتجات الحقيقية. سنتحدث عن تجربتنا في نقل التطبيق ، وما هي المشاكل التي نشأت وكيف قمنا بحلها.

تشمل الموضوعات التي يتم تناولها ما يلي:

  • دعم المعيار على منصات ومتصفحات مختلفة.
  • الأداء وحجم البناء مقابل asm.js.
  • التفاعل مع المتصفح.
  • أعطال بناء من المستخدم.
  • ميزات VM.

دميتري كوزيفنيكوف. مطبات CMake وأين يعيشون



أصبح نظام بناء CMake تدريجياً المعيار الواقعي لبرمجة C ++ عبر الأنظمة الأساسية. ومع ذلك ، غالبًا ما يتم انتقادها بشكل عادل ، بما في ذلك لغة البرمجة النصية غير المريحة ، والوثائق القديمة ، وحقيقة أن نفس المهام يمكن تنفيذها بطرق مختلفة ، وقد يكون من الصعب جدًا فهم أيها أكثر صحة في حالة معينة . سيقول المؤلف:

  • الأنماط الشعبية الشائعة المتكررة ولماذا تكون سيئة ،
  • في أي مستويات تجريد يعمل CMake ، ومتى "يتسرب" ،
  • ما هي "CMake الحديثة" وما هي مزاياها ،
  • كيفية توطين المشاكل وتصحيحها في نصوص CMake (بما في ذلك بعض النصوص الغريبة إلى حد ما).

سيرجي شامبير. عندما تكون الإجراءات C ++ جيدة



العمارة النظيفة للمشروع ، التجريد البسيط على كل طبقة هو حلم أي فريق. لتحقيق هذا الحلم ، تم اختراع العديد من التقنيات الموجهة للكائنات. ينسحب المطورون من قبل OOP ، ينسون مراقبة نظافة الشفرة عند تقاطع C و C ++. ومن هنا ، سيساعد النمط الإجرائي على استعادة النظام ، وبناء تجريدات مريحة وآمنة تتناسب بسهولة مع التعليمات البرمجية الشيئية للمشروع. سنكتشف:

  • لماذا تحتاج إلى عزل C API (مثل winapi و POSIX و SQLite و OpenGL و OpenSSL)
  • لماذا يعمل OOP بشكل سيئ في هذا العمل
  • كيف تكتب طبقة تجريد فوق واجهة برمجة تطبيقات C-style
  • كيفية التعامل مع الاستدعاءات ومعالجة الأخطاء وإدارة الموارد لجعل التعليمات البرمجية المعقدة والمربكة تقليديا مفهومة حتى بالنسبة للمبتدئين

إيفجيني زويف. API الدلالي لبرامج C ++



اهتماماته المهنية هي دلالات لغات البرمجة ، وتصميم وتنفيذ جامعي YaP ، وغيرها من الأدوات الموجهة نحو اللغة. من بين أهم الإنجازات المشاركة في مثل هذه المشاريع مثل إنشاء مترجم لمعيار لغة C ++ الكامل (Interstron ، موسكو ، 2000) ، وتنفيذ مترجم لغة Zonnon لـ .NET (ETH Zurich ، 2005) ، وتنفيذ النموذج الأولي Swift compiler لمنصة Tizen ( معهد سامسونج للأبحاث ، موسكو ، 2015).

إيفان شوكيتش. 2020: ملحمة void_t



لطالما كانت لغة C ++ لغة فرعية قوية في البرمجة الوصفية ، مما سمح لمطوري المكتبات بإجراء أعمال سحرية مثل الاستبطان الثابت لتحقيق التنفيذ متعدد الأشكال بدون وراثة. كانت المشكلة هي أن بناء الجملة كان محرجًا ومطلوبًا بلا داع مما جعل تعلم البرمجة الوصفية مهمة شاقة.

مع التحسينات الأخيرة على المعيار ، ومع الميزات المخطط لها لـ C ++ 20 ، أصبحت البرمجة الوصفية أسهل بكثير ، وأصبحت البرامج التعريفية أسهل في الفهم والسبب.

في هذا الحديث ، يقدم المؤلف بعض التقنيات الحديثة للبرمجة الوصفية ، مع التركيز بشكل رئيسي على الوظيفة السحرية void_t meta-function.

إيفجيني أوخوتنيكوف. الفاعلون في C ++: هل كان الأمر يستحق ذلك؟



كان كاتب التقرير مسؤولاً عن تطوير إطار مفتوح المصدر SObjectizer لمدة 16 عامًا. هذا هو واحد من عدد قليل من أطر الممثلين الحية والمتطورة عبر الأنظمة الأساسية لـ C ++. بدأ تطوير SObjectizer في عام 2002 ، عندما كانت C ++ من بين لغات البرمجة الأكثر شيوعًا وشائعة. على مدار الماضي ، تغير C ++ كثيرًا ، وتغير الموقف تجاه C ++ أكثر. سيناقش التقرير كيف أثرت هذه التغييرات على تطوير أداة ذات تاريخ 16 عامًا ومدى سهولة وملاءمة إنشاء مثل هذه الأداة للغة C ++. وما إذا كان من الضروري عمل مثل هذه الأداة لـ C ++ بشكل عام.

راينر جريم. أفضل الممارسات للتزامن في C ++ الحديثة



مع توحيد C ++ 11 ، حصلنا على مكتبة C ++ متعددة النماذج ونموذج ذاكرة. تحتوي المكتبة على اللبنات الأساسية مثل الذرات والخيوط والمهام والأقفال ومتغيرات الحالة. يوفر نموذج الذاكرة ضمانات للاستخدام الآمن للخيوط لكتل ​​البناء الأساسية هذه.

بعد سبع سنوات ، لدينا الكثير من أفضل الممارسات لتطبيق تعدد المسارات ونموذج الذاكرة بطريقة آمنة. حديث المؤلف هو بالتحديد حول أفضل الممارسات هذه للقواعد العامة للتوافق ، وقواعد خاصة لمكتبة متعددة المقالات ، وقواعد خاصة لنموذج الذاكرة. التركيز على أفضل الممارسات يتجاوز C ++.

أليكسي مالوف. خبرة في استخدام C ++ الحديثة في تطوير تطبيقات سطح المكتب



سيتحدث الحديث عن أدوات لغة C ++ ومكتبات Boost و STL ، وكذلك حول الأساليب المعمارية لبناء تطبيقات واجهة المستخدم الرسومية التي استخدمناها لتطوير أداة لإنشاء دروس الفيديو.

  • تمرن على استخدام نموذج عارض النموذج
  • إدارة دورة حياة الوثيقة
  • تخزين ملفات المؤشرات الذكية

سيرجي فاسيلييف. تحليل ثابت: هل تبحث عن أخطاء ... ونقاط ضعف؟



توجد أخبار حول الثغرة التالية التي يتم العثور عليها بانتظام هنا وهناك. خسائر الضمانات بالدولار ، كقاعدة عامة ، هائلة. لذلك ، بدلاً من إصلاح الثغرات الأمنية ، لا يجب السماح لها بالظهور.

طريقة واحدة للتعامل مع الأخطاء في التعليمات البرمجية هي استخدام التحليل الثابت. ولكن ما مدى ملاءمة البحث عن نقاط الضعف؟ وهل هناك بالفعل اختلاف كبير بين الأخطاء البسيطة والثغرات البرمجية؟

سنناقش هذه القضايا أثناء التقرير ، وفي الوقت نفسه سنتحدث عن كيفية استخدام التحليل الثابت لتحقيق أقصى استفادة منه.

ملاحظة

وحدي ، أود أن ألفت انتباهكم إلى المؤامرة المصغرة حول std :: string المتعلقة بتقارير زميلي أندريه كاربوف. لذا ، من أجل:

  1. جزء من تقرير أندريه (C ++ Russia 2016) "حكايات خاصة من مطوري محلل الشفرة" من 30:05 - الرابط .
  2. التصيد السهل لأشخاص مثلنا بواسطة أنطون بولوخين (C ++ Russia 2017) في تقرير "كيف لا تفعل ذلك: بناء دراجات C ++ للمحترفين" من الساعة 2:00 - الرابط .
  3. قصة أندري في مؤتمر C ++ Russia 2018 أننا لسنا ديناصورات ونتعلم شيئًا جديدًا: "فعالية C ++" من 12:21 - الرابط .

هذا كل شيء! استمتع بتقاريرك.

Source: https://habr.com/ru/post/ar418645/


All Articles