نقاط قوة لغة الأسس.. ما هي تحديداً؟

السلام عليكم

في عالم يعجّ بلغات البرمجة… وأكثر منها المكتبات وأطر العمل، يحاول كل فريق ترويج منتجه المفضل بعرض مميزاته الفريدة التي لا تتوفر في غيره من المنتجات… وهذا أحد أهم الأمور لنجاح تسويق أي منتج.
وبناء على ذلك، فإنه لا بد من تحديد مميزات لغة الأسس التي تجعلها تتفرد عن غيرها وتجعلها جاذبة المبرمجين لتعلمها واستخدامها.
ومن خلال قراءتي لصفحات الموقع وصلت إلى أن الميزات الفريدة في هذه اللغة هي المذكورة على الصفحة الرئيسية:


١- “قابلة للتوسيع من قبل المستخدم نفسه بشكل ديناميكي يسمح بتوسيع اللغة لتغطية كافة احتياجات المبرمج دون الحاجة للغات متعددة”.

٢- “قابلة للامتداد عموديا للجمع بين الصفات منخفضة المستوى كتلك التي تتمتع بيها ++C والصفات مرتفعة المستوى كتلك التي تتمتع بيها لغات كبايثون وتايب سكريبت وغيرهما”.

٣- “تجمع بين مرونة اللغات الديناميكية وكفاءة اللغات المجمّعة (compiled languages)”.

٤- “قابلة للتوسع أفقيا لتغطية كافة مجالات البرمجة كتطبيقات الويب وسطح المكتب وبرمجة الأنظمة المضمنة والذكاء الاصطناعي والتعامل مع قواعد البيانات وغيرها”.

٥- “يمكن شمول توسعات اللغة في البرنامج مباشرة من مصدرها دون الحاجة لإعادة بناء المترجم أو تغيير إعداداته ودون العودة لفريق تطوير الأسس”


وإذا أردنا اختصار كل هذا بثلاث كلمات فإننا نقول: التوسع + السرعة + السهولة

ومن المعروف أن هذه الأمور لا تجتمع في لغة واحدة، لأنه كلما تحسن جانب من هذه الجوانب الثلاثة تأثرت الجوانب الأخرى، ولهذا السبب ما زالت اللغات القديمة تُستخدم حتى الآن، ولم تستطع اللغات الحديثة مجاراتها في الأداء وحسن الاستفادة من الموارد.
ومن الأمثلة الحديثة على ذلك هو JS عندما أصبحت مسؤولة عن تنفيذ برمجيات أصيلة لـwasm تتطلب سرعة في الأداء تخلت عن أجزاء منها عندما كتب asm.js رغم الجهود الهائلة التي بذلت لتحسين مفسرات JS.

فالسؤال الآن:
ماذا يُتوقع من لغة الأسس؟

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

للعلم: اطلعت على هذا الموضوع https://community.alusus.org/t/mqarnt-adae-alass-me-sy-wbaythwn-wjafaskrybt/
ولكن هدفي من السؤال ليس هو الاستفسار عن الوضع الحالي الذي وصلت إليه، وإنما أريد معرفة أهدافها والخطة التي تسير عليها وأين ستكون بعد نضجها؟
فإذا كانت هناك حالات معينة ستتفوق فيها اللغة فلا بد من بيانها بوضوح للتركيز عليها عند نشرها والتسويق لها
وإذا كان استخدام ميزات معينة يتوقع أن يقلل أداءها فأقترح أن يتم بيان ذلك منذ البداية وكتابته في التوثيق حتى يكون المطور على علم
فالذي يريد أداء عاليا وحفاظاً على الموارد ليس كالذي يريد السهولة والتمتع بأحدث الميزات

