الطبقة المنخفضة: خطر والشرائح والمؤشرات
منقول من الكتاب المرجعي: docs/handbook/language/09-low-level.md · الإيداع 7a52f6c
القاعدة (منذ 0.7.0). عمليات الذاكرة الخام داخل خطر: (كتلة) أو خطر داله، ويمنعها --no-unsafe. التفصيل وقرارات
التصميم في low-level.md (وثيقة في مستودع المجمّع).
| الصيغة | أين | ما تفعله |
|---|---|---|
احجز(نوع, عدد[, م]) |
أي مكان | كتلة مصفَّرة شريحة شريحة[نوع] بفحص حدود؛ حرر(ش[, م]) |
حاول_احجز(...) |
أي مكان | مثلها، لكنها !شريحة[نوع]: عند الفشل خطأ.لا_ذاكرة (منذ 0.7.0) |
احجز_خام(نوع, عدد[, م]) |
خطر |
الكتلة مؤشراً مؤشر[نوع]، فهرسته م[ف] بلا فحص (يفحصها --debug-mem) |
شريحة(م, طول) وشريحة_خام(خ, نوع, طول) |
خطر |
شريحة فوق مؤشر أو ذاكرة من C |
قطعة(ش, من, الى) |
أي مكان | جزء من شريحة بفحص |
حوّل(قيمة, نوع) |
خطر |
مؤشر إلى مؤشر، ومؤشر إلى مؤشر_خام وعكسه، وشريحة إلى شريحة |
حجم_النوع(نوع) |
أي مكان | بايتات العنصر |
بلا_فحص تعبير |
خطر |
فهرسة بلا فحص حدود، وكتابة تُقطع بلا فحص مدى |
جديد(قيمة[, م]) ومحتوى(م) وحرر(م) |
أي مكان | خانة واحدة على الكومة |
الأنواع بحجم ثابت (عدد8 إلى طبيعي64، بايت، كسر32) عناصر تخزين: القراءة تمدّد إلى عدد أو كسر، والكتابة
خارج المدى خطأ تشغيل إلا داخل بلا_فحص. والتحويلات عدد8(س)… تفحص المدى كذلك.
ش = احجز(بايت, 4)ش[0] = 200اطبع(ش, " ", طول(ش), " ", حجم_النوع(عدد32))خطر: م = احجز_خام(عدد32, 2) م[1] = -5 اطبع(م[0] + م[1], " ", بلا_فحص طبيعي8(300)) حرر(م)حرر(ش)القيود المعروفة. لا حساب عناوين على المؤشر (م + 1). المؤشر لا يحمل طولاً: فهرسته خارج الكتلة سلوك غير معرَّف في
التشغيل العادي. ذاكرة من C لا يفحص حدودها الكاشف.
أخطاء محتملة.
م = احجز_خام(عدد, 2)رمز الخروج: 2
في فهرس الأخطاء: E0414
ش = احجز(بايت, 2)ش[0] = 256رمز الخروج: 3
في فهرس الأخطاء: E0328