Uploaded avatar of iHiD

إنه أكتوبر كائني التوجه

@iHiD
منذ ما يقرب من 3 سنوات
فيديو

مقدمة

مرحبًا جميعًا. أتمنى أن تكونوا بخير. كان شهر سبتمبر حافلًا. أطلقنا الكثير من التحسينات والمزايا الجديدة على الموقع، غالبيتها حول تحسين الإرشاد والمسارات المتعلقة به. ونتيجة لذلك، صار عدد طلبات الإرشاد التي تصلنا ضعف ما كان عليه قبل 4 أسابيع، وهذا أمر رائع. إن لم تجرّب بعد مراجعة الكود خاصتك على يد مرشد، فافعل ذلك بلا تردد، فهي طريقة مذهلة للتعلّم. وإن كنت ترغب في مساعدة الآخرين، فهناك الكثير من الطلبات في قوائم الانتظار تنتظر مساعدتك. يمكنك التسجيل لتصبح مرشدًا من خلال رابط الإرشاد في قائمة المساهمة! كما أجرينا تحديثًا كبيرًا لقاعدة البيانات من MySQL 5.6 إلى MySQL 8، وقد سجّلته وهو متاح في قسم Insiders، فإن كنت من Insiders ولم تشاهد ذلك بعد، فتفضّل بالاطلاع عليه!

حسنًا، لننتقل إلى #12in23. كان سبتمبر شهرًا مثيرًا للاهتمام، إذ استكشفنا لغات موجزة ومقتضبة. هذا الشهر نسير في الاتجاه المعاكس، ونلقي نظرة على كائنات أكبر بكثير. نركّز على اللغات كائنية التوجّه، وتحديدًا C# و Crystal و Java و Pharo و Ruby و PowerShell. لقد تحدثنا بالفعل عن Pharo و Java، في مايو وأغسطس على التوالي، لذا لن نتناولهما مجددًا في هذا الفيديو، لكن ألقِ نظرة على فيديوهات الأشهر السابقة إن كنت مهتمًا بمقدمات تلك اللغات. أما في هذا الفيديو فسنستكشف C# و Crystal و Ruby و PowerShell، وكالعادة سيحدثنا Erik عمّا يجعل هذه اللغات مثيرة للاهتمام وفريدة.

الشارات

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

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

نظرة عامة

C#

  • طوّرها Anders Hejlsberg في Microsoft عام 2000
  • للغة والآلة الافتراضية مواصفات رسمية. أصبحت معيارًا رسميًا لدى ECMA عام 2002 ومعيار ISO عام 2003
  • كان المصرّف و.NET Framework (المكتبة القياسية) و Visual Studio (المحرر) جميعها مغلقة المصدر في البداية، لكن المصرّف و.NET Framework أصبحا مفتوحي المصدر عام 2014
  • رغم تشابهها الكبير في الصياغة مع Java (التي صدرت قبلها بعامين)، لم تكن C# نسخة طبق الأصل من Java (على سبيل المثال، دعم الخصائص وأنواع القيم وغياب الاستثناءات المفحوصة)
  • تُصرَّف إلى الكود البايتي، مع دعم التصريف إلى لغة الآلة منذ .NET 7 (لا يزال قيد التحسين)
  • تُستخدم في كم هائل من البرمجيات، من المواقع إلى الأنظمة المدمجة، ومن التطبيقات (Xamarin) إلى الألعاب (Unity)

Crystal

  • طوّر Crystal كل من Ary Borenszweig (وله حساب على Exercism) و Juan Wajnerman و Brian Cardiff (سُمّيت في الأصل Joy، ثم أُعيدت تسميتها إلى Crystal بعد 3 أيام :))
  • صُمّمت لتجمع بين أناقة Ruby وإنتاجيتها، مع سرعة وكفاءة وأمان الأنواع التي تتميّز بها لغة مصرّفة حديثة.
  • لغة مفتوحة المصدر طوّرتها منظمة Manas.
  • صدر الإصدار 1.0 عام 2021.
  • تُصرَّف إلى لغة الآلة باستخدام LLVM (مثل Rust)
  • كُتب المصرّف في البداية بلغة Ruby، ثم حُوّل لاحقًا إلى نسخة تستضيف نفسها
  • تستخدمها شركة الشاحنات Nikola و Manas وغيرهما، غالبيتها في المواقع، وكذلك الخدمات السحابية وتطبيقات سطر الأوامر والنصوص البرمجية

