logo

ترجمة الوقت مقابل وقت التشغيل

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

أخطاء وقت الترجمة

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

يمكن أن تكون أخطاء وقت الترجمة:

  • أخطاء في بناء الجملة
  • الأخطاء الدلالية

أخطاء في بناء الجملة

عندما لا يتبع المبرمج بناء جملة أي لغة برمجة، فسيقوم المترجم بإلقاء خطأ في بناء الجملة.

على سبيل المثال،

اتصالات في جافا

كثافة العمليات أ، ب:

ينشئ الإعلان أعلاه خطأ وقت الترجمة كما هو الحال في لغة C، حيث تنتهي كل عبارة بفاصلة منقوطة، لكننا نضع نقطتين (:) في نهاية العبارة.

الأخطاء الدلالية

توجد الأخطاء الدلالية عندما لا تكون العبارات ذات معنى للمترجم.

على سبيل المثال،

أ+ب=ج;

البيان أعلاه يلقي أخطاء وقت الترجمة. في البيان أعلاه، نقوم بتعيين قيمة 'c' إلى مجموع 'a' و'b' وهو أمر غير ممكن في لغة البرمجة C لأنه يمكن أن يحتوي على متغير واحد فقط على يسار عامل التعيين بينما على يمين يمكن أن يحتوي عامل التعيين على أكثر من متغير واحد.

يمكن إعادة كتابة العبارة أعلاه على النحو التالي:

ج=أ+ب;

أخطاء وقت التشغيل

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

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

القسمة على صفر:

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

 #include int main() { int a = 10; int b = 0; int result = a / b; // Division by zero printf('Result: %d
', result); return 0; } 

انتاج:

 Floating point exception (core dumped) 

توضيح:

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

الوصول إلى المصفوفة خارج الحدود:

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

 #include int main() { int arr[5] = {1, 2, 3, 4, 5}; int index = 10; int value = arr[index]; // Accessing array out of bounds printf('Value: %d
', value); return 0; } 

انتاج:

قفل تطبيق أندرويد
 Segmentation fault (core dumped) 

توضيح:

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

عدم مرجعية المؤشر الفارغ:

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

 #include int main() { int* ptr = NULL; // Null pointer int value = *ptr; // Null pointer dereference printf('Value: %d
', value); return 0; } 

انتاج:

 Segmentation fault (core dumped) 

توضيح:

المحاولة ل عدم المرجعية يؤدي المؤشر الفارغ إلى أ خطأ تجزئة مما يؤدي إلى تعطل البرنامج مع ظهور رسالة خطأ.

تجاوز سعة المكدس:

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

 #include void recursiveFunction() { recursiveFunction(); // Recursive call without termination condition } int main() { recursiveFunction(); return 0; } 

انتاج:

 Segmentation fault (core dumped) 

توضيح:

يبدأ البرنامج العودية التي لا نهاية لها ، الذي يفيض على المكدس ويسبب خطأ تجزئة.

المتغيرات غير المستخدمة:

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

 #include int main() { int uninitializedVariable; printf('Value: %d
', uninitializedVariable); // Using uninitialized variable return 0; } 

انتاج:

 Some random value (varies each time) 

توضيح:

الفرق بين الشركة والشركة

في هذا المثال، قيمة متغير غير مهيأ يمكن أن تكون أي قيمة عشوائية يتم اختيارها عشوائيًا من منطقة الذاكرة المخصصة لذلك المتغير.

دعونا نلقي نظرة على الاختلافات بين وقت الترجمة ووقت التشغيل:

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

مثال على خطأ وقت الترجمة

 #include int main() { int a=20; printf('The value of a is : %d',a): return 0; } 

في الكود أعلاه، حاولنا طباعة قيمة 'a'، لكنها تظهر خطأ. نضع النقطتين في نهاية العبارة بدلاً من الفاصلة المنقوطة، لذلك يولد هذا الكود خطأ في وقت الترجمة.

انتاج |

ترجمة الوقت مقابل وقت التشغيل

مثال على خطأ وقت التشغيل

 #include int main() { int a=20; int b=a/0; // division by zero printf('The value of b is : %d',b): return 0; } 

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

انتاج |

ترجمة الوقت مقابل وقت التشغيل

خاتمة:

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

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