"PyPy Python में पायथन का पुन: कार्यान्वयन है" PyPy, IMHO का वर्णन करने के लिए एक भ्रामक तरीका है, हालांकि यह तकनीकी रूप से सच है।
PyPy के दो प्रमुख भाग हैं।
- अनुवाद की रूपरेखा
- दुभाषी
अनुवाद की रूपरेखा एक संकलक है। यह RPython कोड को C (या अन्य लक्ष्यों) के नीचे, स्वचालित रूप से कचरा संग्रह और एक JIT संकलक जैसे पहलुओं में जोड़ देता है। यह मनमाना पायथन कोड नहीं संभाल सकता , केवल RPython।
RPython सामान्य पायथन का सबसेट है; सभी RPython कोड Python कोड है, लेकिन दूसरे तरीके से नहीं। RPython की कोई औपचारिक परिभाषा नहीं है, क्योंकि RPython मूल रूप से "Python का सबसेट है जिसे PyPy के अनुवाद ढांचे द्वारा अनुवादित किया जा सकता है"। लेकिन अनुवाद किए जाने के लिए, RPython कोड को स्टेटिकली टाइप करना होगा (टाइप्स का अनुमान है, आप उन्हें घोषित नहीं करते हैं, लेकिन यह अभी भी सख्ती से एक प्रकार के प्रति चर है), और आप फ़ंक्शन / मॉडिफ़ाइंग फ़ंक्शन को घोषित करने / संशोधित करने जैसे काम नहीं कर सकते हैं / रनटाइम पर कक्षाएं या तो।
दुभाषिया तब एक सामान्य पायथन दुभाषिया है जिसे RPython में लिखा गया है।
क्योंकि RPython कोड सामान्य Python कोड है, आप इसे किसी भी Python दुभाषिया पर चला सकते हैं। लेकिन PyPy के किसी भी स्पीड के दावे को इस तरह से चलाने से नहीं आते हैं; यह केवल एक तीव्र परीक्षण चक्र के लिए है, क्योंकि दुभाषिया का अनुवाद करने में लंबा समय लगता है ।
उस समझ के साथ, यह तुरंत स्पष्ट होना चाहिए कि PyPyPy या PyPyPyPy के बारे में अटकलें वास्तव में कोई मतलब नहीं रखती हैं। आपके पास आरपीथॉन में लिखा गया एक दुभाषिया है। आप इसे सी कोड में अनुवाद करते हैं जो पायथन को जल्दी से निष्पादित करता है। वहां प्रक्रिया बंद हो जाती है; इसे फिर से संसाधित करके गति बढ़ाने के लिए कोई और अधिक आरपीथॉन नहीं है।
इसलिए "PyPy के लिए CPython की तुलना में तेज़ होना संभव है" भी काफी हद तक स्पष्ट हो जाता है। PyPy का एक बेहतर कार्यान्वयन है, जिसमें एक JIT कंपाइलर भी शामिल है (यह आमतौर पर JIT कंपाइलर के बिना बहुत तेज़ नहीं है, मेरा मानना है, जिसका अर्थ है कि PyPy केवल JIT-संकलन के लिए अतिसंवेदनशील कार्यक्रमों के लिए तेज़ है)। सीपीथॉन को कभी भी पायथन भाषा के अत्यधिक अनुकूलन कार्यान्वयन के रूप में तैयार नहीं किया गया था (हालांकि यदि आप अंतर का पालन करते हैं तो यह इसे अत्यधिक अनुकूलित कार्यान्वयन बनाने की कोशिश करते हैं )।
PyPy प्रोजेक्ट का वास्तव में अभिनव बिट यह है कि वे परिष्कृत GC स्कीमों या JIT कंपाइलरों को हाथ से नहीं लिखते हैं। वे दुभाषिया को अपेक्षाकृत सीधे RPython में लिखते हैं, और सभी RPython के लिए पायथन की तुलना में निम्न स्तर का है यह अभी भी एक वस्तु-उन्मुख कचरा एकत्र भाषा है, C. की तुलना में बहुत अधिक उच्च स्तर है। फिर अनुवाद की रूपरेखा स्वचालित रूप से GC और JIT के साथ चीजों को जोड़ती है। इसलिए अनुवाद की रूपरेखा बहुत बड़ी हैप्रयास, लेकिन यह PyPy python दुभाषिया पर समान रूप से लागू होता है, हालांकि वे अपने कार्यान्वयन को बदलते हैं, प्रदर्शन में सुधार के लिए प्रयोग में अधिक स्वतंत्रता की अनुमति देते हैं (जीसी बग को शुरू करने के बारे में चिंता किए बिना या परिवर्तन से निपटने के लिए JIT संकलक को अद्यतन करने के लिए)। इसका मतलब यह भी है कि जब वे पायथन 3 दुभाषिया को लागू करने के लिए चारों ओर हो जाते हैं, तो यह स्वचालित रूप से समान लाभ प्राप्त करेगा। और PyPy ढांचे के साथ लिखे गए किसी भी अन्य दुभाषियों (जिनमें से पॉलिश के अलग-अलग चरणों में एक संख्या है)। और PyPy फ्रेमवर्क का उपयोग करने वाले सभी दुभाषिए स्वचालित रूप से फ्रेमवर्क द्वारा समर्थित सभी प्लेटफार्मों का समर्थन करते हैं।
तो PyPy परियोजना का असली लाभ एक गतिशील भाषा के लिए एक कुशल मंच-स्वतंत्र दुभाषिया को लागू करने के सभी भागों को अलग करना (जितना संभव हो) करना है। और फिर एक ही स्थान पर उनमें से एक अच्छा कार्यान्वयन के साथ आते हैं, कि कई दुभाषियों में फिर से इस्तेमाल किया जा सकता है। यह "मेरी पायथन कार्यक्रम तेजी से चलता है" जैसी एक तत्काल जीत नहीं है, लेकिन यह भविष्य के लिए एक महान संभावना है।
और यह आपके पाइथन प्रोग्राम को तेजी से (शायद) चला सकता है।