# سجل تغييرات الأسُس ## الإصدار 0.11.3 (2023-09-11م \ 1445-02-26هـ) ### الإضافات والتعديلات على المترجم * تمكين التمثيل التلقائي عبر عدة دالات تمثيل مخصص. تمكن هذه الخاصية التمثيل التلقائي في الحالات التي لا يمكن فيها بلوغ الصنف المستهدف إلا عبر عدة دالات تمثيل مخصص. في السابق كان التمثيل التلقائي يعمل مع مرحلة واحدة من التمثيل المخصص. ### إصلاحات المترجم * إصلاح مشكلة في تحسس الخطأ عند تمرير دالة كقيمة ثنائية في جملة شرطية. * إصلاح مشكلة في إعطاء الأولوية للمنادى المحلي على المنادى المحقون. هذا الإصلاح يحل مشكلة في تعريف الدالات المهيمنة (function overriding) في الأصناف الفرعية. ### إصلاحات المكتبات المعيارية * إصلاح عمليات التعيين والتمثيل للصنف `بـعدم` (`Nullable`). ## الإصدار 0.11.2 (2023-08-22م \ 1445-02-06هـ) ### إصلاحات المترجم * إصلاح تمييز الجمل الإنتهائية داخل داخل رزم الأوامر (مؤثر `~استخدم_في`). ## الإصدار 0.11.1 (2023-08-15م \ 1445-01-28هـ) ### إصلاحات المترجم * إصلاح مشكلة في التعامل مع الترجمة المتداخلة (الترجمة التي تُطلق أثناء معالجة تمهيد ترجمة أخرى). ## الإصدار 0.11.0 (2023-07-26م \ 1445-01-08هـ) ### إصلاحات المترجم * إصلاح مشكلة في المؤثر << (الإزاحة البتية لليمين) تتسبب في تحويل المعطى الطبيعي الصنف إلى حقيقي الصنف. ### الإضافات والتعديلات على المكتبات المعيارية * إضافة `نـص.اقرأ_محرف_هكس` (`String.parseHexDigit`). * إضافة `شـبكة.شفر_عنوانيا` (`Net.uriEncode`). * إضافة `شـبكة.فك_عنوانيا` (`Net.uriDecode`). * تغيير صنف `خـطأ.هات_الرمز()` (`Error.getCode`) من صحيح إلى نـص. ## الإصدار 0.10.0 (2023-07-08م \ 1444-12-20هـ) ### الإضافات والتعديلات على المترجم * إضافة الدعم للماكروهات الأعضاء. * تمثيل المؤشرات والسندات لتحويلها من صنف مستخدم إلى صنف أول عنصر من ذلك الصنف لم يعد تمثيلاً ضمنيًا إلا إن كان أول عنصر معرفًا كحقنة، إي أن التمثيل يكون ضمنيًا فقط في حالات اشتقاق الأصناف. * إضافة نوعين جديدين لمعطيات القوالب وهي `وحدة` (module) و `سند_شبم` (ast_ref). * تحسين إشعارات البناء. * إصلاح علة في ترجمة المؤثرات المنطقية عندما يستخدم المعامل الثاني متغيرات مؤقتة. * تمكين استخدام مؤثر التمثيل `~مثل` (`~cast`) على السندات لتمثيلها كسندات من نوع آخر. ### الإضافات والتعديلات على المكتبات المعيارية * إضافة دالة لاستنباط صنف الناتج لش.ب.م. * تمكين شمول عدة ملفات من حزمة دفعة واحدة باستخدام استدعاء واحد للدالة `مـحا.اشمل_ملف` (Apm.importFile). هذه الإمكانية مهمة لتجنب نداءات الشبكة غير الضرورية التي تنتج من استدعاءات متعدددة لهذه الدالة على نفس الحزمة. * إضافة دالة `نـص.غير_الحجز`. * إضافة دالة `الـقلب.أضف_ترجمة`. * إضافة دالة `أهو_عدم` (isNull) ل`سـندنا` (SrdRef) و `سـندهم` (WkRef) و `سـندي` (UnqRef). * إضافة دالة `أهو_عدم` (isNull) للمغلفات. * تمكين تمثيل `سـندنا` (SrdRef) و `سـندهم` (WkRef) التلقائي كسند كائن جذري للكائن الحالي. * إضافة الصنف `نـمط.مـطابق` (Regex.Matcher) لتمكين تهيئة تعبير نمطي (regular expression) واستخدامه في عمليات بحث متعددة بدل إعادة تهيئة التعبير النمطي مع كل عملية بحث. * إضافة دالتي `هيئ` (`initialize`) و `حرر` (`release`) إلى الصنف `مـتم.نـمط.مـطابق` (`Srl.Regex.Matcher`). * إضافة دالة `اجتزئ` (`slice`) إلى الصنف `مـتم.مـصفوفة` (`Srl.Array`). * تمكين إضافة عدة اعتماديات بصيغة مصفوفة نصوص في استدعاء واحد في الوحدة `بـناء` (`Build`). * تحديث وحدة `بـناء` (`Build`) لتمكين الربط (linking) مع مكتبات خاصة (ليست من مكتبات النظام). شفرة البناء ستقوم تلقائيًا بنسخ المكتبات الخاصة إلى مجلد البرنامج المُنتج. * إضافة ماكرو `هات_مجلد_هذه_الشفرة` (`getThisSourceDirectory`) لجلب اسم المجلد الحاوي على ملف الشفرة المصدرية الحالي. * إضافة صيغة من `مـصفوفة.أضف` (`Array.add`) لإضافة مصفوفة كاملة إلى المصفوفة الحالية. * إضافة دالة `هات_اعتماديات_البناء` (`getBuildDependencies`) إلى الوحدة `شـبكة` (`Net`). * إضافة الأصناف `خـطأ` (`Error`) و `خـطأ_عام` (`GenericError`) و `لـا_مضمون` (`Possible`) و `بـعدم` (`Nullable`). ### إصلاحات المترجم * إصلاح مشكلة في شمول الملفات عندما يتواجد روابط رمزية (symbolic links) ضمن اسم الملف تجعل الشمولات المتعددة لنفس الملف تبدو للمترجم وكأنها ملفات متعددة مما يؤدي إلى شفرة مكررة. * إصلاح علة في المترجم عند استخدام متغير عمومي من خلال عمليتي jit وعبارة تمهيدية أثناء تنفيذ جملة واحدة في الجذر (أي بعملية ترجمة واحدة) مما يتسبب في استخدام المتغير قبل تهيئته. * إصلاح مشكلة في المؤثر `ليس` تجعله لا يقبل الكائنات ذوات عمليات تمثيل القيمة الثنائية. * إصلاح علة في البحث عن المنادى لعمليات التعيين تؤدي لإعطاء عمليات التمثيل غير المباشرة نفس الوزن المُعطى لعمليات التمثيل المباشرة مما يؤدي لخطأ تعدد التطابقات لعملية البحث تلك بدل إعطاء الأفضلية لعمليات التمثيل المباشرة وتجنب الخطأ. * إصلاح علة في البحث عن المنادى لعمليات التعيين تؤدي للتبليغ عن أخطاء تعدد التطابقات بشكل غير دقيق. * إصلاح علة في تعريف المتغيرات المؤقتة عندما يحتاج المتغير المؤقت للتمثيل باستخدام عملية تمثيل مخصصة قبل التمكن من تعيين قيمته في المتغير المستهدف. * إصلاح علة في المترجم عند تعريف صنف داخل دالة تهيئة صنف آخر تؤدي لفشل تهيئة الصنف الداخلي. * إصلاح علة في الأمر `عملية` (handler) عند استخدام الخيار `حدد_مؤشر` (set_ptr) بشكل متكرر في نفس الصنف على نفس الدالة لتبديل قيمتها السابقة بقيمة جديدة. * إصلاح علة في المؤثر `~عطل_التتبع` (`~no_deref`) تتسبب بأخطاء استثنائية في بعض الحالات. * إصلاح علة في التعامل مع أخطاء تعدد تطابقات المنادى تسبب توقف المترجم. * إصلاح مشكلة في العبارات التمهيدية المتداخلة تتسبب أحيانًا في حشر الشفرة المولدة في المكان الخطأ. * إصلاح مشكلة انتهاك الوصول (segfault) أثناء ترجمة بعض الحالات من حلقات السندات المغلقة. ### إصلاحات المكتبات المعيارية * إصلاح مشكلة في تهيئة مؤشرات المغلفات. * إصلاح علة في الدالات المغلفة تسبب تضاربًا مع أي متغير حمولة بالاسم `d`. * إسلاح تعريف دالة `مـتم.شـبكة.كـرل_سهل.هات_معلومة` (`Srl.Net.CurlEasy.getInfo`). * إصلاح مشاكل في تعريب وحدة `مـتم.شـبكة` (`Srl.Net`). * إصلاح علة في `مثل_سندنا` (`castSrdRef`). ### تعديلات وإصلاحات أخرى * تحديث بريمجات بناء الأسس من الشفرة المصدرية لتعتمد على نظام vcpkg لإدارة الاعتماديات بالإضافة لبعض التحسينات الأخرى لعملية البناء. * بناء wasm-ld وتضمينه في الأسس لتجنب التضارب المحتمل بين إصدار LLVM الذي تستخدمه الأسس مع إصدار LLVM الذي تستخدمه حزمة wasm-ld التي يوفرها النظام. * إصلاح مشكلة في الأمر `محا اربط` (apm link) عند التعامل مع مسافات في أسماء المجلدات. ## الإصدار 0.9.0 (2022-06-20م \ 1443-11-21هـ)
### الإضافات والتعديلات على المترجم * إضافة الدعم للقوالب في الدالات وعمليات الأصناف. * إضافة الدعم للقواعد المخصصة مثل التراكيب المخصصة. * إضافة المؤثر ~استخدم_في لإنشاء رزم الأوامر مع التحكم في تعريف المتغير الأساسي لتجنب حالات التضارب مع متغيرات أخرى. * إضافة الصنف `عـبارة_ترجمة_قبلية` (PreGenTransformStatement) لتمكين العبارات التمهيدية من إضافة شفرة تُترجم وقت االترجمة بدل الترجمة أثناء التمهيد. * اكتشاف الحلقات المفرغة أثناء ترجمة الأصناف، والتي يمكن أن تنتج في بعض حالات العبارات التمهيدية المتداخلة. * جعل تتبع المنادى أكثر ذكاءًا في استخدام أو تجاوز المتغير التلقائي `هذا`. * إعادة هيكلة أجزاء من الشفرة المصدرية لتحسين قابلية قراءتها وصيانتها. ### الإضافات والتعديلات على المكتبات المعيارية * إضافة إمكانية تحديد نمط التقاط البيانات الخارجية في المغلفات. * إضافة مؤثر مقارنة للمغلفات. ### تعديلات غير متوافقة مع الإصدارات السابقة * تصحيح تهجي الدالة `نـص.اجتزئ`. ### إصلاحات المترجم * إصلاح علة في التعامل مع المتغير التلقائي `هذا` حيث يُلتقط هذا المتغير خطأً أثناء تتبع المنادى في بعض الحالات. * إصلاح علة في التعامل مع المعطيات المفقودة للقوالب. * إصلاح علة في التعامل مع المتغيرات الأعضاء غير الصالحة. * إصلاح علة في معالجة الأخطاء أثناء إعراب عمليات الأصناف المخصصة. * إصلاح علة تتسبب بأخطاء استثنائية في بعض الحالات عند التعرض لأقواس أثناء المعالجة التمهيدية. * إصلاح علة في الأمر `عملية` عند تحديد صنف مختلف للمتغير `هذا`. * إصلاحات متعددة في إشعارات الأخطاء: - تقليل التكرار غير الضروري للإشعارات في بعض الحالات. - منع خسارة بيانات موقع الخطأ عند انطلاق عمليات المعالجة التمهيدية. - إصلاح بيانات موقع الخطأ المفقودة في المؤثر `~حجم` (~size). * إصلاحات أخرى صغيرة. ### إصلاحات المكتبات المعيارية * تقليل التكرار في إشعارات الأخطاء أثناء معالجة المغلفات. * إصلاح علة أثناء محاولة المغلفات الولوج إلى `هذا` في رزم الأوامر أو في متون الأصناف خارج الدالات والعمليات المخصصة. * إصلاح علة في الدالة String._release. * إصلاح علة تمنع المغلفات من الولوج إلى `هذا` تابع للدالة العضو المنشئة للمغلفة، بسبب تضارب مع `هذا` التابع للمغلفة نفسها. * إصلاحات أخرى صغيرة. ### تحديثات أخرى * إصلاح بناء الأسس على معمارية arm64. * تحديثات وتصحيحات إملائية في الوثائق. * تحديث شعار الأسس في الوثائق. * تعديلات متعددة على تعريفات GTK لتلوين الشفرة المصدرية للأسس.
## الإصدار 0.8.1 (2021-09-27م \ 1443-02-20هـ)
* إصلاح مشكلة في الدالات المغلفة عند تعريفها داخل قالب وكون صنف معطى الدالة احد معطيات القالب. * إصلاح خلل في استخدام أصناف المستخدم كمعطيات مرنة. * إصلاح مشكلة في مقارنة مؤشرات الدالات المرنة. * تعديل إشعار الخطأ في عملية تعيين مؤشر الدالات عندما لا يتطابق صنفها مع صنف المعطى.
## الإصدار 0.8.0 (2021-09-06م \ 1443-01-29هـ)
### الإضافات والتعديلات على المترجم * إضافة الدعم لرزم الأوامر، أي للمؤثر `.{}`. يمكّن هذا المؤثر من تنفيذ مجموعة من الأوامر على كائن دون الحاجة لتكرار اسم ذلك الكائن في كل جملة. * إضافة الدعم للدالات الضمنية، أي تلك الدالات التي تُعرف بلا إسم ضمن تركيب. * تمكين الأمر `عملية` (`handler`) من تعريف الدالات الأعضاء بشكل بسيط وواضح. * إضافة خاصية الخصال للأصناف (properties) وتمكين تعريف الخصال بإضافة المبدل `@عملية` (`@operation`) على الدالات. * تمكين الأمر `عملية` (`handler`) من تعريف الخصال بشكل بسيط وواضح. * تمكين الأمر `عملية` (`handler`) من تعريف الوظائف (methods) والخصال (properties) كمؤشرات دالات بدل الدالات الثابتة. تساعد هذه الإمكانية في تمكين تعدد الأشكال (polymorphism). * إضافة المبدل `@بلا_تمهيد` (`@no_preprocess`) للأمر `شبم` (`ast`) لمنع المعالجة التمهيدية لمتن هذا الأمر. هذه الخاصية تمكن المستخدم من تأجيل المعالجة التمهيدية لمتن الأمر `شبم` لحين حشر تلك الشفرة في المكان المستهدف. * إضافة نوع جديد من معطيات القوالب وهو `شبم` (`ast`)، أي شجرة بنية مجردة. هذا النوع يمكن المستخدم من تمرير شفرة كمعطى للقالب. * تمكين تخصيص المؤثر `()` على الأصناف (وليس الكائنات). الوظيفة المبدئية لهذا المؤثر إنشاء متغير مؤقت من ذلك الصنف على المكدس وإرجاع سند له، ولكن بإمكان المستخدم الآن تخصيص هذه العملية، على سبيل المثال لإنشاء كائن في الكومة (heap) بدل المكدس. * تمكين وضع الجمل داخل كتل متداخلة. أي تمكين كتابة كتلة جمل داخل كتلة أخرى دون أن تكون كتلة الجمل الداخلية متنًا لأحد الأوامر (كالجمل الشرطية على سبيل المثال). هذه الإمكانية مفيدة للتحكم في عمر بعض المتغيرات عبر تعريفها ومجموعة الأوامر التي تحتاجها داخل كتلة، فيتم إتلاف المتغير تلقائيًا عند الخروج من تلك الكتلة. * تحسين أداء تتبع الأصناف عبر الاحتفاظ بنسخ مؤقتة من نتائج التتبع لتسريع التتبع المستقبلي. * تعديلات داخلية على شفرة المترجم لزيادة تنظيمها وتنظيفها من بعض الركاكة. ### الإضافات والتعديلات على المكتبات المعيارية * إضافة مكتبة لتمكين الدالات المُغلَّفة (closures). * تمكين المستخدم من تعريف أوامر جديدة برمجيًا عبر إضافة قواعد جديدة للمترجم. * إضافة دالة `مدير_شبم.هات_نطاق_المتغير` لمعرفة النطاق الذي يتواجد فيه المتغير. * تمكين إطلاق إشعارات البناء برمجيًا. * تمكين الاستفهام برمجيًا عن الموقع الحالي لحشر الشفرة البرمجية الجديدة. * تمكين تهيئة أصناف ش.ب.م (AST) من داخل برنامج الأسس. ### تعديلات غير متوافقة مع الإصدارات السابقة * استبدال الكلمة المفتاحية `class` بالكلمة `type` لتعريف أصناف المستخدم. التعديل يقتصر على اللغة الإنجليزية؛ تعريف الأصناف بالعربية ما زال باستخدام الكلمة المفتاحية `صنف`. * إزالة المبدّلين `@مشترك` (`@shared`) و `@بلا_ربط` (`@no_bind`) من الدالات وإضافة المبدل `@عضو` (`@member`) لتعريف الدالات الأعضاء (الوظائف). أي أن تعريف الدالات داخل الأصناف حاليًا لا يجعلها تلقائيًا دالات أعضاء ما لم يُضف المبرمج المبدل `@عضو`. كما أن تعريف الدالات الأعضاء الآن يتطلب من المستخدم إضافة المعطى `هذا` (`this`) يدويًا لتعريف الدالة. الهدف من هذه التعديلات تبسيط تعريفات الدوال وتقليل الإرباك الناتج من هذه المبدلات ومن المعالجة التمهيدية التي تحدث على تعريفات الدالات خلف الكواليس. ### إصلاحات المترجم * إصلاح مشكلة في الأمر `استخدم` (`use`) تتسبب في تتبع عبارات `استخدم` بعمق أكثر من واحد. * إصلاح مشكلة في قاعدة تعريفات الدوال. * إصلاح مشكلة في تتبع الأصناف عندما يذكر اسم الصنف بين أقواس. * إصلاح مشكلة في المؤثر `~شبم` (`~ast`). * إصلاح مشكلة من معالجة الأمر `تمهيد` (`preprocess`) عندما تتسبب اعتماديات شفرة التمهيد لإعادة معالجة نفس العبارة التمهيدية مما يؤدي لتعطل عملية الترجمة. * إصلاح مشكلة تتسبب في استدعاء دالات التهيئة العمومية أكثر من مرة أثناء التنفيذ الواحد. * إصلاح مشكلة في الأمر `أدرج_ش_ب_م` (`dump_ast`) تتسبب بخطأ استثنائي وتوقف الترجمة عند فقدان العنصر المستهدف. * إصلاح مشكلة في الإبلاغ عن الأخطاء في تعريف المتغيرات الأعضاء تتسبب في خطأ استثنائي يوقف الترجمة بدل إشعار البناء الموجه للمستخدم. * إصلاح مشكلة في استدعاء الدالات عبر مؤشر عندما يتطلب صنف الإرجاع تهيئة مخصصة. * إصلاح بعض المشكلات الثانوية أثناء البحث عن المنادى كما هو الحال في استدعاء الدالات على سبيل المثال. ### إصلاحات المكتبات المعيارية * إصلاح مشكلة في التعامل مع الذاكرة في دالتي `مـصفوفة.احشر` (`Array.insert`) و `مـصفوفة.أزل` (`Array.remove`). * إصلاح مشكلة في التعامل مع الذاكرة في صنف `نـص` (`String`).
## الإصدار 0.7.0 (2021-02-22م \ 1442-07-10هـ)
### الإضافات والتعديلات على المترجم * إضافات لتحسين البرمجة الكائنية: - إضافة خاصية حقن التعريفات باستخدام المبدل `@حقنة` (`@injection`) لتوفير التعريفات في مجال مختلف. تفيد هذه الخاصية في تمكين الاشتقاقات بين الأصناف. - دعم تعريف مؤشرات الوظائف (الدالات العضوية أو member functions) لتمكين نمط تعدد الأشكال (polymorphism). - تمكين تمرير المعطيات أثناء تهيئة المتغيرات. * برمجة المترجم: - إضافة الأمر `تمهيد` لتمكين التنفيذ أثناء الترجمة. - إضافة الأمر `شبم` (`ast`) لتمكين تمرير شجرة بناء مجردة (شفرة مصدرية) كمعطيات لدالات المترجم. - إضافة دالات لتمكين إنشاء الشفرة المصدرية برمجيًا أثناء الأمر `تمهيد`. - إضافة تعريفات توافقية لكائنات الـقلب ومكتبة نمط البرمجة المعياري لتمكين المبرمج من الولوج إلى المترجم من برنامج الأسس أثناء الترجمة. - إضافة دالات لمسح الشفرة المصدرية والاستعلام عن عناصرها. * تمكين المعالجة الأولية لشجرة البنية المجردة في الجذر. * المعالجة الأولية لشجرة البنية المجردة بتم الآن عند الطلب بدل أن يعالج كل شيء مسبقًا. * تمكين العمليات الحسابية على المؤشرات. * تمكين إنشاء شفرة ويب أسيمبلي. * إضافة صنف `صـحيح_متكيف` (`ArchInt`) و `طـبيعي_متكيف` (`ArchWord`) كصنف أعداد صحيحة تطابق المؤشرات بعدد البتات على النظام الحالي. * إضافة الصنف `سند_مؤقت` (`temp_ref`) لإتاحة التحويل التلقائي للقيمة إلى متغير مؤقت في الدالات التي تحتاج إلى سند بدل القيمة. * إضافة الدعم للمعطيات المرنة في الدالات (variadic functions). * استخدام الأقواس الحاصرة لتمرير معطيات مرنة دون الحاجة لتمرير عدد المعطيات. * تحسين قوالب الأصناف: - إضافة المؤثر `~عطل_التتبع` (`~no_deref`) لجعل العمليات تطبَّق على السند بدل المتغير المشار إليه. ينفع هذا المؤثر في دعم السندات في قوالب الأصناف. - تمكين توسعة طبعة محددة من قوالب الأصناف باستخدام المبدل `@دمج` (`@merge`). - تمكين القيم المبدئية في معطيات القوالب. * إضافة المتغير `الـعملية.الـنظام` (`Process.platform`) لمعرفة نظام التشغيل الحالي. * تمكين معرفة اسم ملف الشفرة المصدرية الخاضع للترجمة. * تمكين المؤثر `أو` في عبارة `اشمل`. * تمكين شمول الملفات المصدرية دون ذكر امتداد الملف في عبارة `اشمل`. * تمكين إهمال امتداد الملف عند تحديد اسم الملف في سطر الأوامر. * تحديث LLVM للإصدار العاشر. * إضافة الدعم لنظام ماك أو إس. ### الإضافات والتعديلات على المكتبات * إضافة السندات الذكية لتسهيل تحرير الذاكرة عند انتفاء الحاجة. * إضافة صنف `تـطبيق` (`Map`). * إضافة نسخة من `مـصفوفة.أضف` (`Array.add`) لإضافة مجموعة عناصر دفعة واحدة. * إضافات الصنف `نـص` (`String`): - `جد_آخر` (`findLast`). - `املأ` (`format`). - `اقرأ_صحيح` (`parseInt`) - `اقرأ_عائم` (`parseFloat`). * إضافات الوحدة `بـناء` (`Build`): - دعم إنشاء ملفات wasm. - دعم خيارات البناء المخصصة. ### تعديلات غير متوافقة مع الإصدارات السابقة * تعريف مؤشر دالة داخل صنف الآن يجعل المؤشر مؤشرًا على وظيفة (دالة عضوية أو member function) بدل دالة عامة. لتعريف مؤشر على دالة عامة داخل صنف تحتاج الآن لاستخدام المبدل `@مشترك` (`@shared`). * إزالة الملف `عامة.أسس` (`globals.alusus`) من المكتبات المعيارية ونقل تعريفاته إلى `مـتم/متم.أسس` (`Srl/srl.alusus`). * إزالة الدالة `بـناء.تـنفيذي.أنشئ` (`Build.Exe.new`) والاستعاضة عنها بدالات تهيئة الأصناف. أي يمكن للمستخدم الآن تعريف متغير من صنف `تـنفيذي` (`Exe`) مباشرة. ### إصلاحات المترجم * إصلاح بضعة علات في البحث عن المنادى. * إصلاح علة في إنشاء دالة التهيئة الآلية. * إصلاح بضعة علات في تمثيل السندات. * إصلاح علة في تمثيل أصناف المستخدم. * إصلاح علة في تهيئة المتغيرات المؤقتة ذات صنف قالب. * إصلاح علة في إتلاف المتغيرات المؤقتة. * إصلاح مشكلة في مؤثرات التعيين الحسابية. * إصلاح بضعة علات في تهيئة وإتلاف المتغيرات. * إصلاح بضعة علات في المتغيرات العمومية. * إصلاح علة في التمييز بين السندات التي ينشئها المستخدم من تلك التي ينشئها المترجم تلقائيًا. * إصلاح علة في بناء دالات التهيئة العمومية. * إصلاح علة في التعامل مع الأصناف الخاطئة في التعريفات. * إصلاح علة في مؤثر `~شبم` (`~ast`). * إصلاح علة في الماكروهات عند احتواء الماكرو على تعريف بالمبدل `@دمج`. * إصلاح علة في عبارة `استخدم` (`use`). * بعض الإصلاحات في التعامل مع أخطاء المبرمج. * العديد من الإصلاحات الصغيرة الأخرى. ### إصلاحات المكتبات * إصلاح دالة `ألحق` في صنف `نـص`. * إصلاح علة في صنف `مـصفوفة`. * إصلاح مشكلة في تحديد الاعتماديات في وحدة `بـناء` (`Build`). * تحسين إشعارات الخطأ في مكتبة `بـناء` (`Build`).
## الإصدار 0.6.1 (2020-02-18م \ 1441-06-24هـ)
### الإصلاحات * إصلاح علة في المترجم تؤدي لعدم استدعاء دالة الإتلاف لمعطيات الدالات. * إصلاح علة في المترجم تؤدي لانهيار المترجم عند سَلسلة عمليات التعيين (مثل: س = ص = 0). * إصلاح علة في الدالة `نـص.شذب` (String.trim). ### الإضافات والتعديلات * إضافة دالة `نـظام.اخرج` لمكتبة التنفيذ المعيارية. * جعل التوسيع الديناميكي لصوان الصنف `مـصفوفة` لوغارتميا بدل أن يكون خطيا. ### تعديلات غير متوافقة مع الإصدارات السابقة * توحيد جميع تعريفات سلاسل المحارف المجردة لتستخدم الصنف `مؤشر[مصفوفة[محرف]]` بدل `مؤشر[محرف]`.
## الإصدار 0.6.0 (2020-01-24م \ 1441-05-29هـ)
### الإضافات * إضافة الصنف `سند` (ref) لتبسيط التعامل مع المؤشرات. * دعم أولي للبرمجة الكائنية: - إضافة دعم للوظائف، أي دالات الأصناف (member functions). - تمكين المستخدم من تخصيص عملية تهيئة الكائنات. - الكائنات ذات التهيئة المخصصة تُمرر تلقائيًا كمؤشر بدل نسخ قيمتها. - إضافة الأمر `~هيئ` (~init) لتمكين المستخدم من تهيئة الكائنات المحجوزة ديناميكيا. - إضافة الأمر `~أتلف` (~terminate) لتمكين المستخدم من إتلاف الكائنات المحجوزة ديناميكيا. - إضافة الأمر `عملية` (handler) لتمكين تخصيص المؤثرات وعمليات التمثيل لأصناف المستخدم. * تمكين المستخدم من إنشاء قوالب الأصناف. * إضافات لمكتبة التنفيذ المعيارية: - إضافة الصنف `نـص` (String) لتسهيل التعامل مع النصوص الديناميكية. - إضافة الصنف `مـصفوفة` (Array) لتسهيل التعامل مع المصفوفات الديناميكية. * تنفيذ الشفرات المكتوبة في جذر الوحدات خارج الأصناف. * تمكين بناء ملفات تنفيذية. * جعل القواعد أكثر تسامحًا مع فقدان الفاصلة المنقوطة في نهايات الجمل. * أمر الإرجاع يمكن الآن كتابته بالألف بدل الهمزة، أي `ارجع` بدل `أرجع`. * تمكين تمرير معطيات متعددة للمبدلات. * تمكين المستخدم من قراءة معطيات المبدلات المضافة على الشفرة المصدرية. * تحسينات لمدير الحزم: - تمكين تنصيب حزم متعددة بنفس الإسم إذا كانت من ناشر مختلف. - تمكين تنصيب عدة إصدارات من نفس الحزمة آنيا. - إضافة الأمرين `اربط` (link) و `افصل` (unlink) لتسهيل تجربة الحزم محليا قبل رفعها إلى المستودع. - تحسين الإشعارات. * تحسين كبير في أداء المُعرِب والمرمّز. ### تعديلات غير متوافقة مع الإصدارات السابقة * نقل دالات مطابقة الأنماط (regex) إلى وحدة منفصلة باسم `نـمط` (Regex). * نقل دالة `أدرج_تو_لعنصر` (dumpLlvmIrForElement) إلى الوحدة `نـبم` (Spp). * تغيير اسم الصنف `وقـت` (Time) إلى `وقـت_مفصل` (DetailedTime) في الوحدة `وقـت`. ### الإصلاحات * إصلاح مشكلة في تنفيذ الشفرة في المجال الرئيسي (الجذر). * إصلاح خلل في دالة مطابقة الأنماط. * إصلاح بعض المشاكل في مدير الحزم. * إصلاح مشكلة في أداء القوالب. * إصلاح مشكلة في الماكروهات عند استخدامها في المجال الرئيسي (الجذر). * إصلاح مشكلة في مزامنة الإعراب بعد مواجهة أخطاء إعرابية. * إصلاح مشكلة في إعراب الرمزين '[' و "[". ### تعديلات داخلية * إزالة إمكانية التفرع من المعرب. هذه الخاصية ليست ضرورية وتؤثر سلبا على الأداء. * تبسيط الشفرة المصدرية للمُعرِب والمرمّز. * تغيير اسم MacroProcessor إلى AstProcessor.
## الإصدار 0.5.0 (2019-05-20م \ 1440-09-15هـ)
### الإضافات * تمكين التنفيذ المباشر للشفرة التي في المجال الرئيسي خارج الوحدات والدالات. * تمكين الأمر `استخدم` في المجال الرئيسي. * تمكين تعيين القيم أثناء التعريف. * إضافة مدير حزم. * تمكين صيغة أقصر لتعريف الدالات والوحدات والماكروهات والأصناف. يمكنك الآن تعريف الدالات باستخدام الأمر `دالة` لوحده دون الحاجة لكتابة `عرف`. والأمر نفسه ينطبق على الوحدات والماكروهات وأصناف المستخدم. * تمكين الملاحظات متعددة الأسطر. * تمكين المحارف المركبة \u و \U و \x بالإضافة إلى \f في سلاسل المحارف. * إضافة مكتبة لعمليات الشبكات. * إضافة مكتبة لفتح الملفات المضغوطة. * إضافة دالات للتعامل مع التعابير النمطبية. * إضافة المتغير العمومي `الـعملية.اللغة` الحاوي على رمز لغة النظام الحالية. * تمكين المؤثر % على الأرقام العائمة. * إضافة أرقام الأسطر في النمط التفاعلي. * إصدار إشعار خطأ عند فقدان عبارة `أرجع`. * إصدار إشعار خطأ للشفرات المنقطعة التي لاي مكن الوصول إليها. * قصر بناء الشفرة التنفيذية على العناصر المطلوبة لتنفيذ البرنامج بدل بناء كل شيء. * تحسين التمثيل التلقائي لأصناف المؤشرات على مؤشرات. ### تعديلات غير متوافقة مع الإصدارات السابقة * إزالة الأمر `نفذ` الذي لم يعد له حاجة. * الاستعاضة عن الأمر `dump_llvm_ir` بدالة. * تغيير الكلمة المفتاحية `حزمة` إلى `وحدة`. ### الإصلاحات * إصلاح مشكلة في تحسس لغة النظام الحالية. * إصلاح مشكلة في مخطوط بناء الأسس. ### تعديلات داخلية * استخدام الإصدار 7.0.1 من LLVM بدل الإصدار القديم 3.3. * نقل بريمجات البناء إلى بايثون بدل bash. * استخدام التوريث الاعتيادي في أصناف المترجم بدل التوريث الافتراضي. * إضافة الصنف RootScopeHandler لتمكين المكتبات من تعديل التعامل مع العناصر المضافة إلى المجال الرئيسي بسهولة. هذا بالإضافة للعديد من الإصلاحات الصغيرة والإضافات على مكتبة التنفيذ المعيارية.
## الإصدار 0.4.1 (2019-03-13م \ 1440-07-06هـ)
### الإضافات * تمرير معطيات البرنامج إلى دالة البداية إن كان تعريف تلك الدالة يقبل المعطيات. * إذا أرجعت دالة البداية قيمة غير الصفر فإن تلك القيمة تستخدم كقيمة الخروج من القلب.
## الإصدار 0.4.0 (2019-02-25م \ 1440-06-20هـ)
### الإضافات * إضافة خاصية الماكروهات التي تتيح للمبرمج وضع مجموعة من الأوامر في ماكرو لتسهيل تكرارها في أماكن متعددة. هذه الخاصية مشابهة لخاصية الماكرو في لغة السي من ناحية المبدأ لكنها تختلف اختلافاً جذرياً في التصميم، حيث أن الماكرو في لغة السي يعالَج نصياً في مرحلة تسبق الإعراب بينما ماكرو الأسُس يعمل كجزء من مرحة الإعراب نفسها وهذا يؤدي إلى الفروقات التالية: - في لغة الأسُس الماكرو تأثيره محدود ضمن مجال تعريفه بعكس الماكر في لغة السي حيث يكون غير محدود بأي مجال. بمعنى آخر، في لغة الأسُس إذا عرفت ماكرو داخل مجال معين وحاولت استخدامه داخل مجال آخر فسيمنعك المترجم من ذلك ما لم تذكر المسار الكامل المؤدي لذلك الماكرو. - يمكن في لغة الأسُس تعريف عدة ماكروهات بنفس الاسم طالما أنها معرفة ضمن مجالات مختلفة، وهذا غير ممكن في لغة السي. - في لغة الأسُس الأخطاء الإعرابية داخل الماكرو يتم استشعارها مباشرة بعكس لغة السي حيث لا تُستشعر الأخطاء الإعرابية إلا بعد انتهاء معالجة الماكرو والبدء بمرحلة الإعراب. - في لغة الأسُس لا يمكن تعريف ماكرو يحتوي متنه على أجزاء غير مكتملة من القواعد بعكس لغة السي التي تتيح ذلك. مثلاً، في لغة السي يمكن تعريف ماكرو يحتوي على جزء غير مكتمل من القواعد ويقوم المستخدم يتجميع ماكروهات متعددة للحصول على برنامج صحيح قواعدياً وهذا الأمر غير ممكن في لغة الأسس التي تمنع أن يكون متن أي ماكرو غير مكتمل قواعدياً. * إضافة الأمر `استخدم` (use) الذي يُخبر المترجم بالبحث عن الرموز تلقائياً داخل مجالات معينة بدل اضطرار المبرمج لكتابة المسار الكامل عند استخدام العناصر. على سبيل المثال، بدل أن يكتب المستخدم `مـتم.طـرفية.اطبع` بشكل متكرر يمكنه استخدام الأمر `استخدم مـتم.طـرفية` وبعدها الاكتفاء بكتابة `اطبع`. * إضافة الدعم للثوابت. أي يمكن للمبرمج ان يعطي اسماً لقيمة ثابتة (رقم أو سلسلة محارف) ثم استخدام ذلك الإسم لاحقاً بدل كتابة القيمة الثابتة. مثال: `عرف النسبة_الثابتة: 3.141592`. * يمكن الآن تعريف دالة دون وضع أقواس فارغة إذا كانت الدالة لا تستقبل ولا ترجع أي معطيات. * تعريف مؤشر دون تحديد صنف محتوياته يجعله تلقائياً من صنف `فراغ` (void). * تمكين تعريف المتغيرات والدالات العمومية داخل أصناف المستخدم. هذه تقابل تعريف الدالات والمتغيرات داخل الأصناف باستخدام المبدل static في لغة السي++. * المؤشرات على أصناف المستخدم تمثَّل تلقائيا كمؤشرات على صنف أول عنصر من عناصر صنف المستخدم ذاك. أي، إذا كان هناك صنف مستخدم أول عنصر منه عدد صحيح، فإن المؤشر على صنف المستخدم ذاك يعامل تلقائياً كمؤشر على عدد صحيح دون الحاجة لاستخدام الأمر `~مثل`. * إضافة مكتبة تجريبية لواجهة المستخدم مبنية على أدوات جتك (GTK). هذه المكتبة تجريبية فقط وتشمل فقط جزءًا بسيطاً من مكتبة جتك، ولكن بإمكان المستخدم إضافة ما ينقصه بسهولة. المكتبة توفر دعماً للنوافذ والنوافذ الحوارية والأزرار والقوائم وقوائم الأوامر وحقل الإدخال وشريط الحاشية بالإضافة إلى الصور. إذا احتاج المستخدم إلى عناصر غير متوفرة فكل ما يحتاجه إضافة تعريف للدالات المعنية ويمكن مراجعة مكتبة الأسس الخاصة بجتك لمعرفة كيفية فعلها. ### الإصلاحات * إصلاح مشكلة في إعراب القوائم ضمن التراكيب. * إصلاح مشكلة في إنشاء الشفرة التنفيذية للدالات. * يمكن الآن تعريف متغيرات عمومية من الدالات أو أصناف المستخدم. * إصلاح مشكلة في تحديد لغة العرض للنظام. * إصلاح مشكلة في إعراب أصناف معطيات الدالات عند غياب أسماء تلك المعطيات. * بضعة إصلاحات داخلية أخرى في المترجم ومكتبة البناء المعيارية.
## الإصدار 0.3.0 (2018-09-26م \ 1440-01-16هـ)
### الإضافات * تحسين الدعم للأصناف الأساسية لتدعم التالي: - الأعداد الصحيحة بـ8 و16 و32 و64 بتة. - الأعداد الطبيعية (الموجبة فقط) بـ8 و16 و32 و64 بتة. - الأعداد بالفاصلة العائمة بـ32 و64 بتة. - القيمة الثنائية. * الأصناف الأساسية الآن تعمل كالقوالب التي تستقبل عدد البتات كمدخل مثل `صـحيح[16]` أو `عـائم[64]`. يعتمد حجم افتراضي للصنف في حال عدم إعطاء حجم بشكل صريح. * إضافة دعم لمؤشرات الدالّات. * تمكين المقارنات على المؤشرات بالإضافة لتمثيل المؤشرات كأعداد صحيحة والعكس. * دعم المقطع `وإلا` في الجمل الشرطية. * دعم الأمر `اقطع` في الحلقات. * دعم الأمر `اكمل` في الحلقات. * إضافة الدعم للمبدّلات. * إضافة دعم حقيقي لمجالات التسمية (namespace). * تمكين دمج التعريفات عبر المبدّل `@دمج` (`@merge`). سيمكن هذا الدمج من إضافة تعريفات جديدة لحزمة أو صنف مسبق التعريف. * صنف الدالة يمكن إهماله في تعريف الدالات إذا كانت لا تقبل مدخلات ولا ترجع شيئاً. * إضافة مكتبة تنفيذية تحتوي على الحزم التالية: - طـرفية: تحتوي دالات التعامل مع المستخدم في الطرفية. - نـظام: تحتوي دالات متنوعة للتعامل مع النظام. - ذاكـرة: تحتوي دالات حجز الذاكرة والتعامل معها. - مـحارف: تحتوي دالات التعامل مع المحارف. - مـلف: تحتوي دالات التعامل مع الملفات. - ريـاضيات: تحتوي دالات رياضية متنوعة. * إزالة الأمر `link` والاستعاضة عنه بمبدل @تصدير على تعريف دالة اعتيادي. * تعريف اصناف المستخدم يتم الآن باستخدام الأمر `صنف` (type) بدل struct. * الإشارة إلى عناصر الدالات يتم الآن باستخدام الأقواس المنحنية بدل الأقواس المربعة. * إعادة تسمية `مكتبة البناء المعيارية` (SCG) إلى SPP أو `مكتبة نمط البرمجة المعياري`. * إضافة الأمر `أدرج_ش_ب_م` (dump_ast) لطباعة شجرة البنية المجردة لعنصر معين (AST). * إعادة تسمية الأمر `build`، والذي يدرج فقط التمثيل الوسطي، إلى `أدرج_ت_و` (dump_llvm_ir). * الأمر `نفذ` يستقبل الآن إشارة إلى دالة البداية، والتي يمكن الآن تسميتها بأي اسم. * دعم اللغة العربية في إشعارات البناء. * تحسين التمثيل الضمني (implicit casting). * تحسينات متنوعة لبناء التراكيب. * إضافة وضع تفاعلي (interactive mode) ولكنه مبسط ينفع العاملين على المترجم أو مكتبات البناء أكثر من المستخدم النهائي. ### الإصلاحات * تحسينات عديدة على إشعارات البناء. * إصلاح مشكلة في الإبلاغ عن الموقع الصحيح لإشعار البناء في بعض الحالات. * إصلاح مشكلة في بناء الدالات المسماة بأحرف غير انجليزية. * تحسين الاختبارات الآلية وتبسيطها بالاعتماد فقط على اختبارات e2e. * إصلاح العديد من العلل. ### تعديلات داخلية * إعادة بناء مكتبة البناء المعيارية بتصميم جديد أبسط بكثير وأكثر قابلية للتطوير والصيانة. * تعديل كبير في شفرة القلب يبسطها ويزيل الأجزاء غير الضرورية. * فصل الجزء المتعلق ببيئة التنفيذ (LLVM) في مجال منفصل عن بقية أجزاء مكتبة نمط البرمجة المعياري ما يسهل مستقبلاً دعم بيئات غير LLVM. * إضافة خاصية قوالب الوسائط (template interfaces) للشفرة المصدرية. * إضافة خاصية الوسائط المتحركة (dynamic interfaces) للشفرة المصدرية. * يمكن الآن تعديل مكتبة نمط البرمجة المعياري ديناميكياً أثناء التشغيل. * إزالة الاعتماد على Boost و Catch. * استخدام C++17 بدل الإصدار الأقدم لبناء الأسُس. * تعديلات في أسلوب التسميات. * تعطيل خاصية RTTI التي لم نعد نحتاجها.
## الإصدار 0.2.1 (2015-11-28م \ 1437-02-16هـ)
### الإضافات * دعم التمثيل بين أنواع المؤشرات المختلفة. * دعم تمثيل المؤشر بعدد صحيح. * دعم المؤثر ~حجم (~size) للحصول على حجم متغير أو تركيب في الذاكرة. * إضافة فئة المحرف (char). * إعادة هيكلة نظام البيانات في القلب لتبسيطها وجعلها في ذات الوقت أكثر شمولاً. هذا التعديل ضروري لمكتبة البناء المعيارية (SCG) لتمكينها من استخدام نظام البيانات ذاته لخزن بيانات الشفرة المُترجمة. هذا التغيير هو مقدمة لبدء العمل على المجالات وغيرها من خواص البرمجة كائنية المنحى. * تحسين أداء المُعرب. ### الإصلاحات * تعديل أسلوب التسميات في الشفرة المصدرية لمكتبة البناء المعيارية (SCG). * إصلاحات متنوعة أخرى.
## الإصدار 0.2.0 (2015-04-27م \ 1436-07-08هـ)
### الإضافات * دعم اكتشاف الأصناف تلقائياً أثناء تعريف المتغيرات. مثلاً، الجملة التالية تحدد نوع المتغير م تلقائياً على أنه عدد صحيح: عرّف م = 5؛ * دعم تمثيل الأصناف ضمنياً (implicit casting) وصراحة (explicit casting). * دعم المؤثر الأحادي - والمؤثرين السبقيين ++ و --. * دعم استخدام الدالّات في موضع سابق لتعريفها في الشفرة المصدرية. * تمكين الربط بالمكتبات الخارجية. * تعديل الأمر "اشمل" (import) ليبحث في مسارات متعددة أثناء البحث عن الملف المقصود بدل الاكتفاء بالبحث في المسار الحالي. * تبديل بعض المؤثرات بأخرى أكثر شيوعاً. مؤثر التعيين الآن = بدلاً من := ومؤثر المقارنة الآن == بدل = ومؤثر النفي الآن ! بدل ^. * دعم صيغة UTF8 في المرمّز. * إضافة الأمر "لقب" (alias) لتمكين ترجمة المكتبات والشفرة المصدرية. * دعم اللغة العربية. بإمكانك الآن كتابة شفرتك المصدرية باللغة العربية. * تحسين إشعارات البناء: - تجاوز الشفرة ما بين الأقواس أثناء البحث عن نهاية الجملة بعد حدوث الخطأ. - الإبلاغ عن موقع الإشعار في الشفرة المصدرية. الإشعارات الآن تحتوي على اسم الملف ورقم السطر والعمود للشفرة المبلّغ عنها. - الإبلاغ عن المزيد من الأخطاء قبل توقف الترجمة. * الإعفاء عن الحاجة لتعديل المتغير البيئي LD_LIBRARY_PATH بعد التنصيب. * تعديلات داخلية: - مكتبة SCG تستخدم الآن تعريفات القلب للإشعارات الاستثنائية بدل تعريفاتها الخاصة. - تبسيط الفئات في المجال Core::Data لتحسين تصميمها وإزالة التعقيدات غير الضرورية. - تبسيط المجال Core بتقليل عدد المجالات الداخلية. - تحوير المرمّز ليستخدم الفئات المعرّفة في Core::Data بدل الفئات الخاصة به. - تحسين تصميم نظام البحث المعلوماتي (data references subsystem) بجعلها أشمل وأكثر قابلية للتوسيع. - إزالة الفئة ParsedDataBrowser واستخدام نظام البحث المعلوماتي بدلاً منها. ### الإصلاحات * اصلاح الخطأ في التعامل مع عدة مؤثرات ثنائية في التركيب الواحد. * إصلاح بعض التسريبات في الذاكرة. * إصلاحات متنوعة أخرى.