إشترك معنا ليصلك جديد الموقع

بريدك الإلكترونى فى أمان معنا

30‏/12‏/2012

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

وادي التقنية
الإصدارة 1.7 من مُفسِّر أُبْدِع
Dec 30th 2012, 10:12

تم بحمد الله تعالي بناء الإصدارة 1.7 من مُفسِّر أُبْدِع و رُفِعَتْ علي مواقعها علي الشبكة،

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

* بناء خاصيةٍ تجعل رسالة التنبيه لوجود خطأٍ في التعامل مع المُكدِّس stack لا تظهر للمستخدم العادي و تظهر لي أنا فقط لأني أحتاجها أثاء برمجتي للمُفسِّر، و كانت الرسالة قد أصبحت في الإصدارة 1.6 علي الشكل التالي:


STACK ISN'T EMPTY AT THE END OF EXECUTING !
executing completed successfully.

أي أنها تُنبِّه إلي التعامل الخاطيء مع المُكدِّس و لكنها تخبر المستخدم العادي أن برنامجه تم تنفيذه بشكلٍ صحيح.
و قد وعدتُ حينها أنني  سأجعل أُبْدِع يعرض هذه الرسالة فقط حينما أتعامل أنا معه؛ حتي لا يُربِك المستخدم العادي بأمورٍ لا تهمه في قليلٍ أو كثير. و قد فعلتُ في هذه الإصدارة.
   
* إصلاح عِلَّةٍ في بناء قواعد تغطية إجراءٍ لإجراءٍ آخر، و هي الخاصة بأن "الإجراء المُغطِّي يجب أن يكون له مُستوَي وصول مساوٍ لمُستوَي وصول الإجراء المُغطَّي أو أكبر منه". فكان مثلاً في الإصدارات الأقدم يُسمح بتغطية إجراءٍ خاصٍ لإجراءٍ عام !

* بناء القاعدة التي تنص علي أنه "لا يمكن قراءة قيمة كائن لقب لم يُعطَ قيمةً و إلا حصل المبرمج علي خطأ زمن تشغيل".
فمثلاً البرنامج:


يوم الإجازة
لو الإجازة = يوم_جمعة :
    أكتب.نص.سطر("الإجازة = يوم_جمعة")

   
لقب يوم  :
    سبت أحد  اثنين ثلاثاء أربعاء  خميس جمعة
   
   
ينتج عنه خطأٌ عند تنفيذه لأنه يتم فيه قراءة قيمة كائن اللقب (الإجازة)  قبل إعطائه أي قيمة.

* إتاحة إمكانية ترك ما بين أقواس قيمة الجدول فارغاً بما معناه أن قيمة الجدول تساوي لاشيء، أو وضع كلمة لاشيء للحصول علي نفس النتيجة.
مثال1:

رقم{2}  الأرقام = {لاشيء  {} }

فهنا قيمة البُعد الأرقام{1} تساوي لاشيء، و كذا فقيمة الأرقام{2} تساوي لاشيء بدورها.

مثال2:

رقم{2} ثابت أرقام3  = {بعد1 = {}   بعد2 = {}}

و هنا عرَّفنا جدولاً مُلقَّباً خالياً من القيم، بدون الاضطرار لملئه بقيمٍ لا لزوم لها. و هو ما سيحتاجه المبرمجون في بعض الأحيان.

* إصلاح عِلةٍٍ كانت تجعل المُفسِّر يعتبر أن مقارنة مؤشري جدولين باستخدام المُعامِل  #  خطاً نحوي.
مثال:

رقم{2}  الأرقام = {لاشيء  {} }
لو الأرقام{1} # لاشيء :
    أكتب.نص.سطر("الأرقام{1} # لاشيء")
   
* إصلاح علةٍ في تعامل تعبير (بينما) مع الجداول التي لم يتم حجز أماكن لها في الذاكرة، حيث كان في البداية ينتج عن ذلك التعامل خطأ زمن تنفيذ، و لكن الآن يتم معاملة الجدول الذي لم يتم حجز مكانٍ له في الذاكرة في تعبير (بينما) علي أنه جدولٌ فارغ بدون قِيم و بالتالي لا يتم الدخول إلي صلب الحلقة التكرارية و لا تُنفذ الأوامر التي فيها نهائياً.
مثلاً البرنامج التالي:

رقم{1} أرقام1
رقم الرقم

بينما الرقم في أرقام1 :
    أكتب.نص.سطر("الرقم =  " + إلي.نص(الرقم))
   
   
