الإصدارة 1.4 من مُفسِّر أُبْدِع

نشره م. وائل حسن -أ… في

تم بحمد الله تعالي بناء الإصدارة 1.4 من مُفسِّر أُبْدِع و رُفِعَتْ علي مواقعها علي الشبكة، كانت الإصدارات التحديثية 1.1 و 1.2 و 1.3 قد صدرت خلال الفترة ما بين 16 مُحرَّم و 4 صَفَر لحل بعض المشاكل التي تم اكتشافها في الإصدارات السابقة و/أو دعم بعض المواصفات القياسية لإبداع و التي لم تكن مدعومةً من قبل، إلا أن الإصدارة التحديثية 1.4 تُعتبَر نقلةً نوعيةً في مسيرة العمل في بناء أُبْدِع خلافاً لسابقاتها؛ و هذا لأنها احتوت علي تعديلاتٍ كثيرة العدد و عميقة التأثير كما سيلي توضيحه.

الجديد في هذه الإصدارة ما يلي:

* دعم الباقات و ملفات الباقات: ففي كل الإصدارات السابقة لم يكن أُبْدِع قادراً علي التعامل إلا مع الملفات الرئيسة فقط، بينما لا يمكنه التعامل مع ملفات الباقات نهائياً و لم يكن يفهم معني كلمة باقة. و لهذا لم أقم بفرض وجود الامتداد (.رئيس)  للملفات الرئيسة، علي حين أنه لا يمكن التعامل مع أي ملفٍ به أكواد إبداع بمفسر أُبْدِع بعد الإصدارة 1.4 إلا إذا كان له أحد الامتدادين (.رئيس) أو (.باقة).

* دعم أمر (أضم) الخاص بضم الباقات المختلفة إلي مشروعنا الذي نعمل  عليه.

مثال:

أضم  باقة
أضم  دار.الحكمة_دخل.خرج

حيث (دخل.خرج) هي باقةٌ فرعيةٌ داخل الباقة (دار.الحكمة).

* دعم استخدام أسماء الباقات في الأماكن التالية:

- الحصول علي قيمة كائن صنف:
        
مثال:

كائن.آخر = باقة_صنف.آخر()

حيث قمنا باستنساخ الصنف (صنف.آخر) الموجود في الباقة (باقة)، ثم أسندنا هذه القيمة إلي الكائن (كائن.آخر).

- الحصول علي قيمة كائن لقب:

مثال:

مهنة = باقة_عمل_محاماة

حيث قمنا بإسناد القيمة (محاماة) من اللقب (عمل) الموجود في الباقة (باقة) إلي الكائن (مهنة).

- تعريف كائن(ات) أصناف أو ألقاب، أو جداولاً منهما:

أمثلة:

باقة_صنف.ما  كائن.ما = صنف.ما()
باقة_عمل  مهنة = باقة_عمل_محاماة
باقة_صنف.ما{1}  جدول = {صنف.ما()   باقة_صنف.ما()}
باقة_يوم{1} الأيام = {يوم_جمعة  يوم_سبت}

- تعريف مدخلات و مخرجات الإجراءات:

مثال:

إجراء  (باقة_صنف.ما  كائن.ما   باقة_يوم  اليوم) إجراء1 :
    كائن.ما = صنف.ما()
    اليوم =  يوم_جمعة

- تعبير (يرث):

مثال:

صنف  شاشة.جديدة  يرث غلط   باقة_شاشة  صنف.آخر   دار.الحكمة_دخل.خرج_شاشة:


 حيث نري أن الصنف (شاشة.جديدة) يرث الصنف (شاشة) الموجود في الباقة (باقة)، و يرث كذلك الصنف (شاشة) الموجود في الباقة (دخل.خرج) و التي توجد بدورها في الباقة (دار.الحكمة). و بالطبع نسبنا الأصناف إلي باقاتها لأن الصنفين السابقين متشابهان في الأسماء، و بالتالي يجب توضيح مسار كل صنفٍ حتي يستطيع المُفسِّر تحديده بشكلٍ صحيح.

 - تعبير (تلقيب):

مثال:

تلقيب :
    دار.الحكمة_دخل.خرج_شاشة_أكتب.سطر(نص) =  أكتب.سطر.جديد
    باقة_شاشة_رقم.الشاشة = رقم.الشاشة.باقة

- تعبير (ما عدا):

مثال:

