الأجناس العامة

عن الأجناس العامة المخصّصة في Go

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

في بعض الحالات، قد تؤدي الأجناس العامة أيضاً إلى شيفرة أنظف وواجهات برمجية أبسط (ليس دائماً).

وفي بعض الحالات، قد تحسّن الأجناس العامة أيضاً أداء تنفيذ الشيفرة (مجدداً، ليس دائماً).

قبل الإصدار 1.18، سبّب غياب الأجناس العامة المخصّصة معاناة للكثير من مبرمجي Go في البرمجة بلغة Go في بعض الحالات.

والحقيقة أن المعاناة الناجمة عن غياب الأجناس العامة المخصّصة خُفِّفت إلى حدٍّ ما بفعل الحقائق التالية.

  • منذ الإصدار 1.0، دعم Go أجناساً عامة مدمجة، تشمل بعض أنواع الأجناس العامة المدمجة (مثل map وchannel) ودوالاً عامة (new وmake وlen وclose وغيرها).
  • يدعم Go الانعكاس دعماً جيداً (عبر الواجهات والحزمة القياسية reflect).
  • يمكن توليد الشيفرة المتكررة تلقائياً باستخدام بعض الأدوات (مثل توجيه التعليق //go:generate الذي تدعمه سلسلة أدوات Go الرسمية).

ومع ذلك، ما تزال المعاناة قائمة في العديد من حالات الاستخدام. وأصبح الطلب على الأجناس العامة المخصّصة أقوى وأقوى. وفي النهاية، قرّر الفريق الأساسي لـ Go دعم الأجناس العامة المخصّصة في Go.

ولأسباب من كل نوع، منها مراعاة التوافق الخلفي في الصيغة/الدلالات وصعوبات التطبيق، استقرّ الفريق الأساسي لـ Go على مقترح وسائط الأنواع لتطبيق الأجناس العامة المخصّصة.

أول إصدار من Go يدعم الأجناس العامة المخصّصة هو 1.18.

يحاول مقترح وسائط الأنواع حلّ العديد من مشكلات إعادة استخدام الشيفرة، لكن ليس كلها. ويرجى ملاحظة أنه لم تُطبَّق بعد حتى الآن كل الميزات المذكورة في مقترح وسائط الأنواع (Go 1.25). وسيستمر تصميم الأجناس العامة المخصّصة وتطبيقها في التطوّر والتحسّن في إصدارات Go المستقبلية. ويرجى ملاحظة أن المقترح ليس سقف الأجناس العامة المخصّصة في Go.

على الرغم من القيود (سواء المؤقتة أو الدائمة) في تصميم الأجناس العامة المخصّصة في Go وتطبيقها الحاليين، وجدت أيضاً بعض التفاصيل التي عُوملت بأناقة وجمال في التطبيق.

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