عند تنفيذه لا يكتب أي قِيمٍ علي الشاشة، و في نفس الوقت لا ينتج عنه أخطاء زمن تنفيذ.

* إصلاح عِلَّةٍ كانت تتسبب في خطأٍ في التعامل مع الجداول المُلقَّبة في كائنات الأصناف، فمثلاً لو كتبنا الكود التالي:

 
صنف1  كائن1 = صنف1()
كائن1_أرقام3_بعد1 = {11  22  33}

أكتب.نص.سطر("كائن1_أرقام3_بعد1_طول() = " + إلي.نص(كائن1_أرقام3_بعد1_طول()))
أكتب.نص.سطر("كائن1_أرقام3_بعد1_عدد.الأبعاد() = " + إلي.نص(كائن1_أرقام3_بعد1_عدد.الأبعاد()))

أكتب.نص.سطر("كائن1_أرقام3_طول() = " + إلي.نص(كائن1_أرقام3_طول()))
أكتب.نص.سطر("كائن1_أرقام3_عدد.الأبعاد() = " + إلي.نص(كائن1_أرقام3_عدد.الأبعاد()))
   
أكتب.نص.سطر("كائن1_أرقام3{1}_طول() = " + إلي.نص(كائن1_أرقام3{1}_طول()))
أكتب.نص.سطر("كائن1_أرقام3{1}_عدد.الأبعاد() = " + إلي.نص(كائن1_أرقام3{1}_عدد.الأبعاد()))
   
أكتب.نص.سطر("كائن1_أرقام3_بعد1_طول() = " + إلي.نص(كائن1_أرقام3_بعد1_طول()))
أكتب.نص.سطر("كائن1_أرقام3_بعد1_عدد.الأبعاد() = " + إلي.نص(كائن1_أرقام3_بعد1_عدد.الأبعاد()))

أكتب.نص.سطر("كائن1_أرقام3{1  1} = " + إلي.نص(كائن1_أرقام3{1  1}))
أكتب.نص.سطر("كائن1_أرقام3_بعد1{1} = " + إلي.نص(كائن1_أرقام3_بعد1{1}))


صنف صنف1 :
    رقم{2} عام  ثابت أرقام3  = {بعد1 = {}   بعد2 = {}}
   

كنا سنحصل علي خطأ زمن تنفيذٍ نتيجةً لأن المُفسِّر لم ينفذ الأمر:
كائن1_أرقام3_بعد1 = {11  22  33}
بشكلٍ سليم، و بالتالي بقيت قيمة البُعد (بعد1) تساوي (لاشيء) كما كانت عند تعريفها !
و لكن تم مُعالجة هذا في الإصدارة 1.7 بفضل الله عز و جل، و عند تنفيذ البرنامج السابق علي تلك الإصدارة سيعطينا النتيجة:

كائن1_أرقام3_بعد1_طول() = 3.0
كائن1_أرقام3_بعد1_عدد.الأبعاد() = 1.0
كائن1_أرقام3_طول() = 2.0
كائن1_أرقام3_عدد.الأبعاد() = 2.0
كائن1_أرقام3{1}_طول() = 3.0
كائن1_أرقام3{1}_عدد.الأبعاد() = 1.0
كائن1_أرقام3_بعد1_طول() = 3.0
كائن1_أرقام3_بعد1_عدد.الأبعاد() = 1.0
كائن1_أرقام3{1  1} = 11.0
كائن1_أرقام3_بعد1{1} = 11.0


يمكنكم تحميل مُفسِّر أُبْدِع من خلال الروابط الموجودة في (مركز التحميلات) في صفحته علي الموقع الرسمي:
 http://ebda3lang.blogspot.com/p/blog-page_5.html
و كذا يمكنكم معرفة كل ما يخص المشروع من خلال تحميل الكتاب الرسمي له (رسالة البرمجة بإبداع)، من الروابط الموجودة في صفحته علي الموقع الرسمي:
http://ebda3lang.blogspot.com/p/blog-page.html

Delicious Facebook Google Plus LinkedIn Tumblr Twitter
You are receiving this email because you subscribed to this feed at blogtrottr.com.

If you no longer wish to receive these emails, you can unsubscribe from this feed, or manage all your subscriptions

شارك هذه التدوينة وتابعنا على صفحاتنا الرسمية
ادعم الموضوع →
أو انشره →

0 التعليقات:

إرسال تعليق

المشاركات الشائعة

متتبعون المدونة

يتم التشغيل بواسطة Blogger.