PowerShell

  • بناها فريق بقيادة Jeffrey Snover في Microsoft وصدرت أول مرة عام 2006.
  • كان Intel الدافع وراء تطويرها، إذ أرادت نقل نصوصها البرمجية بلغة KornShell من Sun RISC إلى منصة أخرى، للمساعدة في تطوير معالجاتها. وفي النهاية اختارت Intel منصة مختلفة، لكن Microsoft واصلت العمل على صدفة الأوامر الجديدة: PowerShell، لأنها أتاحت إمكانية تحسين إدارة نظام Windows (التي لم تكن جيدة بشكل خاص آنذاك، وكانت كثيرًا ما تتطلب واجهات رسومية)
  • استُلهمت صياغتها من KornShell، وكذلك من PHP و Perl وغيرهما
  • كان الإصدار الأول يعمل على .NET Framework فقط، ما يعني أنه كان يعمل على Windows فقط. لكن PowerShell 6.0 (الصادر عام 2018) عمل على .NET Core، وهو متعدد المنصات ومفتوح المصدر.
  • تُستخدم أساسًا في إدارة الأنظمة، وكذلك لتوفير أدوات واجهة سطر الأوامر أو أغلفة حول أدوات أخرى. وقد استخدمناها كثيرًا للعمل بشكل جماعي على مستودعات Exercism

Ruby

  • طوّرها Yukihiro Matsumoto (المعروف بـ Matz) وصدرت أول مرة عام 1995
  • أراد Matz العمل بلغة برمجة نصية كائنية التوجّه حقيقية، لكنه لم تُعجبه الخيارات الموجودة (مثل Perl و Python)، فبنى لغة جديدة: Ruby
  • يصف Matz لغة Ruby بأنها في جوهرها لغة Lisp بسيطة، بنظام كائنات شبيه بنظام Smalltalk، وكتل مستوحاة من الدوال عالية الرتبة، وفائدة عملية كتلك التي في Perl.
  • تُفسَّر عادةً، لكن يمكن أيضًا تصريفها فوريًا إلى لغة الآلة
  • إلى جانب المفسّر الرسمي، توجد تطبيقات بديلة، مثل JRuby (يعمل على JVM) و Rubinius (يستخدم LLVM) و YJIT، وهو مصرّف فوري يُشحن كجزء من حزمة التثبيت الرسمية
  • تُستخدم غالبًا في المواقع (باستخدام Ruby on Rails)، مثل GitHub و Stripe و Shopify وغيرها الكثير (بما في ذلك Exercism ومنتدى Exercism!). كما تُستخدم Ruby لأغراض الأتمتة

ومن منظور البرمجة، كيف تختلف هذه اللغات؟

جميعها لغات كائنية التوجّه، وإن لم تُطبّق ذلك جميعها بالطريقة نفسها (مثلًا، تستخدم Crystal و Ruby نموذج إرسال الرسائل الذي في Smalltalk لاستدعاء الطُرق).

C#

  • ذات أنواع قوية وساكنة
  • تدعم أيضًا النمطين الأمرِي والتصريحي، وتزداد وظيفية أكثر فأكثر

Crystal

  • ذات أنواع قوية وساكنة (خلافًا لـ Ruby)
  • تدعم أيضًا البرمجة الوظيفية والأمرية

PowerShell

  • ذات أنواع قوية
  • تدعم أيضًا البرمجة الأمرية والوظيفية والبرمجة القائمة على الأنابيب.

Ruby

  • ذات أنواع ديناميكية
  • تدعم أيضًا البرمجة الوظيفية والأمرية

ومع ذلك، فإن كل هذه اللغات هي في المقام الأول لغات كائنية التوجّه.

