PyPy को मानक Python में शामिल क्यों नहीं किया गया?


165

मैं PyPy को देख रहा था और मैं सोच रहा था कि इसे मेनलाइन पायथन वितरण में क्यों नहीं अपनाया गया है। क्या जेआईटी संकलन और कम मेमोरी फुटप्रिंट जैसी चीजें सभी पायथन कोड की गति में बहुत सुधार नहीं करेंगी?

संक्षेप में, PyPy की मुख्य कमियां क्या हैं जिसके कारण यह एक अलग परियोजना बनी हुई है?


4
इसके अलावा, pypy के पास सुन्न के लिए कोई समर्थन नहीं है, फिर भी। morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago

और खस्ता समर्थन केवल उस सतह को खरोंचता है जो PyPy पर स्विच करने से पहले वैज्ञानिक कंप्यूटिंग अनुप्रयोगों की आवश्यकता होगी। यहाँ मूल सुन्न लेखक से कुछ अजीब विचार हैं: technicaldiscovery.blogspot.com/2011/10/…
स्टुअर्ट बर्ग

3
मुझे लगता है कि ये उत्तर और टिप्पणियां पुरानी हैं
Marlon Abeykoon

जवाबों:


249

PyPy CPython का कांटा नहीं है, इसलिए इसे सीधे CPython में विलय नहीं किया जा सकता है।

सैद्धांतिक रूप से अजगर समुदाय सार्वभौमिक रूप से PyPy को अपना सकता है, PyPy को संदर्भ कार्यान्वयन बनाया जा सकता है, और CPython को बंद किया जा सकता है। हालाँकि, PyPy की अपनी कमजोरियाँ हैं:

  • CPython C में लिखे पायथन मॉड्यूल के साथ एकीकृत करना आसान है, जो पारंपरिक रूप से Python अनुप्रयोगों ने CPU-गहन कार्यों को संभाला है (उदाहरण के लिए SciPy प्रोजेक्ट देखें)।
  • PyPy JIT संकलन कदम की लागत स्वयं CPU समय है - यह केवल बार-बार संकलित कोड के चलने से है कि यह समग्र रूप से तेज हो जाता है। इसका मतलब है कि स्टार्टअप समय अधिक हो सकता है, और इसलिए PyPy जरूरी नहीं है कि गोंद कोड या तुच्छ स्क्रिप्ट चलाने के लिए कुशल हो।
  • PyPy और CPython व्यवहार सभी मामलों में समान नहीं है, खासकर जब यह "कार्यान्वयन विवरण" (व्यवहार जो भाषा द्वारा निर्दिष्ट नहीं है लेकिन व्यावहारिक स्तर पर अभी भी महत्वपूर्ण है) की बात आती है।
  • CPython PyPy की तुलना में अधिक आर्किटेक्चर पर चलता है और सफलतापूर्वक एम्बेडेड आर्किटेक्चर में चलने के लिए अनुकूलित किया गया है जो PyPy के लिए अव्यावहारिक हो सकता है।
  • स्मृति प्रबंधन के लिए CPython की संदर्भ गणना योजना यकीनन PyPy की विभिन्न GC प्रणालियों की तुलना में अधिक अनुमानित प्रदर्शन प्रभाव है, हालांकि यह सभी "शुद्ध GC" रणनीतियों के लिए जरूरी नहीं है।
  • PyPy अभी तक Python 3.x का पूरी तरह से समर्थन नहीं करता है, हालांकि यह एक सक्रिय कार्य आइटम है।

PyPy एक बेहतरीन परियोजना है, लेकिन CPU-गहन कार्यों पर रनटाइम गति सब कुछ नहीं है, और कई अनुप्रयोगों में यह कई चिंताओं से कम है। उदाहरण के लिए, Django PyPy पर चल सकता है और इससे गति तेज होती है, लेकिन CPython के डेटाबेस ड्राइवर PyPy की तुलना में तेज़ होते हैं; अंत में, जो कार्यान्वयन अधिक कुशल है, यह निर्भर करता है कि दिए गए आवेदन में अड़चन कहां है।

