"पीईपीई पायथन में पाइथन का पुनर्मूल्यांकन है" पीपीपीई, आईएमएचओ का वर्णन करने के बजाय एक भ्रामक तरीका है, हालांकि यह तकनीकी रूप से सच है।
पीपीपी के दो प्रमुख भाग हैं।
- अनुवाद ढांचे
- दुभाषिया
अनुवाद ढांचा एक संकलक है। यह RPython को सी (या अन्य लक्ष्यों) तक कोड संकलित करता है, जो स्वचालित रूप से कचरा संग्रह और एक जेआईटी कंपाइलर जैसे पहलुओं में जोड़ता है। यह मनमाने ढंग से पाइथन कोड, केवल RPython संभाल नहीं सकता है।
RPython सामान्य पायथन का सबसेट है; सभी RPython कोड पायथन कोड है, लेकिन दूसरी तरफ नहीं। RPython की कोई औपचारिक परिभाषा नहीं है, क्योंकि RPython मूल रूप से केवल "पायथन का सबसेट है जिसका अनुवाद पीपीपी के अनुवाद ढांचे द्वारा किया जा सकता है"। लेकिन अनुवाद करने के लिए, RPython कोड होना चाहिए 0 सांख्यिकीय रूप से टाइप (प्रकार अनुमानित हैं, आप उन्हें घोषित नहीं करते हैं, लेकिन यह अभी भी एक चर प्रति चर है), और आप घोषणा/संशोधन जैसी चीजें नहीं कर सकते रनटाइम पर कार्य/कक्षाएं या तो।
दुभाषिया तब एक सामान्य पायथन दुभाषिया है जिसे RPython में लिखा गया है।
क्योंकि RPython कोड सामान्य पायथन कोड है, तो आप इसे किसी भी पायथन दुभाषिया पर चला सकते हैं। लेकिन पीपीपी के गति दावों में से कोई भी इस तरह से चलने से नहीं आता है; यह सिर्फ एक तेज परीक्षण चक्र के लिए है, क्योंकि दुभाषिया का अनुवाद लंबा समय लेता है।
समझने के साथ, यह तुरंत स्पष्ट होना चाहिए कि PyPyPy या PyPyPyPy के बारे में अनुमान वास्तव में कोई समझ नहीं लेते हैं। आपके पास RPython में लिखा गया एक दुभाषिया है। आप इसे सी कोड में अनुवाद करते हैं जो पाइथन को जल्दी से निष्पादित करता है। वहां प्रक्रिया बंद हो जाती है; इसे फिर से संसाधित करके तेज करने के लिए कोई और RPython नहीं है।
तो "पीपीपी के लिए सीपीथॉन की तुलना में तेज़ होना संभव है" यह भी स्पष्ट रूप से स्पष्ट हो जाता है। पीआईपीई के पास एक बेहतर कार्यान्वयन है, जिसमें एक जेआईटी कंपाइलर शामिल है (यह आमतौर पर जेआईटी कंपाइलर के बिना जितना तेज़ नहीं है, मेरा मानना है, जिसका मतलब है कि पीईपीई जेआईटी-संकलन के लिए अतिसंवेदनशील कार्यक्रमों के लिए केवल तेज़ है)। सीपीथॉन को कभी भी पायथन भाषा का अत्यधिक अनुकूलन करने के लिए डिज़ाइन नहीं किया गया था (हालांकि यदि आप अंतर का पालन करते हैं तो इसे अनुकूलित कार्यान्वयन करने का प्रयास करते हैं)।
PyPy परियोजना की वास्तव में अभिनव बिट है कि वे हाथ से परिष्कृत जीसी योजनाओं या JIT compilers नहीं लिखते है। वे RPython में अपेक्षाकृत सरल रूप से दुभाषिया लिखते हैं, और सभी RPython पाइथन से कम स्तर के लिए है, यह अभी भी एक ऑब्जेक्ट उन्मुख कचरा एकत्रित भाषा है, सी से अधिक उच्च स्तर है। फिर अनुवाद ढांचे स्वचालित रूप से जीसी और जेआईटी जैसी चीजें जोड़ता है। तो अनुवाद ढांचा विशाल प्रयास है, लेकिन यह पीपीपी पायथन दुभाषिया के लिए समान रूप से अच्छी तरह से लागू होता है, हालांकि वे अपने कार्यान्वयन को बदलते हैं, जिससे प्रदर्शन में सुधार करने के लिए प्रयोग में अधिक स्वतंत्रता की अनुमति मिलती है (जीसी बग शुरू करने या जेआईटी कंपाइलर को अपडेट करने के बारे में चिंता किए बिना परिवर्तनों का सामना करना पड़ता है)। इसका अर्थ यह भी है कि जब वे पाइथन 3 दुभाषिया को लागू करने के लिए चारों ओर जाते हैं, तो यह स्वचालित रूप से वही लाभ प्राप्त करेगा। और पीपीपी फ्रेमवर्क के साथ लिखे गए किसी भी अन्य दुभाषिया (जिनमें से पॉलिश के विभिन्न चरणों में एक संख्या है)। और पीपीपी फ्रेमवर्क का उपयोग कर सभी दुभाषिया स्वचालित रूप से ढांचे द्वारा समर्थित सभी प्लेटफार्मों का समर्थन करते हैं।
तो पीपीपी परियोजना का वास्तविक लाभ एक गतिशील भाषा के लिए एक कुशल मंच-स्वतंत्र दुभाषिया को लागू करने के सभी हिस्सों को अलग करना (जितना संभव हो) अलग करना है। और उसके बाद एक ही स्थान पर उनके एक अच्छे कार्यान्वयन के साथ आते हैं, जिसे कई दुभाषियों में फिर से उपयोग किया जा सकता है। यह तत्काल जीत नहीं है जैसे "मेरा पायथन प्रोग्राम अब तेजी से चलता है", लेकिन यह भविष्य के लिए एक बड़ी संभावना है।
और यह आपके पायथन प्रोग्राम को तेज़ी से चला सकता है (शायद)।
नाइटपिक: पीपीपी * है * पायपीपी। प्रोजेक्शन ऑपरेटर के रूप में Py- * उपसर्ग के बारे में सोचें। – u0b34a0f6ae
ठीक है। इसलिए पीपीपी को सीपीथन से पसंद किया जाना चाहिए? क्या इसमें कोई कमी है? – balki
पीईपीई रनटाइम ऑप्टिमाइज़ेशन पर उत्कृष्ट है, लेकिन इसके विभिन्न अंदरूनी इसे कई लोकप्रिय सी एक्सटेंशन के साथ [असंगत] (https://bitbucket.org/pypy/compatibility/wiki/Home) बनाते हैं। –