Uploaded avatar of iHiD

إنه مايو المُغيّر للفكر!

@iHiD
منذ أكثر من 3 سنوات
فيديو

مقدمة

مرحبًا جميعًا! أتمنى أن تكونوا جميعًا بخير.

تمرّ السنة بسرعة، ووصلنا إلى Mindshifting May، وهو الشهر الذي أتحمّس له أكثر من غيره على الأرجح، أساسًا لأنه يتضمّن Prolog!

أتمنى أن تكونوا قد استمتعتم بـ Analytical April. شارك فيه عدد هائل منكم، وأظنّه كان من أنجح الشهور حتى الآن. كما تحدّثت إلى Simon Peyton Jones خلال أبريل في مقابلة متأخرة من Functional February. كان ذلك رائعًا حقًا، وأوصي بمشاهدته من جديد بالتأكيد، ولو من أجل العبارة الجميلة: «حين يتآكل الحجر الجيري للبرمجة الأمرية، سينكشف تحته جرانيت البرمجة الوظيفية».

على أي حال، لننتقل إلى Mindshifting May! وكالعادة، سنقدّم لك أنا وErik نظرة سريعة على موضوع الشهر وعلى اللغات المختلفة التي سنستكشفها.

لدينا هذا الشهر ستّ لغات دفعة واحدة: Ballerina وPharo وProlog وRed وTcl (Tickle) وUnison. كل لغة من هذه اللغات مختلفة تمامًا عن اللغات «السائدة» الأكثر شيوعًا، لذا ننصحك بتجربة أكثر من واحدة لتلمس الفروق بينها. أنا شخصيًا أنصحك بـ Prolog لأنها من اللغات التي استمتعت بالبرمجة بها أكثر من أي لغة أخرى في حياتي. كما أن Erik متحمّس جدًا لـ Unison، فهي خيار آخر جيد للتجربة أيضًا.

الشارات

للحصول على شارة Mindshifting May عليك إكمال أي خمسة تمارين في إحدى هذه اللغات خلال مايو.

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

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

يمكنك العثور على هذه التمارين وتمارين الشهور السابقة كلها في صفحة #12in23.

نظرة عامة

لنبدأ بالتعمّق واستكشاف اللغات عبر نظرة عامة على كل منها.

Prolog:

  • أسلوب تفكير مختلف. يُعرَّف البرنامج كمجموعة من العلاقات، ثم «تستعلم» من قاعدة بيانات العلاقات لإيجاد الإجابات باستخدام التوحيد (مطابقة الأنماط). مثالية للأنظمة القائمة على القواعد
  • قواعد نحوية قليلة، فنوع بيانات واحد فقط (الحدود) وعنصر بنيوي لغوي واحد (البنود). والبنود مبنية كليًا من الحدود، ويمكنها تعريف حقائق أو قواعد
  • تصريحية للغاية. تهتمّ أقل بكيفية الحساب، وأكثر بما ينبغي حسابه. وهذا يعني في كثير من الحالات كودًا أقل
  • مصمَّمة للعمل جيدًا في الاستعلام من فضاءات بحث كبيرة. استراتيجيات بحث مختلفة (العمق أولًا، والعرض أولًا)، مع دعم التقليم التلقائي

Unison

  • لا توجد تعارضات إصدارات في كود Unison! فدالة Unison تعرف قيم التجزئة لتبعياتها، فتستطيع إيجاد الإصدار الصحيح من الكود الذي تحتاجه.
  • يدعم Unison تصفّح الكود مباشرةً في واجهة التطوير المحلية وفي المستودعات المستضافة، بحيث يمكنك دائمًا النقر للوصول إلى الكود المصدري للمكتبات التي تعتمد عليها.
  • Abilities وسيلة لإدارة «التأثيرات» (مثل IO) بأسلوب وظيفي خالص

Pharo

  • قواعد نحوية قليلة جدًا، تكفي بأكملها لبطاقة بريدية (6 كلمات محجوزة فقط!). وصياغة الرسائل تحاكي اللغات الطبيعية، بفاعل وفعل ومكمّلات (between: 1 and: 2 +). والدلالات بسيطة أيضًا (مثل قواعد أسبقية في غاية البساطة). وهذا يجعلها أسهل في التعلّم والقراءة
  • الإنتاجية رائعة بمجرد تجاوز منحنى التعلّم الأولي. وهناك أسباب متعددة لذلك، منها الدلالات البسيطة وقلة القواعد النحوية، إضافة إلى بعض ميزات Pharo البارزة التي سنذكرها لاحقًا
  • تعمل على معظم المنصات (Windows وmacOS وLinux مع دعم ARM) على آلة افتراضية سريعة (OpenSmalltalk)
  • ليست مجرد تنفيذ لـ Smalltalk، بل ما تزال تُطوَّر بفعالية (أحدث إصدار من SmallTalk هو SmallTalk 80 من عام 1980)
  • مجتمع ودود

