python - पीपीपी-यह संभवतः सीपीथन को कैसे हरा सकता है?




pypy language-implementation (3)

"पीईपीई पायथन में पाइथन का पुनर्मूल्यांकन है" पीपीपीई, आईएमएचओ का वर्णन करने के बजाय एक भ्रामक तरीका है, हालांकि यह तकनीकी रूप से सच है।

पीपीपी के दो प्रमुख भाग हैं।

  1. अनुवाद ढांचा
  2. दुभाषी

अनुवाद ढांचा एक संकलक है। यह आरपीथॉन कोड को सी (या अन्य लक्ष्यों) तक संकलित करता है, जो स्वचालित रूप से कचरा संग्रह और एक जेआईटी कंपाइलर जैसे पहलुओं में जोड़ता है। यह मनमाने ढंग से पाइथन कोड, केवल RPython संभाल नहीं कर सकता है

RPython सामान्य पायथन का एक सबसेट है; सभी RPython कोड पायथन कोड है, लेकिन दूसरी तरफ नहीं। RPython की कोई औपचारिक परिभाषा नहीं है, क्योंकि RPython मूल रूप से केवल "पायथन का सबसेट है जिसका अनुवाद पीपीपी के अनुवाद ढांचे द्वारा किया जा सकता है"। लेकिन अनुवाद के लिए, RPython कोड को स्थाई रूप से टाइप किया जाना चाहिए (प्रकार अनुमानित हैं, आप उन्हें घोषित नहीं करते हैं, लेकिन यह अभी भी एक चर प्रति चर है), और आप कार्यों को घोषित / संशोधित करने जैसी चीजें नहीं कर सकते हैं / रनटाइम पर कक्षाएं या तो।

दुभाषिया फिर RPython में लिखा एक सामान्य पायथन दुभाषिया है।

चूंकि RPython कोड सामान्य पायथन कोड है, इसलिए आप इसे किसी भी पायथन दुभाषिया पर चला सकते हैं। लेकिन पीपीपी के गति दावों में से कोई भी इस तरह से चलने से नहीं आता है; यह सिर्फ एक त्वरित परीक्षण चक्र के लिए है, क्योंकि दुभाषिया का अनुवाद करने में काफी समय लगता है।

इसके साथ ही, यह तुरंत स्पष्ट होना चाहिए कि PyPyPy या PyPyPyPy के बारे में अटकलें वास्तव में कोई समझ नहीं लेती हैं। आपके पास RPython में लिखा गया एक दुभाषिया है। आप इसे सी कोड में अनुवाद करते हैं जो पाइथन को जल्दी से निष्पादित करता है। वहां प्रक्रिया बंद हो जाती है; इसे फिर से संसाधित करके तेज करने के लिए कोई और RPython नहीं है।

तो "पीपीपी के लिए सीपीथन से तेज होना कैसे संभव है" यह भी स्पष्ट रूप से स्पष्ट हो जाता है। पीआईपीई के पास एक बेहतर कार्यान्वयन है, जिसमें एक जेआईटी कंपाइलर शामिल है (यह आमतौर पर जेआईटी कंपाइलर के बिना जितना तेज़ नहीं है, मेरा मानना ​​है, जिसका मतलब है कि पीईपीई जेआईटी-संकलन के लिए अतिसंवेदनशील कार्यक्रमों के लिए केवल तेज़ है)। सीपीथॉन को कभी भी पाइथन भाषा का अत्यधिक अनुकूलन करने के लिए डिज़ाइन नहीं किया गया था (हालांकि यदि आप अंतर का पालन करते हैं तो वे इसे अत्यधिक अनुकूलित कार्यान्वयन करने का प्रयास करते हैं)।

