سؤال

لقد كنت أقرأ مؤخرا بيثون بلا تكدس ويبدو أن العديد من المزايا مقارنة بفانيلا كيثيلون. لديها كل تلك الميزات الرائعة مثل العودية اللانهائية، والمشروعات الصغيرة، والمستمرات، وما إلى ذلك، وفي الوقت نفسه أسرع من cpython (حوالي 10٪، إذا بيثون ويكي هو أن يعتقد) و متوافق معها (على الأقل الإصدارات 2.5 و 2.6 و 3.0).

كل هذه تبدو جيدة تقريبا جيدة جدا. ومع ذلك، Tanstaafl., ، لا أرى الكثير من الحماس للحصول على تكثيف بين مجتمع بيثون، و بيب 219. لم يدخل أبدا. لماذا هذا؟ ما هي عيوب تكثيف؟ ما هي الهياكل العظمية مخفية في خزانة تكدس؟

(أعرف أن تكثيف لا يقدم التزامن الحقيقي، مجرد طريقة أسهل للبرمجة بطريقة متزامنة. لا يزعجني حقا.)

هل كانت مفيدة؟

المحلول

أنا لا أعرف من أين "تكثيف 10٪ أسرع" في الويكي جاء من، ولكن بعد ذلك مرة أخرى لم أحاول أبدا قياس تلك أرقام الأداء. لا أستطيع التفكير في ما يفعله تكثيف لإحداث فرق كبير.

Stackless هو أداة مذهلة مع العديد من المشاكل التنظيمية / السياسية.

الأول يأتي من التاريخ. بدأت المسيحي التشمير في الحديث عن ما أصبح في نهاية المطاف مكثف منذ حوالي 10 سنوات. كان لديه فكرة عما أراده، لكنه كان لديه صعوبة في شرح ما كان يفعله ولماذا يجب على الناس استخدامه. هذه جزئيا لأن خلفيته لم يكن لها تدريب CS فيما يتعلق بالأفكار مثل Coroutines ولأن عروضه وجهاته ومناقشتها موجهة للغاية، والتي من الصعب على أي شخص ليس في عمق الفخذ بالفعل في استمرار فهم كيفية استخدامه كحل مشاكلهم.

لهذا السبب، كانت الوثائق الأولية سيئة. كانت هناك بعض الأوصاف لكيفية استخدامها، مع الأفضل من مساهمي الجهات الخارجية. في Pycon 2007، أعطيت حديثاباستخدام stackless."الذي ذهب جيدا، وفقا لأرقام مسح PYCON. ريتشارد تو أنجز وظيفة رائعة جمع هذه، وتحديث stackless.com, والحفاظ على التوزيع عند إصدارات بيثون الجديدة تأتي. إنه موظف في ألعاب CCP., ، مطورو حواء عبر الإنترنت، والذي يستخدم تكثيف كجزء أساسي من نظام الألعاب.

العاب CCP هي أيضا أكبر مثال في العالم الحقيقي يستخدم الناس عندما يتحدثون عن تكثيف. البرنامج التعليمي الرئيسي ل Tackless هو منح أولسون "مقدمة في البرمجة المتزامنة مع ثعبان بثون"، والتي تعتبر أيضا لعبة موجهة نحو اللعبة. أعتقد أن هذا يعطي الناس فكرة منحرفة أن تكثيف موجهة للألعاب، عندما يكون الأمر أكثر أن تكون الألعاب أكثر توجها نحو الاستمرار.

كانت صعوبة أخرى هي شفرة المصدر. في شكلها الأصلي، تتطلب تغييرات في أجزاء كثيرة من بيثون، والتي جعلت Guido Van Rossum، The Python Lead، حذر. جزء من السبب، وأعتقد أنه كان يدعم للاتصال / CC الذي تم إزالته لاحقا على أنه "يشبه إلى حد كبير دعم GOTO عندما يكون هناك نماذج أعلى مستوى أعلى." لست متأكدا من هذا التاريخ، لذلك فقط اقرأ هذه الفقرة ك "تكثيف يستخدم لتطلب الكثير من التغييرات."

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

لا توجد خطط على الإطلاق ل "تغييرات كبيرة في قاعدة التعليمات البرمجية". هذا الاقتباس والمرجع الارتباط التشعبي من Arafangion's (انظر التعليق) من حوالي 2000/2001. لقد تم القيام بالتغييرات الهيكلية منذ فترة طويلة، وهذا ما ذكرته أعلاه. الكثافة كما هو الآن مستقرة وناضجة، مع قرص بسيط فقط إلى قاعدة التعليمات البرمجية على مدى السنوات القليلة الماضية.

واحد قيود نهائي مع تكثيف - لا يوجد أي مدافع قوي عن تكثيف. يشارك الشطم الآن بعمق بايبيت, ، وهو تنفيذ ثعبان لبثون. قام بتنفيذ وظائف تكثيف في باغمة ويعتبرها فائقة كبيرة على تكثيف نفسها، ويشعر أن النبيذ هو طريق المستقبل. يحافظ توختو على تكثيف لكنه غير مهتم بالدفاع. اعتبرت أن أكون في هذا الدور، لكن لم أتمكن من معرفة كيف يمكنني إجراء دخل منه.

على الرغم من أنك إذا كنت تريد التدريب في تكدس، فلا تتردد في اتصل بي! :)

نصائح أخرى

استغرق الأمر وقت طويل للعثور على هذه المناقشة. في ذلك الوقت لم أكن على pypy ولكن لديه علاقة سعيدة لمدة عامين مع PSYCO، حتى توقفت الصحة هذا فجأة تماما. أنا نشط الآن مرة أخرى وتصميم نهج بديل - سوف يقدمها في Europython 2012.

معظم بيانات أندروز صحيحة. بعض الإضافات الطفيفة:

كان Stackless أسرع بكثير من CPYThon، منذ 10 سنوات، لأنني أمثل في تحسين حلقة المترجم. في ذلك الوقت، لم يكن Guido جاهزا لذلك. بعد سنوات قليلة، قام الناس بتحسينات مماثلة وحتى أكثر وأفضل، مما يجعل مكثف أبطأ قليلا، كما هو متوقع.

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

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

وفي الوقت نفسه تتغير الأمور مرة أخرى. أنا أعمل على بوبي وتكثف كملحق سوف يتحدث عن ذلك في بعض الأحيان

هتاف - كريس

إذا كنت أتذكر بشكل صحيح، فقد شاءت تكثيف لإدراجها في CPYThon الرسمي، لكن مؤلف تكثيف أخبر الناس CPYTHON عدم القيام بذلك، لأنه يعتزم القيام ببعض التغييرات المهمة في قاعدة التعليمات البرمجية - أراد الاندماج في وقت لاحق كان المشروع أكثر نضجا.

أنا مهتم أيضا في الإجابات هنا. لقد لعبت قليلا مع تكثيف ويبدو أنها ستكون إضافة جيدة قوية إلى الثعبان القياسية.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top