ما الذي يجعل هذه اللغات رائعة؟

C#

  • تعمل في كل مكان تقريبًا، بما في ذلك التطبيقات عبر Xamarin. كانت في الأصل تعمل على Windows فقط، ما أدى إلى ظهور Mono، وهو تطبيق مجاني ومفتوح المصدر لمصرّف C# وبيئة تشغيلها، وكان متعدد المنصات. وفي 2015 طُرح .NET Core، الذي كان متعدد المنصات بالكامل ومفتوح المصدر.
  • عامة الغرض: يمكن استخدامها في أي عبء عمل تقريبًا، بما في ذلك التطبيقات والمواقع والألعاب
  • معبّرة: يمكنك إنجاز الكثير بقدر قليل نسبيًا من كود C#. و LINQ على وجه الخصوص زيادة كبيرة في الإنتاجية ومتعة كبيرة للعمل بها
  • أدوات ممتازة، سواء لبيئات التطوير المتكاملة أو لأدوات أخرى مثل أنظمة البناء. وبينما يقتصر Visual Studio على Windows، فإن JetBrains Rider و VS Code متعددان المنصات
  • منصة مصرّف .NET (المعروفة غالبًا بـ Roslyn) طريقة رائعة لتحليل كود C# وتحويله وتوليده (نستخدمها على نطاق واسع في مشغّل اختبارات C# ومحلّلها وممثّلها)
  • التوثيق واسع ومفصّل ومكتوب بجودة عالية
  • مجتمع كبير: تتوفر موارد كثيرة، بما في ذلك المدونات والمنتديات وغيرها

Crystal

  • صياغة أنيقة وسهلة القراءة، تجعل كود Crystal سهل القراءة والكتابة
  • معبّرة. مثل Ruby، تعدّ Crystal معبّرة للغاية، إذ يمكنك إنجاز الكثير بقليل من الكود. ويعود ذلك جزئيًا إلى المكتبة القياسية الممتازة والواسعة.
  • سريعة. يسمح استخدام الأنواع الساكنة بالتصريف إلى كود آلة فعّال باستخدام LLVM، مع إدارة بسيطة للذاكرة عبر جامع القمامة.
  • تنفيذ رائع للبرمجة كائنية التوجّه. كل شيء كائن، بما في ذلك الأصناف والأنواع الأولية مثل الأعداد والقيم المنطقية
  • مزوّدة بكل ما تحتاجه، بمكتبة قياسية كبيرة، ومنسّق مدمج، ومحرك قوالب، وإطار اختبار وغيرها
  • التشغيل البيني. تشغيل بيني سهل مع مكتبات C
  • متعددة المنصات: تعمل على Linux و macOS و Windows، وإن لم يكن Windows بعد مواطنًا من الدرجة الأولى

PowerShell

  • قوية: PowerShell أداة قوية للمسؤولين. تتكامل جيدًا مع أنظمة أخرى كثيرة، مثل نظام Windows (مكوّناته وخدماته وإعداداته)، ومنتجات Microsoft الأخرى مثل Exchange و SharePoint و Azure وغيرها. ويمكنها أيضًا التفاعل مع تقنيات أخرى كثيرة مثل واجهات REST API وقواعد البيانات وخدمات الويب وغيرها.
  • التوفر: تأتي PowerShell مثبّتة مسبقًا على كل إصدار حديث من Windows، ويمكن تثبيتها على أي نظام يشغّل .NET (بما في ذلك macOS و Linux والعديد من أنظمة Unix)
  • الأمان: تتضمن PowerShell مزايا لتأمين النصوص البرمجية وتقييد تنفيذها بناءً على النصوص الموقّعة وسياسات التنفيذ. وهذا أمر بالغ الأهمية لضمان سلامة عمليات الأتمتة لديك.
  • الواجهة الرسومية: يمكنك دمجها مع أطر أخرى مثل Windows Forms أو Windows Presentation Foundation لتصميم وبناء واجهات رسومية لنصوصك البرمجية في PowerShell لجعلها أسهل في الاستخدام.
  • الأنابيب: على غرار Bash في أنظمة Unix، تتيح PowerShell ربط الـcmdlets معًا لتنفيذ عمليات ومهام معقدة، بتمرير مخرجات cmdlet كمدخلات إلى آخر

