पायथन को आधुनिक जावास्क्रिप्ट कार्यान्वयन की तरह अनुकूलित क्यों नहीं किया गया है?


11

V8 (क्रोम), स्पाइडरमोंकी (फ़ायरफ़ॉक्स), और चक्र (IE / एज) जैसे आधुनिक जावास्क्रिप्ट कार्यान्वयन सभी में JIT संकलन है, और प्रदर्शन में सुधार करने के लिए कई अन्य अनुकूलन हैं।

क्यों अजगर इन नहीं है?

मैं PyPy और IronPython को देख रहा हूं, जो दोनों गति का दावा करते हैं। PyPy मुझे समझ में नहीं आ रहा है कि एक व्याख्या भाषा में पायथन में लिखा गया पायथन कार्यान्वयन, सी। आयरनपीथॉन में संदर्भ कार्यान्वयन से अधिक तेज़ होगा, एक ही विचार है लेकिन मैं यह नहीं देखता कि .NET फ्रेमवर्क कैसे गति बढ़ाएगा।


2
IronPython - किसी भी अन्य .NET भाषा की तरह - Microsoft की "कॉमन इंटरमीडिएट लैंग्वेज" के लिए संकलित है, जिसके लिए बहुत परिपक्व JIT कंपाइलर कार्यान्वयन मौजूद हैं।
डॉक ब्राउन

2
एक प्रोग्रामिंग भाषा एक विनिर्देश है (कुछ दस्तावेज़ में लिखा गया है), एक सॉफ्टवेयर नहीं। केवल प्रोग्रामिंग भाषा कार्यान्वयन सॉफ्टवेयर हैं (और संकलक या व्याख्याकार हो सकते हैं)।
बेसिल स्टारीनेविच

1
@BasileStarynkevitch: मुझे वह नहीं मिला, जो आप इस टिप्पणी के साथ हमें बताना चाह रहे हैं। ओपी स्पष्ट रूप से CPython, PyPy और IronPython के बारे में पूछ रहा है, जो कि विशिष्ट Python कार्यान्वयन हैं।
डॉक ब्राउन

1
@DocBrown को लाने के लिए एक प्रासंगिक बिंदु की तरह लगता है, प्रश्न में अंतिम पैराग्राफ दिया जाता है, जो गलतफहमी दिखाता है जब यह विशेष रूप से पायथन को एक व्याख्या की गई भाषा कहता है।
8bittree

जवाबों:


19

क्यों अजगर इन नहीं है?

मुझे यकीन नहीं है कि आपको क्यों लगता है कि कोई पायथन कार्यान्वयन नहीं है जो प्रदर्शन के बारे में परवाह करता है। PyPy , IronPython , और Jython सभी औद्योगिक-शक्ति, उत्पादन-तैयार पायथन कार्यान्वयन हैं जो प्रदर्शन के लिए देखभाल करते हैं। पिस्टन एक इन-डेवलपमेंट कार्यान्वयन है जिसे विशेष रूप से प्रदर्शन के लिए बनाया गया था । पाइथन के प्रदर्शन को सुधारने के लिए अनलाडेन स्वोलो और साइको भी प्रोजेक्ट थे।

हालाँकि, यह तथ्य कि CPython उपयोगकर्ता अन्य सभी कार्यान्वयनों के कुल संयुक्त उपयोगकर्ता आधार को बहुत कम कर देते हैं, जो कि Unladen Swallow को समुदाय द्वारा अस्वीकार कर दिया गया था, कि इनमें से अधिकांश परियोजनाएं या तो मृत हैं या डेवलपर्स को आकर्षित करने के लिए संघर्ष कर रहे हैं, आपको पायथन के बारे में कुछ बताना चाहिए। सामुदायिक मूल्यों का प्रदर्शन।

यह उत्तर पायथन समुदाय की विशिष्ट मानसिकता का एक अच्छा उदाहरण है: प्रदर्शन समस्याओं को ठीक करने के बजाय, वे केवल पायथन में नहीं अपना कोड लिखना पसंद करेंगे।

मैं PyPy और IronPython को देख रहा हूं, जो दोनों गति का दावा करते हैं। PyPy मुझे समझ में नहीं आता है कि एक व्याख्या भाषा में पायथन में लिखा गया पायथन कार्यान्वयन सी में संदर्भ कार्यान्वयन से अधिक तेज़ कैसे होगा।

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

दूसरे, चूंकि यह केवल यह बताता है कि संकलक का उत्पादन कितना तेज है, और संकलक को पायथन में लिखा गया है, अर्थात यह जिस भाषा में संकलित है, वह वास्तव में खुद को संकलित करके खुद को तेज बना सकता है।

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

लेकिन यह सब वास्तव में वास्तव में मायने नहीं रखता है, क्योंकि PyPy वास्तव में Python में नहीं लिखा गया है। यह RPython में लिखा है । RPython में दो भाग होते हैं, RPython प्रोग्रामिंग लैंग्वेज और RPython फ्रेमवर्क।

RPython प्रोग्रामिंग भाषा Python नहीं है। यह एक अलग प्रोग्रामिंग भाषा है। RPython एक सांख्यिकीय रूप से टाइप की जाने वाली प्रोग्रामिंग भाषा है, जो लगभग जावा के रूप में अमूर्त पर समान स्तर पर है, लगभग C के समान ही प्रदर्शन के साथ। RPython Python का एक सिंटैक्टिक और सिमेंटिक उपसमुच्चय है, जिसका अर्थ है कि प्रत्येक RPython प्रोग्राम एक मान्य पायथन प्रोग्राम है और यह कर सकता है पायथन कार्यान्वयन द्वारा चलाया जा सकता है (आमतौर पर परिमाण धीमा करने के कई आदेश हैं, लेकिन यह डिबगिंग के लिए अभी भी उपयोगी है क्योंकि आपको पायथन के सभी उपकरणों तक पहुंच प्राप्त होती है, और व्याख्या तुरंत शुरू होती है, जबकि भाषा कार्यान्वयन को संकलित करने में आमतौर पर 5-10 मिनट लगते हैं। ), लेकिन काफिला सच नहीं है।

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