صنف  شاشة.جديدة  يرث غلط  باقة_شاشة  صنف.آخر   دار.الحكمة_دخل.خرج_شاشة:
    ما عدا :
        دار.الحكمة_دخل.خرج_شاشة_رقم.الشاشة
        دار.الحكمة_دخل.خرج_شاشة_شاشة(رقم)
        دار.الحكمة_دخل.خرج_شاشة_أكتب(رقم)
        دار.الحكمة_دخل.خرج_شاشة_أكتب(نص)
        دار.الحكمة_دخل.خرج_شاشة_أكتب.سطر(رقم)
        
حيث أنه نظراً لتشابه أسماء مكونات الصنفين المسميين (شاشة) في الباقات المختلفة فإنه يلزم عند وراثتهما معاً استثناء بعض المكونات المتشابهة الأسماء من الوراثة، أو تلقيبها بحيث يزول الإرتباك.

- قيمة رقمية أو نصية أو منطقية تنتج عن تعبيرٍ مشابهٍ لـ:

<أسماء.باقات>_<اسم.صنف>(<مُعامِلات.المُشيِّد.إن.وُجِدَت>)_<مُكوِّنٌ.داخل.الكائن>

أمثلة:

رقم  رقم.الشاشة =  دار.الحكمة_دخل.خرج_شاشة(543543)_رقم.الشاشة
رقم  رقم.الشاشة =  دار.الحكمة_دخل.خرج_شاشة(543543)_هات.رقم.الشاشة()

- تعبير (معالجة):

مثال:

معالجة باقة_غلط.جديد  الغلط :
    أكتب.نص.سطر("معالجة باقة_غلط.جديد  الغلط :")


حيث (غلط.جديد) هو صنفٌ يرث من الصنف القياسي (غلط) و يُوجَد في الباقة (باقة).

   
النقلة النوعية التي تعطيها هذه الإصدارة لأُبْدِع هي أنه الآن صار بالإمكان البدء في عمل مشاريع كاملة بإبداع، صحيحٌ أن عدم وجود مكتبة قياسية حتي الآن يحد من نوعية تلك المشاريع بشكلٍ صارخٍ إلا أن خروج هذه الإصدارة ذاتها يَعِد بتكوين مكتبةٍ قياسيةٍ صغيرةٍ بعد فترةٍ قليلة، و ينقص لفعل ذلك فقط أن يتم دعم: التعامل مع مكتبة الـjdk في إبداع، أو بناء الإجراءات المُخصصة، أيهما أسرع.

في الأيام التالية سوف أُركِّز بمشيئة الله تعالي علي إصلاح أي عِلَلٍ bugs أكتشفها نتيجةً للتغييرات الكبيرة التي حدثت مؤخراً في كود أُبْدِع.

لمزيدٍ من التوضيح يمكنكم النظر إلي المثال البرمجي الكامل التالي لاختبار عمل التغييرات الجديدة المشروحة بالأعلي، و لكن تذكروا أن هذا البرنامج لا وظيفة له إلا اختبار الإضافات الجديدة فقط و لهذا فليس له فائدةٌ أخري و ليس هناك ترابطٌ بين أوامره المختلفة سوي أنها مكتوبةٌ بجانب بعضها البعض:

المشروع البرمجي يحتوي علي:


* الملف الرئيس المسمي (pkg_files_test.رئيس) و هو المدخل الرئيس للبرنامج، و بجانبه في نفس الباقة (الباقة = المُجلَّد) هناك:
* الباقة (باقة) التي تحتوي علي ملفات الباقات:
    - شاشة.باقة  
    - صنف.آخر.باقة
    - غلط.جديد.باقة

* الباقة (دار.الحكمة) و التي تحتوي بدورها علي باقةٍ فرعيةٍ تُسمَّي (دخل.خرج)، و تحتوي الأخيرة علي:
        - باقةٍ فرعيةٍ فارغةٍ تُسمَّي (باقة)
        - باقةٍ فارغةٍ أخري تُسمَّي (باقة.أخري)
        - و بجانبهما ملف باقةٍ يُسمَّي (شاشة.باقة)

و لمن يرغب في تحميل المشروع المثال يمكنه فعل هذا من موقع sourceforge:
https://sourceforge.net/projects/obde3/files/examples/pkg_files_test.tar.gz/download

أو من موقع 4shared:
http://www.4shared.com/archive/jV0wZZqn/pkg_files_testtar.html

كما يمكنكم تحميل أُبْدِع من مركز التحميلات علي الموقع الرسمي:
http://ebda3lang.blogspot.com/p/blog-page_5.html