Tcl (تُنطق «tickle»)

  • قواعد نحوية قليلة جدًا، 12 قاعدة فقط تكفي لورقة واحدة. والدلالات أيضًا مباشرة نسبيًا. وهذا يجعل البرامج سهلة القراءة والتعلّم
  • تزامن بسيط عبر الكوروتينات، ما يسمح بكتابة كود غير متزامن كما لو كان متزامنًا
  • حلقة أحداث مدمجة لبرمجة الشبكات وإدخال/إخراج الملفات غير المتزامن
  • ناضجة، لكنها ما تزال تتطور

Ballerina

  • دعم من الدرجة الأولى لمعالجة JSON وXML والبيانات الجدولية بشكل تصريحي وآمن الأنواع، مع استعلامات مدمجة في اللغة
  • أنواع مرنة مع غلبة الكتابة البنيوية (كتابة البطّة). والأنواع المغلقة وسيلة لتحقيق الأنواع الفرعية، بينما تتعامل الأنواع المفتوحة بلطف مع البيانات الزائدة عن الحد المُرسل. كما أن ربط البيانات والتحقق منها مدمجان عند استخدامها في موارد HTTP
  • دعم مدمج لأنماط التكامل والموصلات الشائعة، بما في ذلك المعاملات الموزعة والتعويض وقواطع الدوائر
  • كل برنامج Ballerina قابل للملاحظة تلقائيًا عبر أي أداة من أدوات Open Telemetry، ما يمنحك تحكمًا كاملًا ورؤية واضحة لسلوك الكود وأدائه.
  • تزامن ممتاز عبر الـ strands، وهي خيوط خفيفة الوزن. واستدعاءات الإدخال/الإخراج غير الحاجبة سهلة. ويمكن للمترجم المساعدة في التحقق من استدعاءات الإرسال والاستقبال بين الـ workers، ما يتجنّب الجمود. كما أن عدم القابلية للتغيير رائع أيضًا في الشبكات
  • معالجة صريحة للأخطاء عبر الأنواع الاتحادية والسكر النحوي check للمساعدة في ذلك

Red

  • خفيفة. تبلغ سلسلة الأدوات كاملة نحو 1.5 ميغابايت عند التنزيل، في ملف تنفيذي واحد.
  • محمولة. ترجمة متقاطعة سهلة. تنتج ملفات تنفيذية صغيرة دون تبعيات. وبصمة ذاكرة منخفضة.
  • Red لغة ميتا خاصة بها وصيغة بيانات خاصة بها (مثل LISPs). ويمكن للبرامج تحويل الكود وقراءته.
  • تفاعلية: يمكن ربط الكائنات لتقليل حجم البرنامج وتعقيده (فكّر في جداول Excel)

أين تُستخدم هذه اللغات؟

Prolog:

  • الذكاء الاصطناعي (نظام Watson من IBM)
  • معالجة اللغة (الطبيعية)
  • قواعد بيانات موزعة لقواعد المعرفة (TerminusDB)
  • حتى إنها استُخدمت لتحديد قواعد الأنواع في آلة Java الافتراضية

Unison

  • تُستخدم لكتابة الأنظمة الموزعة
  • خدمات الويب العامة
  • مهام الحوسبة الدفعية

Pharo

  • تُستخدم في الأدوات التفاعلية
  • تُستخدم في مجالات شديدة التباين: منصة تداول إلكترونية وأداة سحابية لإدارة الاستثمارات
  • نمذجة أولية لواجهات المستخدم والتفاعل في صناعة الدفاع
  • تطبيق ويب لتخطيط الفعاليات
  • أداة بيئة تطوير قابلة للتشكيل لاستكشاف الـ API والبيانات والأنظمة

Tcl

  • تُستخدم ككود لاصق أو مضمّنة
  • تُستخدم في واجهات أجهزة CISCO الرسومية
  • أنظمة تصنيع متنوعة
  • استخدمتها NASA في مناسبات عديدة
  • ومن الشركات الكبرى الأخرى Pixar وBoeing وIntel وNBC وغيرها الكثير.
  • أما Tk، مجموعة أدوات النوافذ، فقد تبنّتها لغات برمجة نصية أخرى مثل perl/python/ruby.
  • وExpect، أداة لأتمتة تطبيقات واجهة سطر الأوامر التفاعلية