केवल PyPy ही नहीं, RPython प्लेटफॉर्म पर भी भाषा के बहुत सारे कार्यान्वयन हैं

IronPython, एक ही विचार लेकिन मैं यह नहीं देखता कि .NET फ्रेमवर्क कैसे गति बढ़ाएगा।

ISO CLI के अधिकांश कार्यान्वयन, जैसे Microsoft, या मोनो द्वारा विभिन्न .NET वेरिएंट में परिष्कृत कचरा संग्रहकर्ता, ऑप्टिमाइज़र और कंपाइलर शामिल हैं। ज्यथॉन और जावा कार्यान्वयन के लिए भी यही सच है।

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


6

V8 (क्रोम), स्पाइडरमोंकी (फ़ायरफ़ॉक्स), और चक्र (IE / एज) जैसे आधुनिक जावास्क्रिप्ट कार्यान्वयन सभी में JIT संकलन है, और प्रदर्शन में सुधार करने के लिए कई अन्य अनुकूलन हैं।

क्यों अजगर इन नहीं है?

जावास्क्रिप्ट को वेब ब्राउज़र में शामिल किया गया है और महत्वपूर्ण मात्रा में सॉफ्टवेयर आज वेब ब्राउज़र में चलाने के लिए डिज़ाइन किया गया है। यह जावास्क्रिप्ट प्रदर्शन को बहुत महत्वपूर्ण बनाता है जैसे कि Google, Apple और Microsoft जावास्क्रिप्ट रनटाइम को तेज बनाने में बहुत सारे संसाधनों का निवेश करते हैं। अगर पैसे की इस धारा को पाइथन पर पुनर्निर्देशित किया जाता, तो यह समान रूप से तेज़ होता।

PyPy मुझे समझ में नहीं आता है कि एक व्याख्या भाषा में पायथन में लिखा गया पायथन कार्यान्वयन सी में संदर्भ कार्यान्वयन से अधिक तेज़ कैसे होगा।

यह विचार है कि एक बार कोड JIT-ed है, यह अब "व्याख्या" नहीं है। PyPI Python कोड को मशीन कोड (जैसे x86_64 मशीन कोड) में बदलकर काम करता है, जिसे फिर प्रोसेसर पर सीधे निष्पादित किया जाता है।


3
विशेष रूप से प्रासंगिक यह है कि, वेब ब्राउज़र में, जावास्क्रिप्ट का कोई विकल्प नहीं है (या कम से कम, आमतौर पर सभी प्रमुख ब्राउज़रों पर अभी तक उपलब्ध कुछ भी नहीं है)। यदि आप वेब ब्राउज़र में तेज़ प्रदर्शन चाहते हैं, तो आपको एक तेज़ जावास्क्रिप्ट कार्यान्वयन करना होगा। जबकि पायथन को चलाने वाले प्लेटफार्मों पर, आप निश्चित रूप से एक अन्य भाषा में स्थानांतरित हो सकते हैं, जिसमें बेहतर प्रदर्शन कार्यान्वयन हो सकता है।
8bittree

-3

यदि आप अपने पायथन कोड को मुख्य पायथन फ़ाइल के रूप में एक साधारण शीर्ष स्तर के स्टार्ट-अप के साथ मॉड्यूल में संरचना करते हैं, (इसमें बहुत कम कोड के साथ), तो अजगर आपके सभी कोड को मशीन स्वतंत्र बाइट कोड में संकलित करता है, ये हैं .pyc फाइलें जो आप अपनी निर्देशिका संरचना में देखते हैं। यह पहले रन के बाद लोडिंग और व्याख्या समय को कम करता है।

यदि आप अपनी स्क्रिप्ट को -O या -OO झंडे के साथ शुरू करते हैं या 0 से अधिक मूल्य के लिए PYTHONOPTIMIZE सेट करते हैं तो .pyo फाइलें उत्पन्न होती हैं जो आगे अनुकूलित होती हैं।

यदि आपको कुछ विशिष्ट फ़ंक्शन के लिए उच्च अनुकूलन की आवश्यकता है, तो आप उन्हें C, C ++, FORTRAN या GO में लिख सकते हैं और फिर अजगर के भीतर से उनका उपयोग कर सकते हैं।


आप पायथन में गैर-सी एक्सटेंशन कैसे एकीकृत करते हैं? मैं केवल साइथन के लिए सी-एक्सटेंशन से अवगत हूं।

1
@Bey: मूल रूप से एक साझा पुस्तकालय, (.dll या .so) में कुछ भी, अजगर से बुलाया जा सकता है बशर्ते आप फ़ंक्शन के हस्ताक्षर जानते हों - इन्हें मैन्युअल रूप से कॉन्फ़िगर किया जा सकता है, झूले जैसे उपकरण से उत्पन्न या यहां तक ​​कि डॉक्सीजन डॉक्यूमेंटेशन से उत्पन्न भी। stackoverflow.com/questions/5811949/… के रूप में मददगार है। blog.heroku.com/see_python_see_python_go_go_python_go
स्टीव बार्न्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.