تخطَّ إلى المحتوى

الذاكرة: المخصصات وخاتمه

منقول من الكتاب المرجعي: docs/handbook/language/08-memory.md · الإيداع 7a52f6c

القاعدة (منذ 0.7.0). لا عدّ مراجع ولا جامع قمامة. كل نص يُبنى وكل قائمة وقاموس يُحجز من مخصص: الافتراضي إن لم يُذكر غيره. ما لا يُحرَّر يعود للنظام عند خروج البرنامج. التفصيل في memory.md (وثيقة في مستودع المجمّع) وallocators.md (وثيقة في مستودع المجمّع).

الأداة ما تفعله
حرر(س[, م]) يعيد نصاً أو قائمة أو قاموساً أو خانة أو شريحة الآن، ويجعل س لاشيء. لا يتبع ما في الحاوية
خاتمه جملة يؤجّل الجملة إلى الخروج من الكتلة (ومنه ارجع وتوقف وتجاوز)، بعكس الترتيب
ساحة(الاصل) مخصص يجمع ما يُحجز منه، واعد(ساحه) تعيده كله
كاشف(الاصل) مخصص يبلّغ عمّا لم يُحرَّر منه عند اعد أو النهاية
مخزن_ثابت(شريحة) مخصص فوق ذاكرة ثابتة؛ امتلاؤه خطأ تشغيل
قائمة_من([...], م) ونسخ(س, م) تبني الحاوية في مخصص
آخر وسيط مخصص في المدمجات والدوال اختياري: ما تبنيه يُحجز منه
الكاشف افتراضي في التشغيل المباشر (0.10.0؛ --release يلغيه، وbuild --debug يبنيه): التحرير المزدوج والاستعمال بعد التحرير أخطاء تشغيل؛ و--debug-mem يضيف التقرير عند النهاية
بلا_افتراضي (ترويسة) و--no-default-allocator كل حجز يذكر مخصصه صراحة
مثال
مجموع = 0
لكل دورة في مدى(0, 3):
ساحه = ساحة(الافتراضي)
خاتمه اعد(ساحه)
كلمات = تقسيم(دمج_نصوص("ا ب ج ", دورة, ساحه), " ", ساحه)
مجموع += طول(كلمات)
ن = "مرحبا " + نص(1)
خاتمه حرر(ن)
اطبع(مجموع, " ", ن)
المخرج المسجَّل في الكتاب المرجعيmeem برنامج.م · 0.10.0
12 مرحبا 1

القيود المعروفة. النص المؤقت في حلقة طويلة يبقى حتى الخروج إن لم يُحرَّر (ذروة الذاكرة؛ القياس في v1-readiness.md (وثيقة في مستودع المجمّع)). الاستعمال بعد التحرير عبر اسم آخر، وبعد اعد لساحته، يكشفه الكاشف (افتراضي في التشغيل المباشر منذ 0.10.0)؛ وفي الملف المبني بلا كاشف سلوك غير معرَّف. ما تضمنه اللغة وما لا تضمنه في memory-safety.md (وثيقة في مستودع المجمّع).

أخطاء محتملة.

مثال
م = جديد(1)
حرر(م)
حرر(م)
المخرج المسجَّل في الكتاب المرجعيmeem برنامج.م · 0.10.0
[خطأ تشغيل E0349] سطر 3:1 - تحرير مؤشر قيمته لاشيء (هل حُرّر من قبل؟)  حرر(م)

رمز الخروج: 3

في فهرس الأخطاء: E0349