Ruby

  • صياغة أنيقة وسهلة القراءة، تجعل كود Ruby سهل القراءة والكتابة
  • معبّرة. Ruby لغة معبّرة للغاية، إذ يمكنك إنجاز الكثير بقليل من الكود. ويعود ذلك جزئيًا إلى المكتبة القياسية الممتازة والواسعة
  • منظومة ضخمة، بعدد هائل من المكتبات المتاحة (gems)
  • تنفيذ رائع للبرمجة كائنية التوجّه. كل شيء كائن، بما في ذلك الأصناف والأنواع الأولية مثل الأعداد والقيم المنطقية.
  • عملية. Ruby ومعظم مكتباتها عملية للغاية، وتركّز على حل مشكلات العالم الواقعي.
  • التشغيل البيني. تشغيل بيني سهل مع مكتبات C، وهو ما يُستخدم كثيرًا عندما تكون الأداء بالغ الأهمية. على سبيل المثال، تتيح gem ‏Nokogiri العمل مع XML بأداء عالٍ جدًا عبر تغليف مكتبات C للقيام بالجزء الأثقل
  • يجري الكثير من الابتكار. على سبيل المثال، بنت Stripe أداة Sorbet، وهي مدقّق أنواع لـ Ruby، وطوّرت Shopify أداة YJIT، وهو مصرّف فوري لـ Ruby (مضمّن في Ruby 3.1 فأحدث)، ويجري العمل على دعم WASM

أبرز المزايا

C#

  • أداء رائع، خاصةً للغة مُدارة. فللغة وبيئة التشغيل مزايا لا تُحصى لتحسين الأداء، مثل النوع Span<T> والوصول إلى تعليمات المعالج الجوهرية (مثل تعليمات AVX). و CLR آلة افتراضية ناضجة ومستقرة وعالية الأداء ويجري تحسينها باستمرار
  • منظومة ضخمة، بعدد هائل من المكتبات المتاحة. وهذه المكتبات، مثل C#، ناضجة ومستقرة وكاملة المزايا
  • حديثة ومتطوّرة: لا تزال اللغة وبيئة التشغيل تتطوّران، مع تحديثات منتظمة جدًا للغة لجعلها أكثر حداثة. ومن أمثلة ذلك:
  • async/await لتسهيل التزامن
  • span<T> لاستخدام فعّال للذاكرة
  • أنواع المراجع القابلة للقيمة الفارغة (إصلاح خطأ المليار دولار)
  • تُحدَّث بيئة التشغيل أيضًا بانتظام، مثل .NET AOT للتصريف مباشرةً إلى لغة الآلة
  • بدائل أقل من كثير من اللغات والمنظومات الأخرى. وفي معظم الحالات يمكنك الاكتفاء بالحلول الافتراضية التي توفّرها Microsoft، والتي كثيرًا ما تشمل بيئة التطوير المتكاملة أيضًا. ويمكن للمرء أن يرى في ذلك عيبًا كذلك، لكنه قد يكون رائعًا، خاصة عند البدء بتعلّم لغة

Crystal

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