एक अन्य उदाहरण: आपको लगता है कि PyPy खेलों के लिए बहुत अच्छा होगा, लेकिन PyPy में उपयोग की जाने वाली अधिकांश GC रणनीतियाँ ध्यान देने योग्य घबराहट का कारण बनती हैं। सीपीथॉन के लिए, अधिकांश सीपीयू-गहन गेम सामग्री को PyGame लाइब्रेरी में लोड किया गया है, जो PyPy का लाभ नहीं उठा सकता है क्योंकि PyGame को मुख्य रूप से C एक्सटेंशन (हालांकि देखें: pygame-cffi) के रूप में लागू किया गया है। मुझे अभी भी लगता है कि PyPy गेम्स के लिए एक बेहतरीन प्लेटफॉर्म हो सकता है, लेकिन मैंने इसे वास्तव में कभी इस्तेमाल नहीं किया है।

PyPy और CPython में मौलिक डिजाइन प्रश्नों के लिए अलग-अलग दृष्टिकोण हैं और विभिन्न ट्रेडऑफ़ बनाते हैं, इसलिए हर मामले में दोनों में से कोई भी "बेहतर" नहीं है।


4
यह सच नहीं है कि PyPy स्क्रिप्ट चलाने के लिए अनुपयुक्त है। इसका स्टार्टअप टाइम बहुत हद तक CPython जैसा है और इसकी व्याख्या की गति समान है।
ल्यूसियन

6
यह ध्यान देने योग्य है कि PyPy अब एक वृद्धिशील GC के साथ आता है, और परिणाम के रूप में गेम के लिए संभवतः अधिक उपयुक्त है।
porgarmingduod

63

एक के लिए, यह पायथन 2.x के साथ 100% संगत नहीं है , और केवल 3.x के लिए प्रारंभिक समर्थन है।

यह भी कुछ ऐसा नहीं है जिसे विलय किया जा सकता है - PyPy द्वारा प्रदान किया गया पायथन कार्यान्वयन उनके द्वारा बनाए गए ढांचे के उपयोग से उत्पन्न होता है, जो कि बहुत अच्छा है, लेकिन मौजूदा CPython कार्यान्वयन के साथ पूरी तरह से अलग है। यह एक पूर्ण प्रतिस्थापन होना चाहिए।

PyPy और CPython के बीच कुछ बहुत ठोस अंतर हैं , एक बड़ा यह है कि विस्तार मॉड्यूल का समर्थन कैसे किया जाता है - जो, यदि आप मानक पुस्तकालय से परे जाना चाहते हैं, तो यह एक बड़ी बात है।

यह भी ध्यान देने योग्य है कि PyPy सार्वभौमिक रूप से तेज़ नहीं है।


54

इस वीडियो को गुइडो वैन रोसुम द्वारा देखें । वह उसी प्रश्न के बारे में बात करता है जो आपने 12 मिनट 33 सेकंड में पूछा था।

मुख्य विशेषताएं:

  • पायथन 3 संगतता की कमी
  • विस्तार समर्थन की कमी
  • गोंद कोड के रूप में उपयुक्त नहीं है
  • गति ही सब कुछ नहीं है

आखिरकार, वह फैसला करने वाला है ...


3
वीडियो के प्रासंगिक भाग के लिए सीधे लिंक के साथ +1 करें! इसके अलावा +1 प्रफुल्लित करने वाला सत्य के लिए Guido van Rossum अनौपचारिक सर्वेक्षण "कितने लोग उत्पादन में PyPy का उपयोग कर रहे हैं? ... कोई हाथ नहीं? खांसी ठीक है, मुझे लगता है कि अभी भी उम्मीद है [CPython के लिए]।"
ट्रेवर बोयड स्मिथ

