ما هو «خطر»؟
باختصار: خارج خطر يفحص المجمّع الحدود والتجاوز ويمنع العمليات الخام. داخل خطر: تكتب ما لا يُفحص: ذاكرة خام، وفهرسة مؤشر خام بلا طول، وتحويل بين أنواع المؤشرات، وبلا_فحص لتعطيل فحص بعينه. الخطأ هناك مسؤوليتك، لكنه محصور في كتلة تراها.
متى تحتاجه
رابط إلى قسم «متى تحتاجه»- ذاكرة خام:
احجز_خام(النوع, العدد)وفهرستها، لمخزن تمرّره إلى C مثلاً. - مؤشر خام (
مؤشر_خام) يأتي من C، وقراءة ما يشير إليه. - التفاعل مع C حين يتطلب ذاكرة لا تديرها ميم: مخزن تملؤه دالة C، أو نص C بلا صفر في آخره.
- تعطيل فحص بعينه بـ
بلا_فحصفي حلقة تعرف أنها آمنة.
وخارجي نفسه (التصريح بدالة C واستدعاؤها) لا يحتاج خطر حين تكون الأنواع عادية:
خارجي "m" داله جذر_c(س كسر) كسر باسم "sqrt"خارجي داله طول_c(ن نص) حجم باسم "strlen"اطبع(جذر_c(2.0))اطبع("ميم بالبايتات: ", طول_c("ميم"), "، وبالأحرف: ", طول("ميم"))خطر: م = احجز_خام(عدد32, 3) م[0] = 10 م[1] = 20 م[2] = 30 اطبع(م[0] + م[1] + م[2]) حرر(م)ولماذا لا يحتاجه المبتدئ
رابط إلى قسم «ولماذا لا يحتاجه المبتدئ»القوائم والقواميس والهياكل والوحدات القياسية تكفي أغلب البرامج، وكلها مفحوصة. والعملية الخام خارج خطر خطأ ترجمة:
م = احجز_خام(عدد, 2)رمز الخروج: 2
في فهرس الأخطاء: E0414
يحصر الخطر في مكان ظاهر
رابط إلى قسم «يحصر الخطر في مكان ظاهر»حين يسقط برنامج بخطأ ذاكرة، تبحث أولاً في كتل خطر: هي الأماكن الوحيدة التي أُطفئ فيها الفحص. وخطر داله تجعل الدالة كلها خطرة، ومن يستدعيها يحتاج خطر أيضاً.
لكن تنبّه: ليست كل أخطاء الذاكرة داخل خطر. استعمال قائمة بعد حرر عبر اسم آخر ممكن في شيفرة عادية: يكشفه الكاشف في التشغيل المباشر، وفي الملف المبني بلا كاشف سلوك غير معرَّف. التفصيل في الذاكرة في ميم.
--no-unsafe يمنعه
رابط إلى قسم «--no-unsafe يمنعه»لتشغيل شيفرة لا تثق بها (برنامج من غيرك، أو تمرين طالب)، الخيار --no-unsafe يرفض أي خطر، و--no-ffi يرفض خارجي، و--no-system يرفض الوحدتين ملفات ونظام:
خطر: م = احجز_خام(عدد32, 1) م[0] = 5 اطبع(م[0]) حرر(م)رمز الخروج: 2
في فهرس الأخطاء: E0415
هذه الخيارات تقيّد ما يُكتب، ولا تعزل البرنامج: هو يعمل بصلاحياتك كاملة.
اقرأ أيضاً
رابط إلى قسم «اقرأ أيضاً»الدرس 18: «خطر» واستدعاء C · الطبقة المنخفضة · استدعاء C · ما يستطيعه البرنامج على جهازك