الحجز والأداء في المدمجات
مصدر هذه الصفحة جدول «الحجز دون ذكر مخصص» في تقرير التوجّه 0.9.1 بمستودع المجمّع، أعدنا قياسه على 0.10.0 بالطريقة نفسها: كل عملية في برنامج مستقل، مئة مرة، تحت --debug-mem. والقاعدة في 0.10.0: لا حجز إلا ما تراه في الشيفرة (مدمجة تبني شيئاً، أو +، أو قيمة حرفية)، والاستثناء الوحيد نمو +=.
من يحجز، ومن يحرّر
رابط إلى قسم «من يحجز، ومن يحرّر»| العملية | كم كتلة | من يحرّر |
|---|---|---|
س = "ا" + نص(ع) |
1 | أنت (حرر(س) أو ساحة). وممنوع في وحدة بلا_افتراضي |
دمج نصين يُمرَّر مباشرة إلى اطبع أو مقارنة |
0 | يُحرَّر وحده |
نص(ع)، دمج_نصوص، قص، استبدال، حروف_كبيرة، رياضيات.نسق، اقرأ()، اقرأ_ملف |
1 | أنت |
قائمة حرفية [ع, ع]، ونسخ(ق) |
2 (رأس وبيانات) | أنت |
قاموس حرفي {"ك": ع} |
4 | أنت |
قائمة قوائم [[ع], [ع]] |
6، وحرر الخارجية يترك 4 |
أنت، عميقاً بيدك |
تقسيم("ا,ب,ج", ",") |
5 (القائمة و3 نصوص) | أنت، وحرر(القائمة) لا يحرّر نصوصها |
مفاتيح(د) |
قائمة ونسخة لكل مفتاح | أنت |
قيم(د)، نظام.وسائط() |
2 | أنت |
| إدراج مفتاح نصي جديد في قاموس | نسخة من المفتاح | القاموس، عند احذف أو حرر |
ن += "ب" متكرراً |
يكبر بالتضاعف | لا أحد: المخزن القديم يبقى (مئة إلحاق تركت 4 مخازن) |
د["ا"] = [ع] فوق قائمة سابقة |
2 | أنت، قبل الإسناد (وإلا تسرّبت السابقة) |
عرض إلى طول، ==، <، الفهرسة، لكل، مفتاح قاموس، يوجد، عدد()، كسر()، يحوي، بحث، يبدأ_بـ |
0 | — |
«العرض» ناتج جزء وقص_الفراغات ومسارات.الامتداد ومسارات.المجلد ومسارات.اسم_الملف: نص على بايتات نص آخر بلا نسخ، يعيش بعمر نصه الأصل. وفي 0.9.1 كان تمرير العرض إلى العمليات في الصف الأخير يحجز نسخة لا تُعاد في كل مرة (أبقى سطر واحد في لعبة إكس-أو 1.1 مليون كتلة حتى الخروج). أُزيل ذلك في 0.10.0: القياس نفسه يعطي 0 كتلة.
كيف تعرف: --debug-mem يذكر السطر وعدد الكتل، لا العملية.
ملاحظات الأداء
رابط إلى قسم «ملاحظات الأداء»- فهرسة النص بالحرف
ن[ف]تمرّ على النص من أوله في كل نداء: 20 ألف فهرسة في 2.2 ث على نص واحد. ولكل ح في نتمرّ عليه مرة واحدة. - البناء الساكن الافتراضي (musl) أبطأ من
--dynamic(glibc) بـ 1.2 إلى 1.6 مرة في البرامج الكثيرة الحجز. - الكاشف، وهو افتراضي في التشغيل المباشر منذ 0.10.0، أبطأ من
--releaseبـ 0% إلى 32% على برامج القياس في مستودع المجمّع، وما يُحرَّر في وضعه لا يُعاد إلى النظام. فبرنامج طويل العمل يحرّر كثيراً يُشغَّل بـ--releaseأو يُبنى بـmeem build.
لكل مدمجة
رابط إلى قسم «لكل مدمجة»احذف
على القاموس يحرّر نسخة المفتاح النصي التي يملكها القاموس.
استبدال
يحجز نصاً جديداً؛ تحرّره أنت.
اضف
تكبير القائمة يحرّر مخزنها القديم: لا تسرب من النمو نفسه.
اطبع
ناتج دمج نصين بـ + يُمرَّر إليها مباشرة يُحرَّر وحده بعد الطباعة. وكذلك ناتج مدمجة مثل نص(ع) داخله، أما ناتج دالة تكتبها أنت داخل ذلك الدمج فلا يُحرَّر.
اقرأ
يحجز نسخة من السطر المقروء؛ تحرّرها أنت.
بحث
لا يحجز، ولو على عرض.
تقسيم
يحجز القائمة ونصاً لكل قطعة (نسخاً لا عروضاً). حرر(القائمة) لا يحرّر نصوصها، فاستعمل ساحة لما يكثر.
جزء
يرجع عرضاً على النص الأصل بلا نسخ، واستعماله بعدُ (طول، مقارنة، فهرسة، لكل، عدد()، مفتاح قاموس) لا يحجز منذ 0.10.0. والعرض يعيش بعمر نصه الأصل: استعماله بعد تحرير الأصل يكشفه الكاشف (E0430)، وفي الملف المبني بلا كاشف سلوك غير معرَّف.
حاول_احجز
حجم صالح لا تتسع له الذاكرة يرجع خطأ.لا_ذاكرة. أما حجم «غير صالح» جداً (مثل 10^14) فخطأ تشغيل E0366 لا يُلتقط.
حرر
لا يتبع ما في داخل الحاوية: تحرير قائمة قوائم يترك الداخلية، وتحرير قائمة من تقسيم يترك نصوصها. ويجعل المتغير لاشيء، فاستعمال القائمة أو القاموس بالاسم نفسه بعده خطأ E0428 في كل الأوضاع. والاستعمال أو التحرير المزدوج عبر اسم آخر يكشفه الكاشف (E0429، E0430، E0431، E0350)، وفي الملف المبني بلا كاشف سلوك غير معرَّف.
حروف_كبيرة
يحجز نصاً جديداً؛ تحرّره أنت.
دمج_نصوص
يحجز نصاً جديداً؛ تحرّره أنت.
رتب_ب
مخزن الدمج المؤقت يُحرَّر وحده.
طول
على النص يعدّ الأحرف بالمرور عليه، ولا يحجز ولو على عرض.
عدد
لا يحجز، ولو على عرض (إلا نسخة مؤقتة للأرقام الهندية تُحرَّر).
قص
يحجز نصاً جديداً؛ تحرّره أنت.
قص_الفراغات
مثل جزء: عرض بلا نسخ، واستعماله لا يحجز. ويعيش بعمر نصه الأصل.
قيم
يحجز قائمة جديدة (رأساً وبيانات).
كسر
لا يحجز، ولو على عرض.
مفاتيح
يحجز قائمة ونسخة لكل مفتاح نصي: «لكل ك في مفاتيح(د)» تنسخ المفاتيح كلها. والمرور على القاموس نفسه «لكل ك في د» لا ينسخ.
نسخ
يحجز نسخة جديدة (للقائمة رأس وبيانات).
نص
يحجز نصاً جديداً من المخصص الأخير أو الافتراضي؛ تحرّره أنت (حرر أو ساحة).
يبدأ_بـ
لا يحجز، ولو على عرض.
يحوي
لا يحجز، ولو على عرض.