سؤال

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

تحرير: عن طريق الاستقرار، أعني أن الرمز يعمل كما هو مخصص.

هل كانت مفيدة؟

المحلول

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

من النادر عن الأخطاء للنشر من خلال أجيال مترجم عن طريق الصدفة (على الرغم من لقد حدث ذلك عن قصد ).

نصائح أخرى

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

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

الحل سيكون لجعل مترجم من الجودة الكافية أن الأخطاء نادرة جدا، ونادرة للغاية داخل المحول البرمجي.نتوقع أيضا وجود بقية مترجم تؤثر على رمز معقد للغاية أكثر، لذلك يجب على كاتب التحويل البرمجي كتابة التعليمات البرمجية البسيطة ويتبع أنماط الترميز الشائعة.

إجابة واحدة هي الاختبار والاختبار والاختبار.على سبيل المثالتأتي دول مجلس التعاون الخليجي مع مجموعة متزايدة من الاختبارات التي يتم فحصها في كل مرة يتم فيها إنشاء المحول البرمجي.هناك حاجة إلى العديد من المترجمين لتمرير ما يسمى بالاختبار الثلاثي: ترجمة التعليمات البرمجية للمترجم الخاص بك باستخدام برنامج التحويل البرمجي A، إعطاء C_1؛ترجمة C مع C_1 إعطاء C_2، Compile C مع C_2 إعطاء C_3.تم تجميع الآن C_2 و C_3 مع C، ويجب أن تكون متساوية.إذا لم يكن الأمر كذلك، فإن شيئا ما يحدث.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top