PowerShell

  • Cmdlets: تستخدم PowerShell الـcmdlets (وتُنطق "command-lets") كلبنات أساسية لها. وهي أوامر صغيرة موجّهة نحو مهمة معيّنة، تغلّف وظائف موجودة، وتوفّر واجهة متسقة (مثل Get-Help لعرض تعليمات أي cmdlet) وصديقة للمسؤولين. وتوجد cmdlets لمجموعة واسعة من "الخلفيات"، مثل جميع أصناف .NET و Windows Management Instrumentation و Azure وغيرها الكثير. ويمكن تعريف الـcmdlets بأي لغة من لغات .NET، وتُعرَّف بطريقة تصريحية للغاية، بحيث يسهل تعريف المعاملات والتحقق منها ومتطلباتها (required true/false) وأسماؤها البديلة (switch) وغير ذلك.
  • كائنية التوجّه: كل شيء تقريبًا في PowerShell كائن له خصائص مختلفة كثيرة. فالملفات والعمليات ومفاتيح السجل وحتى أنواع البيانات البسيطة مثل السلسلة النصية والعدد تُعامَل جميعها ككائنات، وهذا الأسلوب يبسّط طريقة عملك وتفاعلك مع أنواع مختلفة من البيانات والخدمات. وسيكون مألوفًا جدًا لكل من عمل مع .NET
  • الإدارة عن بُعد: تدعم الإدارة عن بُعد لخوادم Windows وأنظمته، وحتى الموارد السحابية عبر Azure و AWS و GCP، وهو أمر ضروري لإدارة الأتمتة وعمليات النشر واسعة النطاق.
  • قابلة للتوسيع: تمتلك نظام وحدات مدمجًا رائعًا، إضافةً إلى السماح لك بإنشاء cmdlets ودوال ووحدات مخصّصة، والعمل مع لغات برمجة ومكتبات أخرى لتوسيع قدراتها عند الحاجة.

Ruby

  • مُنتِجة وممتعة. Ruby مشهورة بأنها مصمّمة للإنتاجية وسعادة المطوّرين. ورغم صعوبة قياس ذلك، فإن حماس من استخدموا Ruby يدل على الكثير
  • البرمجة الفوقية. Ruby ديناميكية للغاية وتتيح البرمجة الفوقية وقت التشغيل. وسواء أكان ذلك تعديل أصناف موجودة بطريقة monkey-patching، أو إضافة طرق أو استدعاؤها ديناميكيًا، فإن Ruby تلبي حاجتك
  • Ruby on Rails إطار رائع وكامل المزايا لبناء المواقع. ويوفّر مباشرةً القوالب والتخزين المؤقت و ActiveRecord (طريقة للتفاعل مع قاعدة بيانات عبر الكائنات) والترحيلات والسقالات و WebSockets وغيرها الكثير.

أيّها تختار

  • إن كنت ملمًّا بالبرمجة كائنية التوجّه لكنك تريد رؤية مقاربة مختلفة لها، جرّب Pharo
  • إن كنت تعرف Java أو C# لكنك لم تقترب منهما منذ فترة، فامنحهما فرصة أخرى. فقد تطوّرت كلتا اللغتين كثيرًا، فاطّلع على بعض تلك المزايا الجديدة اللامعة!
  • كما أن C# و Java (وإلى حد أقل Ruby) خياران رائعان إن كنت تبحث عن عمل، إذ إنها من أكثر اللغات طلبًا لدى أصحاب العمل
  • إن كنت تعرف Ruby، جرّب Crystal لترى كيف ستبدو وتُحسّ لغة Ruby ذات أنواع ساكنة
  • إن كنت تحب اللغات الديناميكية لكنك تريد أيضًا أداءً رائعًا، فتفضّل بالاطلاع على Crystal
  • إن كنت تعرف Bash أو ملفات Windows الدفعية، جرّب PowerShell لمقاربة مختلفة كائنية التوجّه لكتابة نصوص صدفة الأوامر
  • إن كنت مهتمًا بلغات البرمجة النصية عمومًا، فكل من Ruby و Crystal و PowerShell خيارات جيدة
  • Pharo و Crystal و Ruby خيارات رائعة إن أردت ممارسة بعض البرمجة الفوقية (و C# تحصل أيضًا على بعض مزايا البرمجة الفوقية)
  • إن أردت أن تجرّب كيف يكون البرمجة بلغة لا تقوم على ملفات نصية، جرّب Pharo وبيئة تطويرها المتكاملة الفريدة والقوية
  • إن كنت مهتمًا ببناء المواقع، فإن Ruby وإطارها Ruby on Rails يستحقان التجربة
1 أكتوبر، 2023 · هل وجدته مفيدًا؟