15

एक कारण यह हो सकता है कि PyPy साइट के अनुसार , यह वर्तमान में केवल 32- और 64-बिट इंटेल x86 आर्किटेक्चर पर चलता है, जबकि CPython अन्य प्लेटफार्मों पर भी चलता है। यह शायद PyPy में प्लेटफ़ॉर्म-विशिष्ट गति वृद्धि के कारण है। जबकि गति एक अच्छी बात है, लोग अक्सर भाषा कार्यान्वयन को "प्लेटफ़ॉर्म-स्वतंत्र" के रूप में संभव होना चाहते हैं।


6
ध्यान दें कि एक एआरएम बैकएंड "लगभग वहां" है और एक पावरपीसी बैकेंड डब्ल्यूआईपी है। यह भी ध्यान दें कि यह केवल JIT कम्पाइलर को संदर्भित करता है, और JIT को एक नए आर्किटेक्चर में पोर्ट करने के लिए केवल अपेक्षाकृत सरल और निम्न-स्तर IR के लिए एक कोड जनरेटर को लागू करने की आवश्यकता होती है, इससे अधिक कुछ नहीं।

1
2018 तक, PyPy अब अधिक आर्किटेक्चर x86 (Linunx, Windows, MacOS और BSDs पर 32/64 बिट्स) पर चलता है, लेकिन लिनक्स पर भी, नए ARM हार्डवेयर (ARMv6 या ARMv7, Vvv3 के साथ), बड़े- और छोटे-एंडियन PPC64 के संस्करण, और s390x।
Frédéric Grosshans

7

मैं डेविड बेज़ले द्वारा इस अंतर्दृष्टि को और अधिक जानकारी के लिए देखने की सलाह देता हूं । यह PyPy की प्रकृति और पेचीदगी पर स्पष्टता देकर आपके प्रश्न का उत्तर देता है।


6

सब कुछ है कि यहाँ कहा गया है के अलावा, PyPy लगभग कीड़े के रूप में CPython के रूप में ठोस ठोस नहीं है। SymPy के साथ, हमने पिछले कुछ वर्षों में PyPy में लगभग एक दर्जन कीड़े पाए हैं, दोनों रिलीज़ किए गए संस्करणों और नाइटलाइज़ में।

दूसरी ओर, हमने केवल सीपीथॉन में एक बग पाया है, और यह एक पूर्वगामी में था।

इसके अलावा, पायथन 3 सपोर्ट की कमी को दूर न करें। कोर पायथन समुदाय में कोई भी अजगर 2 की परवाह नहीं करता है। वे Python 3.4 में अगली बड़ी चीजों पर काम कर रहे हैं, जो Python 3 की पांचवीं प्रमुख रिलीज होगी। PyPy के लोगों ने अभी भी उनमें से एक को नहीं प्राप्त किया है। इससे पहले कि वे दावेदार बनने के लिए शुरू कर सकें, उन्हें पकड़ने के लिए कुछ मिल गया है।

मुझे गलत मत समझो PyPy कमाल का है। लेकिन यह अभी भी बहुत महत्वपूर्ण तरीकों से CPython से बेहतर होने से दूर है।

और वैसे, यदि आप PyPy में SymPy का उपयोग करते हैं, तो आपको एक छोटा मेमोरी फ़ुटप्रिंट (या स्पीडअप या तो) दिखाई नहीं देगा। Https://bitbucket.org/pypy/pypy/issues/1447/ देखें ।


2
2018 तक, मैं इस बात की पुष्टि कर सकता हूं कि मैंने अलग-अलग सहानुभूतिपूर्ण उपयोगों में परिमाण का एक क्रम देखा है
Frédéric Grosshans

1
@ FrédéricGrosshans दिलचस्प है। मुझे इसे फिर से बेंचमार्क करने की कोशिश करनी होगी।
asmeurer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.