سجل التغييرات القديم (0.5 إلى 0.6)
المصدر: CHANGELOG.md في مستودع المجمّع، والوثائق التي يحيل إليها. هذه الصفحة تقف عند 0.6.0؛ وما تغيّر بعدها في صفحات الترحيل: من 0.6 إلى 0.7، وإلى معالجة الأخطاء، ومن 0.7 إلى 0.8. و0.9 بلا ميزة لغة جديدة (جرّب 0.9 معنا).
0.6.0
رابط إلى قسم «0.6.0»تغيّر
رابط إلى قسم «تغيّر»- تجاوز عمق العودية يلتقطه حارس المكدس بدل عدّاد الاستدعاءات المتداخلة، في التشغيل المباشر والملف المبني (ساكناً وحركياً). الرسالة صارت بلا سطر ولا اسم دالة، والرمز 3 كما كان. الحدّ لم يعد 100000 استدعاء بل ما يتسع له مكدس 256 م.ب. العودية الذيلية لا تُحوَّل حلقة حتى مع التحسين، فالعودية بلا توقف خطأ تشغيل في كل وضع.
داله بلا_توقف(ن عدد) عدد: ارجع بلا_توقف(ن + 1) + 1
اطبع("قبل")اطبع(بلا_توقف(0))رمز الخروج: 3
في فهرس الأخطاء: E0342
بُني أيضاً بـ meem build عند بناء الموقع: ملف ساكن حجمه 30.4 ك.ب، شُغّل وحده وطابق مخرجه المخرج أعلاه.
meem buildمحسَّن افتراضياً (مسار O2 في LLVM).-O0يعيده إلى التحسين الخفيف (أسرع بناءً).-Oمقبول ولا أثر له. وخرج البناءbuild.optimizedصواب افتراضياً.- خطأ الذاكرة الذي لا علاقة له بالمكدس (من دالة C مثلاً) يُعطِّل البرنامج كما كان من قبل (رمز 139).
meem build --cpu=native: تعليمات معالج هذا الجهاز (للبناء المحلي؛ الملف قد لا يعمل على معالج أقدم).features:build-o0،cpu-native،stack-guard.
أُصلح
رابط إلى قسم «أُصلح»--check --jsonعلى ملف ليس UTF-8 يطبع سطر JSON صالحاً فيه التشخيص (phase: lexical، بسطره وعموده)، لا نصاً. عقد الأدوات.--check --stdinبمدخل ليس UTF-8 ينتهي بالتشخيص نفسه (JSON أو نص) لا بانهيار.
الأرقام في الأداء.
0.5.2
رابط إلى قسم «0.5.2»- تحسين خفيف على شيفرة LLVM في كل تشغيل: المتغيرات في مسجِّلات لا في الذاكرة. لا يتغير ناتج أي برنامج.
- دمج النصوص والإلحاق بلا
snprintf: القطع تُنسخ مباشرة. meem build -O: مسار O1 للملف المبني. أسرع تنفيذاً وأطول بناءً.
الأرقام ومنهج قياسها في الأداء.
meem --list-options [--json]: خيارات سطر الأوامر، ما يأخذه كلٌّ منها ومتى أُضيف. سطر الأوامر.features:build-opt،list-options. وخرج البناء فيهbuild.optimized.
تغيّر (كاسر)
رابط إلى قسم «تغيّر (كاسر)»حالاتعلىكسرخطأ ترجمة. قارن بـاذا.
ك = 2.5حالات ك: حاله 2.5: اطبع("كسر")رمز الخروج: 2
في فهرس الأخطاء: E0217
- حقل بلا قيمة افتراضية بعد حقل له قيمة افتراضية خطأ ترجمة: الحقول الافتراضية في آخر الهيكل.
كسر(نص)تقبل العشري والأسّي و"inf"و"+inf"و"-inf"و"nan"فقط. الست عشري و"Infinity"خطأ تشغيل، وعدد يتجاوز مدى الكسر ("1e400") خطأ تشغيل.ملفات.اقرأ_ملفترفض ما ليس UTF-8 وما فيه بايت صفري بخطأ تشغيل.- قراءة
حاوية[م].مصفوفة[ف()]محددة الآن: ما كان في المصفوفة قبل تقييم الفهرس.
التفصيل في التعابير.
0.5.1
رابط إلى قسم «0.5.1»- وحدات قياسية، كلها تعمل في التشغيل المباشر وفي
meem buildبالنتيجة نفسها، ومع--no-ffi:نظام:وسائط()،بيئة(اسم)،انهِ(رمز)،الوقت()،مؤقت().ملفات(تجريبية):اقرأ_ملف،اكتب_ملف،الحق_بملف،يوجد_ملف. الفشل خطأ تشغيل برمز 3.عشوائي:صحيح(من, الى)،كسر()،بذرة(ن)؛ مولّد حتمي لا يتغير تسلسله بين المنصات.رياضيات.نسق(ك, خانات): الكسر نصاً بعدد خانات ثابت.
- المدمجة
انتهى_الدخل(): تميّز نهاية الإدخال من السطر الفارغ. meem ملف.م -- وسائط: ما بعد--وسائط للبرنامج. الملف المبني يأخذها من سطر أوامره.
استورد نظامو = نظام.وسائط()اطبع(طول(و), " ", و)لكل وسيط في و: اطبع("- ", وسيط)بُني أيضاً بـ meem build عند بناء الموقع: ملف ساكن حجمه 40.5 ك.ب، شُغّل وحده وطابق مخرجه المخرج أعلاه.
شرحها وأمثلتها في المكتبة القياسية.
تغيّر
رابط إلى قسم «تغيّر»- أخطاء الاستعمال (رمز الخروج 1) وسطر فشل
--self-testعلى stderr. القاعدة الآن واحدة: كل تشخيص على stderr، وstdout لمخرجات البرنامج ونتيجة--jsonوقوائم--list-*. - دالة للمستخدم اسمها
انتهى_الدخلتحجب المدمجة (بتحذير)، كما مع كل مدمجة.
0.5.0
رابط إلى قسم «0.5.0»إصدار فيه تغييرات كاسرة. برنامج كان يعمل في 0.4 قد يحتاج تعديلاً.
عامل الدمج القديم أُلغي
رابط إلى قسم «عامل الدمج القديم أُلغي»استعماله خطأ ترجمة، ولا يُنفَّذ من البرنامج شيء. البديل: + بين نصين مع التحويل الصريح، أو الفاصلة داخل اطبع:
رسالة = "العدد " + نص(5)اطبع(رسالة)اطبع("العدد ", 5)- للتحويل الآلي شغّل
meem --fixبالإصدار 0.4 قبل الترقية.--fixفي 0.5.0 لا يحوّله. - معرّف الصيغة المهجورة
concat-dotsخرج من--list-deprecated، والعامل خرج منoperatorsفي--list-keywords.
القواعد كلها في التعابير.
أخطاء الترجمة على stderr
رابط إلى قسم «أخطاء الترجمة على stderr»في الوضع النصي كانت على stdout. خرج --json على stdout كما كان. أداة تقرأ نص الخطأ من stdout تقرؤه الآن من stderr. الميزة errors-on-stderr في features تدل على السلوك الجديد.
عمر = 20اذا عمر > 18 اطبع("بالغ")رمز الخروج: 2
في فهرس الأخطاء: E0019
التفصيل في الأخطاء الشائعة.
الدوال المتداخلة خطأ ترجمة
رابط إلى قسم «الدوال المتداخلة خطأ ترجمة»كانت تُقبل بسلوك غير مقصود (الداخلية تتسرّب إلى الملف كله ولا ترى متغيرات المحيطة). الدوال تُعرَّف في المستوى الأعلى من الملف.
داله خارجية() عدد: داله داخلية() عدد: ارجع 1 ارجع داخلية()اطبع(خارجية())رمز الخروج: 2
في فهرس الأخطاء: E0015
ترتيب تقييم الفهرسة
رابط إلى قسم «ترتيب تقييم الفهرسة»في حاوية()[فهرس()] تُقيَّم الحاوية ثم الفهرس، من اليسار كبقية اللغة. كان الفهرس يُقيَّم أولاً حين تكون الحاوية تعبيراً لا اسماً.
داله حاوية() قائمة[عدد]: اطبع("الحاوية") ارجع [10, 20, 30]داله فهرس() عدد: اطبع("الفهرس") ارجع 1اطبع(حاوية()[فهرس()])meem build
رابط إلى قسم «meem build»ملف تنفيذي مستقل يعمل بلا ميم ولا بايثون، ساكن افتراضاً. البناء.
القاموس جدول تجزئة
رابط إلى قسم «القاموس جدول تجزئة»البحث والإدراج والحذف بزمن ثابت في المتوسط. ترتيب المفاتيح ترتيب الإدراج، وهو ضمان من اللغة.
قياسات وثيقة المجمّع (docs/hashmap.md، زمن المعالج للبرنامج كله على جهاز التطوير):
| البرنامج | قبل | بعد |
|---|---|---|
| 20 ألف مفتاح نصي: إدراج ثم قراءة | 2.4–3.0 ث | 0.34 ث |
| 20 ألف مفتاح عددي: إدراج ثم قراءة | 1.2–1.4 ث | 0.28 ث |
| 20 ألف مفتاح نصي: إدراج، حذف نصفها، إعادة إدراجه، مرور | 3.7–4.6 ث | 0.35 ث |
| 200 ألف مفتاح عددي: إدراج ثم قراءة | 107 ث | 0.40 ث |
| 3 ملايين قاموس صغير (5 مفاتيح) تُنشأ وتُقرأ وتُعاد في حلقة | 1.0–1.1 ث | 1.1–1.2 ث |
القواميس الصغيرة جداً لم تتسارع.
الحزمة
رابط إلى قسم «الحزمة»تُبنى داخل حاوية توزيعة قديمة: تعمل على glibc 2.35 فما فوق. التوزيعات المجرَّبة: أوبونتو 22.04 ودبيان 12.
features
رابط إلى قسم «features»أُضيف إلى features في --list-keywords --json: deny-deprecated، list-deprecated، build، self-test، emit-ir، errors-on-stderr. عقد الأدوات.
موثَّق
رابط إلى قسم «موثَّق»دلالات اللغة كمواصفات: الأولوية، القسمة والباقي، عدد مع كسر (وحدّ الدقة فوق 2^53 في المقارنة)، النطاق، ترتيب التقييم، ترتيب مفاتيح القاموس. الدلالات وقيود معروفة.