والفارق ليس صغيراً أبداً…
فالبرمجيات في التسعينات وما قبلها كانت اقتصادية لدرجة أن نظام التشغيل ويندوز ٩٥ كان يعمل على ذاكرة عشوائية بحجم 8 ميغابايت وكنت تستطيع تشغيل لعبة ثلاثية الأبعاد أيضاً… بينما لو أتينا الآن بمئة ضعف من حجم تلك الذاكرة لن تكفي لتشغيل نظام التشغيل وفتح صفحة فارغة في برنامج محرر النصوص.
ومثل ذلك في استهلاك مساحة القرص الصلب وسرعة المعالج.
أعلم أن هناك عوامل متعددة لهذا الفرق الشاسع ولكن لو ثبتنا العوامل الأخرى ولم نغير شيئاً سوى لغة البرمجة ومكتباتها لبقي هناك اختلاف كبير في استهلاك الموارد.

أعلم أن هذا الموضوع بحاجة لاختبارات وتجارب كثيرة للمقارنة والتحسين… ولكن من طرف المطورين… كيف ينظرون إلى الأمر مبدئياً أثناء تصميم اللغة؟

لنقل أن الهدف ينقسم إلى جزئين:

  • تمكين المستخدم من إضافة خاصيات مرتفعة المستوى، لكن بأداء يقترب من اللغات المنخفضة المستوى. مثال ذلك مكتبة صـفوف (Rows) التي تتيح لك التعامل مع قاعدة البيانات باستخدام ORM لكن دون تكلفة اللغات مرتفعة المستوى، أي بأداء مقارب للغة السي. وهي تتيح لك فعل ذلك عبر نقل التكلفة الإضافية إلى وقت الترجمة بدل وقت التنفيذ، أي القيام بالجزء المتعلق بتحويل العملية من صيغتها المرتفعة المستوى إلى الصيغة المنخفضة المستوى في وقت الترجمة وليس في وقت التنفيذ، بينما تقوم اللغات المرتفعة المستوى غالبا بفعل هذه الأمور في وقت التنفيذ وهو ما يسبب التكلفة الإضافية على الأداء.
  • إتاحة الدمج بين الأسلوبين المرتفع والمنخفض كما ذكرتَ، أي استخدام الأسلوب المنخفض وقت الطلب لتحصيل أداء إضافي، والتضحية بالأداء مقابل سهولة العمل في الحالات الأخرى. وهذا مهم جدا لأن الذي يحصل في اللغات الأخرى أنك تكون محصورا بين أن تختار اللغة المنخفضة في كامل مشروعك أو اختيار اللغة المرتفعة والتضحية بالأداء (وهو ما يفعله معظم المبرمجين) أو تجزئة المشروع إلى أقسام تُكتب بلغات مختلفة وهو ما يعقد العمل ويفتح المجال لمزيد من المشاكل. عبر توفير الأسلوبين في نفس اللغة سيكون الانتقال إلى المستوى المنخفض وقت الطلب أقل تكلفة على المبرمج.
1 Like

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

ويتطلب ذلك أن تصنف الأوامر والمكتبات الموجودة بحسب رتبتها في هذا الجانب وتبعا لذلك سيحصل كل نص برمجي يُكتب على هذا التصنيف بحسب ما استُخدم في تصميمه، ولفعل ذلك لا بد أن يوضع معيار بحيث يقسم الأوامر في اللغة
مثلاً إلى:
١- أوامر منخفضة المستوى
٢- أوامر متوسطة المستوى
٣- أوامر مرتفعة المستوى

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

قد يكون هذا المثال مبسطا جداً لأنواع التصنيفات وقد يكون المبرمجون المتمرسون على علم تام بما يقلل الأداء ويستهلك الموارد أثناء تصميم برامجهم، ولكن الفرق هنا أن يكون هذا الشيء من أساسيات اللغة بحيث يعرف كل من يستخدمها كيف يحسن الأداء وما التعقيدات التي يتوقع أن تؤدي إلى بطء التنفيذ مسبقا وكيف ينتقي أسلوب البرمجة المناسب ومتى يغيره، كل هذا دون أن يحتاج إلى تغيير اللغة.

وأعتقد أن هذا إذا نجح فسيؤسس لمفاهيم جديدة في عالم البرمجة… وسيؤدي إلى أن تقوم اللغات الأخرى بفعل ذلك لأنه رغم تطور إمكانيات الحواسيب فإن الحاجة لم تنقض يوماً إلى الأداء العالي الذي لا تستطيعه سوى أدوات محددة