بايثون بدون مكدس

كان Stackless Python ، أو Stackless ، مترجمًا للغة برمجة بايثون . تم أرشفة مستودع GitHub الخاص به منذ فبراير 2025، وتم إيقاف المشروع رسميًا.

سُمّي بهذا الاسم لأنه يتجنب الاعتماد على مكدس استدعاءات لغة C لإنشاء مكدسه الخاص. عمليًا، يستخدم Stackless Python مكدس C، ولكن يتم مسح المكدس بين استدعاءات الدوال. [ 2 ] أبرز ميزات Stackless هي الخيوط الدقيقة ، التي تتجنب الكثير من العبء الزائد المرتبط بخيوط نظام التشغيل التقليدية . بالإضافة إلى ميزات Python، يدعم Stackless أيضًا الروتينات الفرعية ، وقنوات الاتصال ، وتسلسل المهام .

تصميم

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

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

نظراً للتغييرات الكبيرة التي طرأت على الكود المصدري، لا يمكن تثبيت Stackless Python على تثبيت Python موجود مسبقاً كإضافة أو مكتبة . بل هو توزيعة Python كاملة بحد ذاتها. وقد تم تنفيذ معظم ميزات Stackless أيضاً في PyPy ، وهو مترجم Python ذاتي الاستضافة ومترجم JIT . [ 4 ]

يستخدم

على الرغم من أن Stackless عبارة عن توزيعة منفصلة، ​​فقد تم دمج وظيفة التبديل الخاصة بها بنجاح كإضافة لـ CPython تُسمى greenlet. [ 5 ] تستخدمها العديد من المكتبات (مثل gevent [ 6 ] ) لتوفير حلٍّ للبرمجة المتزامنة (green threading) لـ CPython. ومنذ ذلك الحين، حصلت بايثون على حلٍّ أصلي بديل للبرمجة غير المتزامنة التي تعمل على خيط واحد: await /async.

يتم استخدام Stackless على نطاق واسع في تنفيذ لعبة Eve Online متعددة اللاعبين عبر الإنترنت وكذلك في منصة البريد الخاصة بـ IronPort .

انظر أيضاً

مراجع

  1. "إصدار v3.8.1-slp" . 12 أغسطس 2021. تم الاطلاع عليه في 8 مارس 2022 .
  2. مؤرشف في Ghostarchiveوآلة Waybackقصة بايثون بدون مكدس . يوتيوب .
  3. "حول Stackless" . مؤرشف من الأصل في 23 يونيو 2020. تم الاطلاع عليه في 26 أغسطس 2016. يتضمن النظام مُجدولًا دوريًا . يمكن استخدامه لجدولة المهام إما بشكل تعاوني أو استباقي.
  4. "ميزات Stackless على مستوى التطبيق - وثائق PyPy" . pypy.readthedocs.org .
  5. "greenlet: Lightweight concurrent programming — greenlet 0.4.0 documentation" . greenlet.readthedocs.org .
  6. "ما هو جيفنت؟ - وثائق جيفنت 1.3.0.dev0" . www.gevent.org .