في العام الماضي (لقد مر عام كامل تقريبًا بالفعل) ، فقد تحولنا مع ذلك إلى الإصدار الجديد من Boost-1.65.1 ، وتحت غطاء محرك السيارة سوف تجد أخطاء التعزيز الثلاثة التي واجهناها. من المهم أيضًا الإشارة إلى أنه قبل ذلك ، تم استخدام التعزيز -1.62.1 في برنامجنا ، نظرًا لأن بعض الأخطاء ظهرت قبل الإصدار 1.65.1
يحتوي مشروعنا على فريق تكامل خاص ، تتمثل مهمته الرئيسية في نقل جميع البرامج إلى إصدار جديد من المكتبات ، Visual Studio ، وإصدارات جديدة من مكونات منخفضة المستوى (أساسية ، تعتمد عليها معظم المكونات الأخرى) ، إلخ. فريق التكامل مسؤول أيضًا عن التخلص من جميع المشكلات التي تنشأ ، بشكل طبيعي بمساعدة صانعي المكونات ، إذا لزم الأمر. لذلك ، الأخطاء التي أتذكرها بشكل خاص.
علة في دفعة :: نظام الملفات
ظهر هذا الخطأ بسرعة كافية. بدأت الاختبارات في التعطل مع "انتهاك الوصول" عند البحث عن المسار الكامل لاسم الملف المحدد. قامت الوظيفة بإجراء مكالمة لتعزيز :: filesystem :: موجودة ، وتعطل البرنامج. تشغيل عدد قليل من الاختبارات الأخرى ، تم ملاحظة العديد من الحالات المماثلة الأخرى ، وفي جميع الحالات ، تم إجراء استدعاء التعزيز :: filesystem :: exist للمتغيرات العامة. على ما يبدو ، لقد تغير شيء ما في عمر متغيرات التعزيز. من السهل جدًا استخدام
تذكرة الأخطاء التي تم اكتشافها في google
على بطاقة علة في دفعة :: filesystem :: موجودةاتضح أن هذا الخطأ حصل على دفعة ، بدءًا من الإصدار 1.64. في الواقع ، كانت المشكلة في استدعاء make_permissions (المستخدمة في نظام الملفات :: موجودة). في 1.64 ، تم تغيير تنفيذ make_permissions ويستخدم الآن المتغيرات العامة ، مما يعني أنه عند إجراء محاولة لاستدعاء نظام الملفات :: موجود عند تهيئة متغير أو كائن عام ، فإن المتغيرات العامة المستخدمة في make_permissions قد لا تتم تهيئتها بعد. لذلك ، فإن محاولة الوصول إلى متغير غير محدد تلقي استثناء.
الحلبالنسبة للاختبارات التي تم فيها استخدام المتغيرات العالمية مرة واحدة فقط ، تم نقلها إلى الاختبارات المقابلة وأصبحت متغيرات محلية. لا تسأل حتى عن سبب عدم القيام بذلك من قبل ، فأنا لست المشرف على هذا الرمز.
في حالات أخرى ،
تم استخدام
أحرف مفردة .
علة في دفعة :: بيثون
في الاختبارات التي تستخدم الداعم :: python ، تم اكتشاف شيء غريب. عند إجراء مكالمة تافهة إلى eval () لحرفية (على سبيل المثال ، "40 + 2") ، كل القواعد. وإذا قمت بتعريف المتغيرات ثم استخدمتها في التعبيرات ، فسوف نحصل على رسالة تفيد بأن الحسابات تستخدم متغيرات غير محددة (الخطأ: [اسم] غير محدد). لحل هذه المشكلة ، قضيت المزيد من الوقت. لم أتمكن من العثور على تذكرة لهذه المشكلة في تعقب التعزيز ، لذلك كان يجب علي طلب المساعدة من فريق هذا المكون. تم العثور بسرعة
على معلومات حول الخطأ
على جيثب .
لقد حدث أنه في تنفيذ eval ، لم يتم استخدام الكائنات العالمية والمحلية. بعد تمنياتنا
بالتوفيق في العثور على إصلاح دون إعادة ترجمة التعليمات البرمجية المصدر ، أخذ الفريق إجازة :)
الحلولكن بعد ذلك تذكرت
ملاحظات الإصدار for boost-1.65.1 وكان هناك بالتأكيد شيء هناك ل boost :: python.
الصيحة ، هناك طريقة! تم السماح لهذا الخطأ عند إضافة تطبيق جديد من eval مع دعم للوسيطة char const * ، والتي تسمى الآن في التطبيق القديم من eval باستخدام وسيطة سلسلة (خاصة تلك التي قد تكون حذرة قد تلاحظ استدعاء هذه الوظيفة في التعليمات البرمجية عبر رابط github). ومن المتوقع أن تعمل الميزة الجديدة.
دفعة :: numpy
هذا هو الجزء الأقل المفضل لدي. دفعة :: python :: numeric تمت إزالتها والآن تمت إضافة دفعة :: python :: numpy كبديل. لكن الكود الذي استخدم الرقم الرقمي كان يجب إعادة تصميمه إلى حد كبير ، لأن النقطة لم تكن فقط إعادة تسمية مساحة الاسم ، ولكن أيضًا لتطبيق الكائنات.
بالإضافة إلى ذلك ، كان هناك تضليل في رأس التعزيز الذي ضللني.
وفقًا للتعليق في المصدر ، تم إجراء استدعاء import_array () بالفعل في numpy :: initialize ():
namespace boost { namespace python { namespace numpy { BOOST_NUMPY_DECL void initialize(bool register_scalar_converters=true); }}}
ولكن في الواقع ، كما اتضح ، مطلوب import_array ().
بالإضافة إلى ذلك ، كانت هناك مشاكل في اختبار التغييرات ، لأن أجزاء من الشفرة ذات numpy (سابقًا مع دفعة :: python :: numeric) لم تتم تغطيتها على الإطلاق عن طريق الاختبارات ، كما تم استخدام الشفرة نفسها أيضًا في مكون آخر. لذلك ، تم تحديد المشكلات فقط عند اختبار المكون المقابل. لا يُطلب من فريق التكامل كتابة اختبارات للمكونات ، وكان هذا الموقف بمثابة إغفال للفريق نفسه. واو ، سمعت منهم بما فيه الكفاية أنني كسرت رمزهم. لكن بعد تذمر الفريق ، قاموا أخيرًا بتغطية الكود الخاص بهم بالاختبارات. ومع ذلك ، بقي الاستياء (أثناء الترحيل التالي ، لم يرغب الفريق في منح زميلي حق الوصول إلى
مكونه ، مع الإشارة إلى أنه في المرة الأخيرة التي كسرنا فيها الكود الخاص بهم.
ساشا ، سوريان! لكن بعد ثلاثة أيام من المفاوضات
تخلىوا ).
الخاتمة
بعد الانتهاء من العمل ، يمكنني ملاحظة الإيجابيات بنفسي ، حيث لم يتم استخدام التعزيز في كثير من الأحيان من قبل (بشكل رئيسي الأمراض المنقولة جنسيا) ، لذلك يمكن التأكيد على الكثير من الهجرة. إنه أمر مضحك ، ولكن الحقيقة هي ، بعد هذا السبب ، لسبب ما ، أن تتخلف عن أن تصبح "خبيراً مدعوماً" للعديد من الزملاء ، والتوفيق ، سوف تُطرح عليك أسئلة لبعض الوقت.
بالمناسبة ، في السنوات الأخيرة ، بدأت العديد من الشركات في التخلص بنشاط من دفعة واستبدال مكتبة الأمراض المنقولة جنسيا إذا كان ذلك ممكنا ، أو أي شيء آخر في حالة عدم وجود أي ميزات في المكتبة القياسية. ونحن ، أيضا ، لم نقف جانبا. بدأت العملية ، ولكن لم تكتمل ، لا يزال هناك الكثير من العمل.