पीपीपी परियोजना का वास्तव में अभिनव बिट यह है कि वे हाथ से परिष्कृत जीसी योजनाएं या जेआईटी कंपाइलर नहीं लिखते हैं। वे RPython में अपेक्षाकृत सरल रूप से दुभाषिया लिखते हैं, और सभी RPython पाइथन से कम स्तर के लिए है, यह अभी भी एक ऑब्जेक्ट उन्मुख कचरा एकत्रित भाषा है, सी से अधिक उच्च स्तर है। फिर अनुवाद ढांचे स्वचालित रूप से जीसी और जेआईटी जैसी चीजें जोड़ता है। तो अनुवाद ढांचा एक बड़ा प्रयास है, लेकिन यह पीपीपी पायथन दुभाषिया के लिए समान रूप से अच्छी तरह से लागू होता है, हालांकि वे अपने कार्यान्वयन को बदलते हैं, जिससे प्रदर्शन में सुधार करने के लिए प्रयोग में अधिक स्वतंत्रता की अनुमति मिलती है (जीसी बग शुरू करने या जेआईटी कंपाइलर को अपडेट करने के बारे में चिंता किए बिना बदलाव)। इसका अर्थ यह भी है कि जब वे पाइथन 3 दुभाषिया को लागू करने के लिए चारों ओर जाते हैं, तो यह स्वचालित रूप से वही लाभ प्राप्त करेगा। और पीपीपी फ्रेमवर्क के साथ लिखे गए किसी भी अन्य दुभाषिया (जिनमें से पॉलिश के विभिन्न चरणों में एक संख्या है)। और पीपीपी फ्रेमवर्क का उपयोग कर सभी दुभाषिया स्वचालित रूप से ढांचे द्वारा समर्थित सभी प्लेटफार्मों का समर्थन करते हैं।

इसलिए पीपीपी परियोजना का सही लाभ एक गतिशील भाषा के लिए एक कुशल मंच-स्वतंत्र दुभाषिया को लागू करने के सभी हिस्सों को (जितना संभव हो) अलग करना है। और उसके बाद एक ही स्थान पर उनके एक अच्छे कार्यान्वयन के साथ आते हैं, जिसे कई दुभाषियों में फिर से उपयोग किया जा सकता है। यह तत्काल जीत नहीं है जैसे "मेरा पायथन प्रोग्राम अब तेजी से चलता है", लेकिन यह भविष्य के लिए एक बड़ी संभावना है।

और यह आपके पायथन प्रोग्राम को तेज़ी से चला सकता है (शायद)।

Google ओपन सोर्स ब्लॉग से :

पीपीपी पाइथन में पाइथन का एक पुनर्मूल्यांकन है, जिसमें सीपीथॉन की तुलना में बेहतर प्रदर्शन प्राप्त करने के लिए उन्नत तकनीकों का उपयोग किया जाता है। कई वर्षों तक कड़ी मेहनत का भुगतान किया गया है। हमारे गति के परिणाम अक्सर छोटे अनुप्रयोगों पर 10x तक की गति के लिए, वास्तविक अनुप्रयोग कोड पर 2x तक की गति तक, थोड़ा धीमा होने से लेकर सीपीथॉन को हराते हैं।

यह कैसे संभव है? Pypy को लागू करने के लिए कौन सा पायथन कार्यान्वयन का उपयोग किया गया था? सीपीथन ? और PypyPy या PyPyPyPy के स्कोर को मारने की संभावना क्या है?

(एक संबंधित नोट पर ... कोई ऐसा क्यों कोशिश करेगा?)


पायपी को पायथन में कार्यान्वित किया गया है, लेकिन यह फ्लाई पर देशी कोड उत्पन्न करने के लिए एक जेआईटी कंपाइलर लागू करता है।

पायथन के शीर्ष पर पीपीपी को लागू करने का कारण शायद यह है कि यह केवल एक बहुत ही उत्पादक भाषा है, खासकर जब से जेआईटी कंपाइलर होस्ट भाषा के प्रदर्शन को कुछ हद तक अप्रासंगिक बनाता है।


Q1। यह कैसे संभव है?

मैनुअल मेमोरी मैनेजमेंट (जो सीपीथॉन अपनी गिनती के साथ करता है) कुछ मामलों में स्वचालित प्रबंधन से धीमा हो सकता है।