Ballerina

  • تُستخدم في التطبيقات السحابية الأصلية
  • تستخدمها MOSIP، وهي منصة هوية أساسية تساعد الحكومات والمؤسسات الأخرى على تنفيذ أنظمة هوية رقمية وأساسية بتكلفة فعّالة.

ما الذي يجعل هذه اللغات مثيرة للاهتمام من منظور برمجي؟

Prolog:

  • لغة برمجة منطقية (من أوائلها)، وهي نمط برمجي قائم بذاته (مثل البرمجة كائنية التوجه والبرمجة الوظيفية)
  • ديناميكية التنميط

Unison

  • لغة وظيفية خالصة
  • ساكنة التنميط

Pharo

  • لغة كائنية التوجه، لكن بمعنى SmallTalk. تختلف عن لغات كائنية التوجه «العادية»: لا مُنشِئات، ولا تعريف للأنواع، ولا واجهات، ولا أنواع بدائية.
  • ديناميكية التنميط

Tcl

  • متعددة الأنماط: تدعم الأساليب الكائنية والأمرية والوظيفية
  • ديناميكية التنميط

Ballerina

  • متعددة الأنماط: كائنية ووظيفية وتصريحية
  • ساكنة التنميط

Red

  • متعددة الأنماط: أمرية ووظيفية وكائنية ورمزية وتفاعلية
  • ساكنة التنميط

ما ميزاتها البارزة؟

Prolog:

  • مرنة. كثير من المحمولات المدمجة تعمل في عدة اتجاهات. وتتيح الاستعلام عن البيانات وإنشاءها بالصياغة نفسها. وبعض المسائل التي تكون صعبة في لغات أخرى تصبح هنا بالغة السهولة
  • DCG أشبه بمُركّب محلّلات مدمج، ممتاز في تحليل التسلسلات وتوليدها وإكمالها والتحقق منها
  • CLP وسيلة فعّالة لتعريف البرنامج من حيث القيود

Unison

  • الكود ليس نصًا بل بيانات (غير قابلة للتغيير). يُخزَّن الكود في قاعدة بيانات ويُوصَل إليه ويُحدَّث عبر Unison Codebase Manager. والملفات النصية مجرد طريقة واحدة لإدخال الكود إلى قاعدة البيانات. كما أن البيانات غير القابلة للتغيير تعني إمكانية تخزين نتائج الاختبارات مؤقتًا، وأن التحقق من الأنواع لا يلزم إجراؤه إلا مرة واحدة
  • تُشار إلى التعريفات بالتجزئة لا بالاسم. ويُسمّى هذا الكود «المعنون بالمحتوى». وشجرة الصياغة للتعريف هي التي تحدّد تجزئته. لا تعارضات إصدارات، وإعادة التسمية سهلة للغاية.
  • التوثيق في Unison كيان من الدرجة الأولى في اللغة، وهو دائمًا متزامن مع الدوال التي يصفها. ويمكنك تضمين أمثلة حيّة فيه والتأكد من أن كود المثال يُترجَم بنجاح.
  • مثالية للحوسبة السحابية: لا عمليات بناء، ويمكن توزيع الدوال أثناء التشغيل، ويُستهلك وقت أقل في كتابة المُرمِّزات وفاكّات الترميز للتواصل بين خدمات Unison.

Pharo

  • نموذج تنفيذ مباشر: كل شيء كائن، والتنفيذ يحدث حصريًا عبر الرسائل (وهي كائنات أيضًا). حتى تدفّق التحكم يتم عبر الرسائل. ومع أن النموذج بسيط، فهو قوي جدًا. ويختلف تمامًا عن لغات كائنية التوجه الأخرى.
  • يُقيم كودك في صورة Pharo، لا في ملفات نصية. وصورة Pharo تحتوي على الحالة الكاملة لتطبيقك ويمكن تنفيذها في آلة Pharo افتراضية. وعندما تحفظ عملك، يحفظ Pharo الحالة الكاملة للبيئة في ملف صورة. ويحتوي هذا الملف على جميع الكائنات وعلاقاتها وسياق التنفيذ. ويمكن مشاركة ملفات الصور مع الآخرين وتحميلها على أجهزة أو منصات مختلفة. وهذا يتيح للمطورين التعاون بسهولة في مشروع أو توزيع التطبيقات المبنية بـ Pharo
  • حيوية وغامرة، مع تغذية راجعة فورية أثناء التشغيل عبر بيئة تطوير خاصة بـ Pharo. شغّل برنامجك وغيّره أثناء التشغيل، حتى وهو يعمل! ومصحّح أخطاء قوي يدعم إعادة تشغيل الطرق وإصلاح الأخطاء البرمجية فورًا

