17. المخصصات والساحات
الهدف
رابط إلى قسم «الهدف»أن تعرف من أين تُحجز ذاكرة برنامجك، وتعيدها بنفسك: نصاً نصاً بـ حرر، أو دفعة واحدة بساحة، وأن تكشف ما نسيته بـ --debug-mem، وما استعملته بعد إعادته بالكاشف.
الشرح
رابط إلى قسم «الشرح»- كل نص تبنيه، وكل قائمة وقاموس، يُحجز من مخصص. إن لم تذكر مخصصاً فمن
الافتراضي. - لا جامع قمامة ولا عدّ مراجع في ميم (حُذف عدّ المراجع في 0.7.0). ما لا تحرّره يبقى حتى يخرج البرنامج، ثم يعود كله إلى النظام.
- الساحة (
ساحة(الافتراضي)) مخصص يجمع كل ما يُحجز منه، واعد(الساحة)تعيده كله دفعة. والمدمجات التي تبني شيئاً تأخذ المخصص وسيطاً أخيراً. خاتمه اعد(ساحه)بعد إنشائها تضمن الإعادة عند الخروج من الكتلة، أياً كان المخرج.
مجموع = 0لكل دورة في مدى(0, 3): ساحه = ساحة(الافتراضي) خاتمه اعد(ساحه) كلمات = تقسيم(دمج_نصوص("ا ب ج ", دورة, ساحه), " ", ساحه) مجموع += طول(كلمات)اطبع("كلمات في الدورات الثلاث: ", مجموع)كيف تعرف ما نسيته: شغّل البرنامج بالخيار --debug-mem. يطبع في آخره كل سطر حجز ولم يحرّر، بعدد كتله وحجمه:
لكل ع في مدى(0, 3): ن = "سطر " + نص(ع) اطبع(ن)حدود الأمان اليوم (0.10.0): الفهرسة والحساب محميان دائماً، والقائمة أو القاموس بعد حرر بالاسم نفسه خطأ E0428 في كل الأوضاع. والاستعمال بعد التحرير عبر اسم آخر، أو بعد اعد لساحته، يكشفه الكاشف الافتراضي في التشغيل المباشر (E0429)، أما في الملف المبني بلا --debug فسلوك غير معرَّف. هذه قائمة من ساحة استُعملت بعد اعد، بالتشغيل المباشر بلا أي خيار:
ساحه = ساحة(الافتراضي)ق = قائمة_من([1, 2, 3], ساحه)اعد(ساحه)اطبع(ق[0])رمز الخروج: 3
في فهرس الأخطاء: E0429
التفصيل في الذاكرة في ميم.
تمرين
رابط إلى قسم «تمرين»أصلح البرنامج أعلاه بحيث لا يطبع --debug-mem تقريراً، واجمع أطوال النصوص الثلاثة.
اعرض الحل
مجموع = 0لكل ع في مدى(0, 3): ن = "سطر " + نص(ع) خاتمه حرر(ن) اطبع(ن) مجموع += طول(ن)اطبع("الأحرف: ", مجموع)الأخطاء الشائعة
رابط إلى قسم «الأخطاء الشائعة»- نسيان التحرير في حلقة طويلة: لا خطأ، لكن الذاكرة تكبر حتى الخروج. يكشفه
--debug-memبالسطر، وينبّه إليه--strictبالتحذير E0270 للنص المؤقت في الحلقة. - تحرير الشيء نفسه مرتين عبر اسمين: «تحرير مزدوج» يكشفه الكاشف (E0350 للقائمة والقاموس، وE0431 للنص، وE0421 للخانة). وفي الملف المبني بلا كاشف يُسقط البرنامج.
- استعمال قائمة أو قاموس بعد
حررأو بعداعدلساحتها: خطأ تشغيل بالكاشف، وسلوك غير معرَّف في الملف المبني بلا كاشف. لا تلمس ما حرّرته.
اقرأ أيضاً
رابط إلى قسم «اقرأ أيضاً»الذاكرة في ميم · مرجع الذاكرة · الحجز والأداء في المدمجات