सीपीथॉन दुभाषिया के कार्यान्वयन में सीमाएं कुछ अनुकूलन को रोकती हैं जो पीपीपी कर सकती हैं (उदाहरण के लिए। ठीक दागदार ताले)।

जैसा कि मार्सेलो ने उल्लेख किया, जेआईटी। फ्लाई पर सक्षम होने के कारण पुष्टि करें कि किसी ऑब्जेक्ट के प्रकार से आपको कॉल करने के लिए जिस विधि को कॉल करना है, उस पर पहुंचने के लिए आपको कई पॉइंटर ड्रेफरेंस करने की आवश्यकता बचा सकती है।

Q2। Pypy को लागू करने के लिए कौन सा पायथन कार्यान्वयन का उपयोग किया गया था?

पीपीपी दुभाषिया RPython में कार्यान्वित किया गया है जो पायथन (भाषा और सीपीथन दुभाषिया नहीं) का एक स्थिर रूप से टाइप किया गया सबसेट है। - विवरण के लिए https://pypy.readthedocs.org/en/latest/architecture.html देखें।

Q3। और PypyPy या PyPyPyPy के स्कोर को मारने की संभावना क्या है?

यह इन hypothetical दुभाषियों के कार्यान्वयन पर निर्भर करेगा। उदाहरण के लिए उनमें से एक ने स्रोत लिया, इस पर कुछ प्रकार का विश्लेषण किया और इसे थोड़ी देर के लिए चलने के बाद सीधे तंग लक्ष्य विशिष्ट असेंबली कोड में परिवर्तित कर दिया, मुझे लगता है कि यह सीपीथन से काफी तेज़ होगा।

अद्यतन: हाल ही में, एक सावधानीपूर्वक तैयार किए गए उदाहरण पर , पीपीपी ने gcc -O3 ओ 3 के साथ संकलित एक समान सी प्रोग्राम को बेहतर प्रदर्शन किया। यह एक आकस्मिक मामला है लेकिन कुछ विचारों को प्रदर्शित करता है।

Q4। कोई ऐसा कुछ क्यों कोशिश करेगा?

आधिकारिक साइट से। https://pypy.readthedocs.org/en/latest/architecture.html#mission-statement

हमारा लक्ष्य है:

  • उत्पादन के लिए एक आम अनुवाद और समर्थन ढांचा
    गतिशील भाषाओं के कार्यान्वयन, एक साफ जोर देना
    भाषा विनिर्देश और कार्यान्वयन के बीच अलगाव
    पहलुओं। हम इसे RPython toolchain _ कहते हैं।

  • पाइथन_ भाषा का एक अनुपालन, लचीला और तेज़ कार्यान्वयन जो निम्न स्तर के विवरण को एन्कोड किए बिना नई उन्नत उच्च-स्तरीय सुविधाओं को सक्षम करने के लिए उपरोक्त टूलचेन का उपयोग करता है।

इस तरह से चिंताओं को अलग करके, पाइथन - और अन्य गतिशील भाषाओं के हमारे कार्यान्वयन - किसी भी गतिशील भाषा के लिए स्वचालित रूप से जस्ट-इन-टाइम कंपाइलर उत्पन्न करने में सक्षम है। यह कार्यान्वयन निर्णयों के मिश्रण और मिलान दृष्टिकोण को भी अनुमति देता है, जिनमें ऐतिहासिक रूप से उपयोगकर्ता के नियंत्रण से बाहर हैं, जैसे लक्षित प्लेटफार्म, मेमोरी और थ्रेडिंग मॉडल, कचरा संग्रहण रणनीतियां और अनुकूलन लागू हैं, जिनमें शामिल हैं या नहीं पहली जगह में एक जेआईटी।

सी कंपाइलर जीसीसी सी में लागू किया गया है, हास्केल कंपाइलर जीएचसी हास्केल में लिखा गया है। क्या आपके पास पाइथन में लिखे जाने वाले पायथन दुभाषिया / कंपाइलर के लिए कोई कारण नहीं है?





language-implementation