Tcl

  • نظام أنواع مباشر: كل شيء سلسلة نصية. كان شعار «كل شيء سلسلة نصية» هو الطريقة التي كان يُنفَّذ بها Tcl قديمًا. أما الآن، فتحت الغطاء يوجد نظام أنواع متين، حيث يكون لكيان Tcl (سواء كان سلسلة نصية أو عددًا عشريًا أو مصفوفة أو قاموسًا) تمثيل خاص بنوعه إضافة إلى تمثيله كسلسلة نصية. وهذا يحسّن أداء كود Tcl كثيرًا، إذ لم يعد بحاجة إلى التحويل ذهابًا وإيابًا من السلاسل النصية.
  • «كل شيء يعمل كأوامر». لا توجد أوامر مدمجة. يأتي Tcl مع «مكتبة قياسية» من الأوامر، تشمل if وwhile وغيرها. ومن السهل جدًا إضافة أوامر جديدة للتحكم في تدفّق التنفيذ: مثل حلقة until على سبيل المثال. كما يسهل تجاوز أوامر Tcl.
  • بفضل كونها مدمجة وذات دلالات بسيطة ومُنفَّذة كمكتبة بلغة C، يسهل تضمينها

Ballerina

  • سحابية أصلية. تحويلات مدمجة من JSON إلى أنواع يعرّفها المستخدم. وصياغة خفيفة للغاية لإنشاء الخدمات (المصغّرة). وتنفيذ متزامن مدمج للخدمات. ودعم HTTP (1 و2) وgraphql وgRPC جاهز من الصندوق
  • توليد تلقائي للمخرجات لنشر كودك في سحابات مختلفة. ويمكن أن تكون هذه المخرجات ملفات Dockerfile أو صور Docker أو ملفات YAML لـ Kubernetes أو دوال بلا خوادم.
  • تصوير مدمج للكود كمخطّطات تسلسل. رائع لتصوّر تدفّق الكود. ويمكنه حتى تصوير استدعاءات HTTP

Red

  • رائعة في بناء وتحليل اللغات الخاصة بالمجال و«اللهجات» (بمصطلح Rebol). وفيها عدة لهجات مدمجة:
  • Red/System: لغة برمجة أنظمة بمستوى C تُترجَم إلى كود أصلي
  • Parse: محلّل PEG قوي
  • VID: لهجة بسيطة لإنشاء تخطيطات الواجهات الرسومية
  • Draw: لهجة للرسم المتجهي ثنائي الأبعاد
  • Rich-text: لهجة لوصف النص المنسّق
  • واجهات رسومية سهلة. متعددة المنصات وأصلية بالكامل. تدعم الربط ثنائي الاتجاه والتحديث الحيّ والأحداث، وتوفّر وصولًا إلى ميزات نظام التشغيل

أيّ اللغات ينبغي تجربتها في مايو؟

كلها لغات مثيرة للاهتمام في حدّ ذاتها، فيمكنك أن تجد مبرّرًا لتجربة أيّ منها.

  • إن كنت مهتمًا بالحوسبة السحابية، فإن Ballerina وUnison خياران رائعان. ولدى Tcl ميزات تزامن رائعة أيضًا
  • إن كنت معتادًا على البرمجة كائنية التوجه لكنك تريد رؤية مقاربة مختلفة لها، فجرّب Pharo
  • إن أردت أن تختبر كيف تكون البرمجة بلغة لا تعتمد على ملفات نصية، فجرّب إما Pharo ببيئة تطويرها الفريدة والقوية، أو Unison مع Unison Codebase Manager.
  • إن كنت تحبّ البساطة، فإن Tcl وProlog وPharo وRed كلها ذات قواعد نحوية قليلة نسبيًا ودلالات بسيطة نسبيًا
  • إن أردت رؤية مزيج مثير من الأنماط، فإن Ballerina وTcl وRed تدعم أنماطًا مختلفة
  • إن أردت تجربة بعض الأنماط الأكثر غرابة، فجرّب Prolog للبرمجة المنطقية، وRed للبرمجة التفاعلية، وBallerina للبرمجة التصريحية
  • إن كنت تحبّ البرمجة الوظيفية، فألقِ نظرة على Unison، ولا سيّما ميزة Abilities.
  • إن كنت مهتمًا بالبرمجة الفوقية، فإن Tcl وProlog وPharo وRed تقدّم دعمًا رائعًا

وبالطبع، إن كان لديك الوقت، أنصحك بتجربة اثنتين منها! فكلها فريدة تمامًا. اذهب وحلّ التمرين نفسه بلغتين من اللغات المميزة، ولاحظ كم يختلف التنفيذ.

1 مايو، 2023 · هل وجدته مفيدًا؟