الاثنين، 14 نوفمبر، 2011

المفاضلة بين لغات البرمجة 1

الحق أن المفاضلة بين لغات البرمجة قديمةٌ قِدَم اللغات كلها، فمنذ أن تعددت اللغات أصبح من ضمن هموم المبرمجين المقارنة بين لغاتهم و اللغات الأخرى للعديد من الأسباب، و أهمها الإجابة عن السؤال القائل: أى اللغات تصلح لأى الأهداف التجارية المختلفة، و أى اللغات تصلح للتعليم، و هل توجد لغاتٌ تجمع بين المحاسن البرمجية كلها؟ أم أنه علينا أن نستخدم لكل مجالٍ لغته ؟
و قد وضع المقارنون السابقون عدة معايير للحكم بها على لغات البرمجة (أوجه مقارنة)، منها:
  1. المحمولية Portability
  2. الأمن Safety
  3. الاستقرار Stability
  4. الدعم القوى من المالك
  5. دعم التقنيات الحديثة
  6. إنفتاح المصدر
  7. البساطة و البعد عن التعقيد
  8. الأداء العالى للمُنْتَجات

و غيرها من الأوجه الأخرى، و بالطبع فإن كل جماعةٍ من هؤلاء المبرمجين كانت لهم الأولويات الخاصة بهم و الترتيب الخاص للعناصر السابقة، فمنهم من كان الدعم القوى من المُنْتِج بالنسبة له يعد الأهم بلا منازع (و نرى معظم هؤلاء من أتباع مايكروسوفت) فى حين تلى ذلك باقى العناصر فى الأهمية، و هناك من يضع إنفتاح المصدر و البساطة فى المرتبة الأولى و..و....و غيرها.
أما عما أراه أنا معياراً مناسباً للحكم على لغات البرمجة فألخصه فى العناصر التالية:


1) التخصص
3) التهجين
4) البساطة
5) الأمن
6) التجرد
7) الشمول


1- التخصص:
قضية التخصص هنا أحصرها فى المسألة التى تناقش ما يجب على المبرمج البانى للمترجم the compiler القيام به، و ما يجب أن يُترك للمبرمج مستخدم اللغة لكى يفعله، و يمكننى أن أعبر عن رأيى فى هذه القضية بجملةٍ بسيطةٍ هى "دع الإدارة للمترجم و حل المشاكل الأساسية للمستخدم"، و هو القول الذى أظن أنه يمكننى أن أكتفى به فى هذه النقطة كموضحٍ لرأيى كل الوضوح، إلا أننى لن أضن على القارئ ببعض الشرح لعلى أوضح أمراً التبس عليه من مجرد قراءة تلك الجملة المقتضبة.
حينما أقول الإدارة فإننى أقصد مجمل الأنشطة التى تختص بإدارة الذاكرة، و التى أُفَصِّلها فى البندين التاليين:
1) تحديد المكان الذى ستوضع به البيانات فى الذاكرة أى عملية حجز الأماكن لها.
2) تحديد الوقت المناسب الذى سيتم فيه إرجاع الأماكن التى حُجِزت لمتغيراتٍ فى الذاكرة ثم لم تعد هناك حاجةٌٌ لها إلى حوزة نظام التشغيل مرةً أخرى لإعادة استغلالها.
فهاتين النقطتين تمثلان التعامل الكامل مع الذاكرة من وجهة النظر البرمجية للمستخدم لنظام التشغيل، أما الإدارة التى يقوم بها نظام التشغيل فهى عمليةٌ أكثر تعقيداً و تشعباً من هذه بكثير و إن كانت ترتكز عليها بشكل أساسى.
و نظرتى إلى هاتين النقطتين على أنهما من نصيب المبرمج البانى للمترجم أو المفسر interprter يوضح نظرتى إلى بنية إدارة الذاكرة و توزيع المسئوليات فيها، حيث أقسمها إلى ثلاث مراحلٍ هى:
1) القسم الأدنى: و يختص به نظام التشغيل، و هو الأمور التى تتعلق بكيفية تنظيم العمليات التى يجرى تنفيذها على الحاسوب فى الذاكرة، و كيفية إحلال البرامج الجديدة التى يرغب المستخدم للحاسوب فى العمل عليها محل تلك التى قيد التنفيذ و لكنها متوقفة عن العمل وقتياً. و كذا كيفية التنسيق بين التصور للذاكرة على أنها منطقةٌ متصلةٌ من الأماكن التخزينية مصفوفةً فوق بعضها البعض و بين التصور الواقعى لها على أساس البناء العتادى hardware implementation لها (أى طريقة بنائها كما صممتها شركة التصنيع لرقاقة الذاكرة).
2) القسم الأوسط: و يختص به المترجم و المفسر، و يختص بحجز مكانٍ فى الذاكرة للمتغيرات و مكونات البرنامج المختلفة، و فى النهاية إرجاع أى مساحةٍ فى الذاكرة لم يعد البرنامج فى حاجةٍ إليها إلى نظام التشغيل مرةً أخرى لتقليص الفاقد من إمكانيات جهاز الحاسب إلى أدنى المراتب.
3) القسم الأعلى: و هو مجرد الإستخدام بدون التقييد بكيفيةٍ معينة، و يختص به بطبيعة الحال المبرمج العادى للتطبيقات العليا.
و أنا أعتبر أن أى مساس بهذا التقسيم سيحول العملية البرمجية إلى حلبة جودو، حيث تتداخل أقدام و أذرع المتصارعين بشكلٍ لا يدرى معه أحدٌ لمن هذا الذراع و لمن هذه القدم، و بالطبع فإن هذه الحال لا ترضى من يدافع عن الحق الطبعى للمبرمج العادى فى الحصول على الحرية القصوى،  و كذلك الراحة الكاملة فى التركيز على حل مشكلته التى يرغب فى حلها، بدلاً من تفريغ جزءٍ من وقته و جهده لعمليةٍ من الواضح أنه لا ناقة له فيها و لا جمل.
ثم إننى أتساءل عن الوظيفة التى ندخرها للمترجم إن كانت إدارة الذاكرة من نصيب المبرمج العادى، فهل ستكون مهمة المترجمات الرئيسة التى تُركز عليها أغلب التركيز هى عملية التحويل من النص البرمجى عالى المستوى إلى الأصفار و الوحدان على الشكل الذى يفهمه معالجٌ معينٌ processor لنظام تشغيلٍ معين؟.
إننى أظن أنه من اللازم حقاً أن يركز مطوروا اللغات البرمجية على النموذج النظيف منها، و أن يضعوا نصب أعينهم تطوير مترجماتٍ ذات كفاءةٍ عاليةٍ تُعين المبرمج المستخدم على التركيز على عمله الأساسى، و فى نفس الوقت تطبق أفضل الخوارزميات التى تعطى البرنامج كفاءة الاستغلال الأفضل لموارد الجهاز.

يُتبع.

ليست هناك تعليقات:

إرسال تعليق