مدونة سلوان الهلالي

تطوير ألعاب - برمجة - علم نفس

تجربة لغة البرمجة D - محاكي جهاز CHIP8/SUPERCHIP

لغة البرمجة D هي لغة متعددة الاغراض وحديثة المزايا بإمكانات متقدمة. تستند نحوياً على لغة ++C/C مع اختلافات عديدة بطبيعة الحال، يتم ترجمة برامجها للغة الآلة بشكل مشابه لما يحصل في ++C/C من ما يجعلها لغة مناسبة لتطوير البرمجيات منخفضة المستوى كسواقات العتاد وأنظمة التشغيل.

تتيح D ايضاً الدخول المباشر لأي مكتبة تم تطويرها بلغة C ودخول جزئي لمكتبات ++C، تمتلك حالياً مترجمات على نظم التشغيل الثلاث: وندوز، لينوكس، وماك.

 

 

روابط لغة D:

 

المزايا 

تحاول D ان تحل معظم مشاكل البرمجة الموجودة في لغات البرمجة الاخرى، على سبيل المثال، ادارة الذاكرة تستند على مجمع نفايات كالموجود في #C ولكن في نفس الوقت تتيح D نظام ادارة ذاكرة يدوي لمن يرغب في استخدامه عن طريق تجاوز (override) وظائف new و delete.

 تقدم كذلك دعم لميزة RAII التي تتمتع بها لغة ++C (تعني Resource Acquisition Is Initialization) رغم ان اللغات التي تستخدم مجمع نفايات تواجه مشكلة مع هذه الميزة.

تقدم D ايضاً مزايا اساسية مبنية كجزء من اللغة لدعم البرمجة المتوازية (Parallel Programming).

وتمتلك نظاماً لبرمجة القوالب (Generic Programming/Templates) من الصعب ان تجد له مثيل!

تجمع D ما بين امكانات الحلول البرمجية منخفضة المستوى (يمكن حتى كتابة اكواد Assembly بشكل مباشر كما في ++C/C) والحلول مرتفعة المستوى (سرعة ترجمة موازية لـ #C، ادارة ذاكرة ذاتية، مصفوفات عملية... الخ).

 

العيوب

جميع عيوبها كتقنية مرتبطة مباشرة بعمرها القصير وعدم الاهتمام والمشاركة في تطويرها من قبل عدد كافي من المطوّرين:

  • ادواتها الاساسية غير متكاملة ولا مستقرة (المترجمات، متتبع الأخطاء، المحررات،.. الخ)
  • هنالك انقسام في مجتمع المطوّرين أثر على اللغة برمتها بشكل سلبي، حيث ستجد مكتبتان قياسيتان مختلفتان تماماً (Phobos و Tango) ورغم أن المكتبة الرسمية اصبحت Phobos مع الاصدارة الثانية من لغة D لكن ستجد العديد من المكتبات والبرامج لا زالت تحتاج Tango!
  • موقع اللغة غير جذاب على الاطلاق وطريقة تصفح وثائق اللغة أقل ما يقال عنها انها غبية (ليس هنالك بحث ولا فهرس حتى!)
  • لا تملك مكتبة حقيقية لانشاء البرامج ذات واجهة الاستخدام الرسومية حتى الآن. المكتبات الموجودة إما تكون port لمكتبة معروفة (مثل Gtk و SWT) او تكون لا زالت في المرحلة التجريبية والتطوير بطيء (إن لم يكن قد توقف تماماً)

 

SALCHIPD

رأيت لغة D قبل فترة ولكن لم احاول تجربتها، قبل عدة ايام كنت في حالة انقطاع انترنت-ية فقررت ان اتسلى قليلاً مع D ابتسامة

كتجربة، وجدت نفسي اطوّر محاكي لجهاز العاب قديم جداً يحمل اسم CHIP8 (من السبعينات!) يستند على لغة مشابهه لـ Assembly يتم تنفيذها عن طريق Virtual Machine، ولم اكن املك اكثر من يوم واحد من الوقت لتطوير المحاكي، من ما يعني اني سأحاول الاستفادة من لغة D كلغة تطوير سريعة...

نتيجة الاختبار؟

 D مناسبة جداً كلغة تطوير سريعة! في نهاية اليوم كان لدي محاكي لجهازين بدل واحد! CHIP8 والنسخة المطوّرة منه SUPERCHIP.

استخدمت مكتبة SDL عن طريق مكتبة خاصة بلغة D تقدم الدخول لمكتبات عديدة معروفة مرتبطة بالالعاب تحمل اسم Derelict، تستفيد من امكانية D التعامل مباشرة مع مكتبات ++C/C بحيث يمكن استخدام LIB/DLL بشكل مباشر مع D، ستجد ملفي SDL.dll و SDL_Mixer.dll مع المحاكي على سبيل المثال.

 

 

 

 

 وهذا هو المحاكي مع الكود الكامل ووثائق الجهاز وعدد كبير من الالعاب للتجربة:

SALCHIPD.zip (890.16 kb)

تأكد من قراءة ملف readme.txt خاصة جزء مفاتيح التحكم لأن جهاز CHIP8 يستخدم لوحة مفاتيح ستعشرية! (نعم قديم لهذه الدرجة مندهش)

 

التعليقات (2) -

  • وسام البهنسي

    28/09/2011 05:51:32 م | الرد

    سلوان، من ضمن ما ذكرته عن لغة دي أنها تحوي دعماً ضمنياً للبرمجة المتوازية. يا ليت لو تذكر لي مثالاً على ذلك، فأنا مهتم قليلاً بهذا الجانب من لغات البرمجة...

  • سلوان اسعد

    28/09/2011 11:22:28 م | الرد

    مرحبا وسام
    لا اتذكر الكثير من التفاصيل ولا فكرة لدي كيف يقارن مع مقترحات سي++ الاخيرة، C++11 اعتقد؟
    كذلك هنالك مزايا مختصة بالبرمجة المتوازية لم يتم تطبيقها بعد على D 2.0، حاولت ان اجد خارطة الطريقة للمشروع لكن لم افلح في ذلك.

    المعلومات التي لدي كالآتي، في اللغة:
    - synchronized www.digitalmars.com/.../statement.html
    - transitive const www.hans-eric.com/.../
    كذلك يمكنك العثور على تعليمات من قبيل shared لكن الوثائق مربكة
    - في المكتبة القياسية:
    std.parallelism www.digitalmars.com/.../std_parallelism.html لعمليات البرمجة المتوازية (SMP) بالإضافة لذلك std.concurrency لعمليات الاتصال بين الـ threads وستجد مثالاً حولها في صفحة ويكيبيا الخاصة بلغة D
    وكذلك concurrent programming وإن كان يبدو كدعم مبدئي core.atomic www.digitalmars.com/d/2.0/phobos/core_atomic.html

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

أضف تعليقاً

Loading