सीपीथॉन: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{short description|Python reference implementation}}
{{short description|Python reference implementation}}
{{Distinguish|Cython}}
{{Distinguish|साइथन}}
{{Infobox software
{{Infobox software
| name = CPython
| name = CPython
Line 20: Line 20:
}}
}}


CPython Python (प्रोग्रामिंग लैंग्वेज) का [[संदर्भ कार्यान्वयन]] है। C (प्रोग्रामिंग लैंग्वेज) और पायथन में लिखा गया, CPython, Python भाषा का डिफ़ॉल्ट और सबसे व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन है।
सीपीथॉन पायथन (प्रोग्रामिंग भाषा) का [[संदर्भ कार्यान्वयन]] है। सी (प्रोग्रामिंग भाषा) और पायथन में लिखा गया, सीपीथॉन, पायथन भाषा का डिफ़ॉल्ट और सबसे व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन है।


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


== डिजाइन ==
== डिजाइन ==
CPython की विशेष विशेषता यह है कि यह प्रत्येक CPython दुभाषिया [[प्रक्रिया (कंप्यूटिंग)]] पर वैश्विक दुभाषिया लॉक (GIL) का उपयोग करता है, जिसका अर्थ है कि ही प्रक्रिया के भीतर, किसी समय में केवल थ्रेड Python bytecode को संसाधित कर सकता है।<ref>{{cite web|url=https://docs.python.org/3/c-api/init.html |title=Initialization, Finalization, and Threads |publisher= Python v3.8.3 documentation |access-date=2020-06-04}}</ref> इसका मतलब यह नहीं है कि [[मल्टीथ्रेडिंग (कंप्यूटर आर्किटेक्चर)]] का कोई मतलब नहीं है; सबसे आम मल्टीथ्रेडिंग परिदृश्य वह है जहां [[थ्रेड (कंप्यूटिंग)]] ज्यादातर बाहरी प्रक्रियाओं के पूरा होने की प्रतीक्षा कर रहे हैं।
सीपीथॉन की विशेष विशेषता यह है कि यह प्रत्येक सीपीथॉन दुभाषिया [[प्रक्रिया (कंप्यूटिंग)]] पर वैश्विक दुभाषिया लॉक (जीआईएल) का उपयोग करता है, जिसका अर्थ है कि ही प्रक्रिया के भीतर, किसी समय में केवल थ्रेड पायथन बाइटकोड को संसाधित कर सकता है।<ref>{{cite web|url=https://docs.python.org/3/c-api/init.html |title=Initialization, Finalization, and Threads |publisher= Python v3.8.3 documentation |access-date=2020-06-04}}</ref> इसका मतलब यह नहीं है कि [[मल्टीथ्रेडिंग (कंप्यूटर आर्किटेक्चर)]] का कोई मतलब नहीं है; सबसे आम मल्टीथ्रेडिंग परिदृश्य वह है जहां [[थ्रेड (कंप्यूटिंग)]] ज्यादातर बाहरी प्रक्रियाओं के पूरा होने की प्रतीक्षा कर रहे हैं।


यह तब हो सकता है जब कई थ्रेड्स अलग-अलग क्लाइंट्स को सर्विस दे रहे हों। हो सकता है कि थ्रेड क्लाइंट के जवाब का इंतज़ार कर रहा हो, और दूसरा थ्रेड [[डेटाबेस]] क्वेरी के निष्पादित होने का इंतज़ार कर रहा हो, जबकि तीसरा थ्रेड वास्तव में Python कोड को प्रोसेस कर रहा हो।
यह तब हो सकता है जब कई थ्रेड्स अलग-अलग क्लाइंट्स को सर्विस दे रहे हों। हो सकता है कि थ्रेड क्लाइंट के जवाब का इंतज़ार कर रहा हो, और दूसरा थ्रेड [[डेटाबेस]] क्वेरी के निष्पादित होने का इंतज़ार कर रहा हो, जबकि तीसरा थ्रेड वास्तव में पायथन कोड को प्रोसेस कर रहा हो।


हालाँकि, GIL का मतलब यह है कि CPython उन प्रक्रियाओं के लिए उपयुक्त नहीं है जो Python कोड में CPU-गहन एल्गोरिदम को लागू करते हैं जो संभावित रूप से कई कोर में वितरित किए जा सकते हैं।
हालाँकि, जीआईएल का मतलब यह है कि सीपीथॉन उन प्रक्रियाओं के लिए उपयुक्त नहीं है जो पायथन कोड में सीपीयू-गहन एल्गोरिदम को लागू करते हैं जो संभावित रूप से कई कोर में वितरित किए जा सकते हैं।


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


पायथन कोड की समवर्ती केवल [[मल्टीटास्किंग ऑपरेटिंग सिस्टम]] द्वारा प्रबंधित अलग-अलग CPython दुभाषिया प्रक्रियाओं के साथ प्राप्त की जा सकती है। यह [[समानांतर कंप्यूटिंग]] के बीच संचार को जटिल बनाता है, हालांकि मल्टीप्रोसेसिंग मॉड्यूल इसे कुछ हद तक कम करता है; इसका मतलब यह है कि समवर्ती पायथन-कोड निष्पादन से वास्तव में लाभान्वित होने वाले अनुप्रयोगों को सीमित मात्रा में [[ओवरहेड (कंप्यूटिंग)]] के साथ लागू किया जा सकता है।
पायथन कोड की समवर्ती केवल [[मल्टीटास्किंग ऑपरेटिंग सिस्टम]] द्वारा प्रबंधित अलग-अलग सीपीथॉन दुभाषिया प्रक्रियाओं के साथ प्राप्त की जा सकती है। यह [[समानांतर कंप्यूटिंग]] के बीच संचार को जटिल बनाता है, हालांकि मल्टीप्रोसेसिंग मॉड्यूल इसे कुछ हद तक कम करता है; इसका मतलब यह है कि समवर्ती पायथन-कोड निष्पादन से वास्तव में लाभान्वित होने वाले अनुप्रयोगों को सीमित मात्रा में [[ओवरहेड (कंप्यूटिंग)]] के साथ लागू किया जा सकता है।


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


हालाँकि GIL को खत्म करने के लिए कई प्रस्ताव दिए गए हैं, आम सहमति यह रही है कि ज्यादातर मामलों में, GIL के फायदे नुकसान से अधिक हैं; कुछ मामलों में जहां GIL अड़चन है, एप्लिकेशन को मल्टीप्रोसेसिंग संरचना के आसपास बनाया जाना चाहिए।
हालाँकि जीआईएल को खत्म करने के लिए कई प्रस्ताव दिए गए हैं, आम सहमति यह रही है कि ज्यादातर मामलों में, जीआईएल के फायदे नुकसान से अधिक हैं; कुछ मामलों में जहां जीआईएल अड़चन है, एप्लिकेशन को मल्टीप्रोसेसिंग संरचना के आसपास बनाया जाना चाहिए।


== इतिहास ==
== इतिहास ==
{{Main articles|History of Python}}
{{Main articles|पायथन का इतिहास}}




=== अनलादेन निगल ===
=== अनलादेन निगल ===
Unladen Swallow CPython की अनुकूलन शाखा थी, जिसका उद्देश्य पूरी तरह से संगत और काफी तेज होना था। इसका उद्देश्य CPython की कस्टम [[आभासी मशीन]] को जस्ट-इन-टाइम संकलन | [[समय-समय पर संकलन]] [[LLVM]] का उपयोग करके बनाया गया है।
Unladen Swallow सीपीथॉन की अनुकूलन शाखा थी, जिसका उद्देश्य पूरी तरह से संगत और काफी तेज होना था। इसका उद्देश्य सीपीथॉन की कस्टम [[आभासी मशीन]] को जस्ट-इन-टाइम संकलन | [[समय-समय पर संकलन]] [[LLVM]] का उपयोग करके बनाया गया है।


परियोजना ने CPython पर पांच के कारक द्वारा गति में सुधार का लक्ष्य बताया था;<ref>{{cite web|last=Paul |first=Ryan |url=https://arstechnica.com/open-source/news/2009/03/google-launches-project-to-boost-python-performance-by-5x.ars |title=Ars Technica report on Unladen Swallow goals |publisher=Arstechnica.com |date=2009-03-26 |access-date=2011-08-19}}</ref> यह लक्ष्य पूरा नहीं हुआ था।<ref name="PEP3146">{{cite web | url=https://www.python.org/dev/peps/pep-3146/ | title=PEP 3146 - Merging Unladen Swallow into CPython | first1=Collin |last1=Winter | last2= Yasskin | first2= Jeffrey | last3= Kleckner | first3= Reid | date=2010-03-17 | publisher=Python.org}}</ref>
परियोजना ने सीपीथॉन पर पांच के कारक द्वारा गति में सुधार का लक्ष्य बताया था;<ref>{{cite web|last=Paul |first=Ryan |url=https://arstechnica.com/open-source/news/2009/03/google-launches-project-to-boost-python-performance-by-5x.ars |title=Ars Technica report on Unladen Swallow goals |publisher=Arstechnica.com |date=2009-03-26 |access-date=2011-08-19}}</ref> यह लक्ष्य पूरा नहीं हुआ था।<ref name="PEP3146">{{cite web | url=https://www.python.org/dev/peps/pep-3146/ | title=PEP 3146 - Merging Unladen Swallow into CPython | first1=Collin |last1=Winter | last2= Yasskin | first2= Jeffrey | last3= Kleckner | first3= Reid | date=2010-03-17 | publisher=Python.org}}</ref>
परियोजना को [[Google]] द्वारा प्रायोजित किया गया था, और परियोजना के मालिक, थॉमस वाउटर्स, जेफरी यास्किन और कॉलिन विंटर, पूर्णकालिक Google कर्मचारी हैं; हालाँकि, अधिकांश परियोजना योगदानकर्ता Google के कर्मचारी नहीं थे।<ref>{{cite web| url=https://code.google.com/p/unladen-swallow/people/list | title=People working on Unladen Swallow| url-status=dead| archive-url=https://web.archive.org/web/20151029092746/https://code.google.com/p/unladen-swallow/people/list |archive-date=2015-10-29 |access-date=2019-08-08}}</ref> Unladen Swallow को [[Google Developers]] पर होस्ट किया गया था।<ref>{{cite web|url=https://code.google.com/p/unladen-swallow/ |title=Unladen Swallow project page |access-date=2011-08-19}}</ref>
परियोजना को [[Google]] द्वारा प्रायोजित किया गया था, और परियोजना के मालिक, थॉमस वाउटर्स, जेफरी यास्किन और कॉलिन विंटर, पूर्णकालिक Google कर्मचारी हैं; हालाँकि, अधिकांश परियोजना योगदानकर्ता Google के कर्मचारी नहीं थे।<ref>{{cite web| url=https://code.google.com/p/unladen-swallow/people/list | title=People working on Unladen Swallow| url-status=dead| archive-url=https://web.archive.org/web/20151029092746/https://code.google.com/p/unladen-swallow/people/list |archive-date=2015-10-29 |access-date=2019-08-08}}</ref> Unladen Swallow को [[Google Developers]] पर होस्ट किया गया था।<ref>{{cite web|url=https://code.google.com/p/unladen-swallow/ |title=Unladen Swallow project page |access-date=2011-08-19}}</ref>
पायथन भाषा के बारे में कई चीजों की तरह, अनलाडेन [[निगलना]] नाम मोंटी पायथन संदर्भ है, विशेष रूप [[[[मोंटी अजगर]] एंड द होली ग्रेल]] में अनलडेन स्वैलोज़ के एयरस्पीड वेग के बारे में मजाक के लिए।
पायथन भाषा के बारे में कई चीजों की तरह, अनलाडेन [[निगलना]] नाम मोंटी पायथन संदर्भ है, विशेष रूप [[[[मोंटी अजगर]] एंड द होली ग्रेल]] में अनलडेन स्वैलोज़ के एयरस्पीड वेग के बारे में मजाक के लिए।
Line 52: Line 52:
हालांकि यह सभी प्रकाशित लक्ष्यों से कम हो गया, अनलाडेन निगल ने कुछ कोड का उत्पादन किया जो मुख्य पायथन कार्यान्वयन में जोड़ा गया, जैसे कि cPickle मॉड्यूल में सुधार।<ref>{{Cite web|url=https://bugs.python.org/issue9410|title=Issue 9410: Add Unladen Swallow's optimizations to Python 3's pickle. - Python tracker|website=bugs.python.org|access-date=2019-08-08}}</ref>
हालांकि यह सभी प्रकाशित लक्ष्यों से कम हो गया, अनलाडेन निगल ने कुछ कोड का उत्पादन किया जो मुख्य पायथन कार्यान्वयन में जोड़ा गया, जैसे कि cPickle मॉड्यूल में सुधार।<ref>{{Cite web|url=https://bugs.python.org/issue9410|title=Issue 9410: Add Unladen Swallow's optimizations to Python 3's pickle. - Python tracker|website=bugs.python.org|access-date=2019-08-08}}</ref>
जुलाई 2010 में, कुछ पर्यवेक्षकों ने अनुमान लगाया कि 2009 की चौथी तिमाही के मील के पत्थर को अभी तक जारी नहीं किया गया था कि क्या परियोजना मर चुकी थी या मर रही थी।<ref>{{cite web|url=http://groups.google.com/group/comp.lang.python/browse_thread/thread/69f85cadb424a1d4/bdf73a28f3f770cb?lnk=gst&q=unladen+swallow#bdf73a28f3f770cb |title=Message on comp.lang.python |access-date=2011-08-19}}</ref> Unladen की मेलिंग सूची पर यातायात जनवरी 2010 में 500 संदेशों से घटकर सितंबर 2010 में 10 से कम हो गया था।<ref>{{cite web|url=http://groups.google.com/group/unladen-swallow/about?hl=en |title=Unladen Swallow &#124; Google Groups |access-date=2011-08-19}}</ref> यह भी बताया गया है कि Unladen ने Google की फंडिंग खो दी है।<ref>{{cite web|url=https://www.reddit.com/r/Python/comments/cilk0/anyone_know_whats_going_on_with_unladen_swallow/c0su1wt |title=reddit post by an Unladen committer |publisher=Reddit.com |date=2010-06-24 |access-date=2011-08-19}}</ref> नवंबर 2010 में, मुख्य डेवलपर्स में से ने घोषणा की कि जेफरी और मुझे Google के लिए उच्च महत्व की अन्य परियोजनाओं पर खींच लिया गया है।<ref>{{cite web | url=http://groups.google.com/group/unladen-swallow/msg/bd4e6f935c23252a | first=Collin | last=Winter | title= Current status of Unladen-Swallow | date=8 November 2010 }}</ref>
जुलाई 2010 में, कुछ पर्यवेक्षकों ने अनुमान लगाया कि 2009 की चौथी तिमाही के मील के पत्थर को अभी तक जारी नहीं किया गया था कि क्या परियोजना मर चुकी थी या मर रही थी।<ref>{{cite web|url=http://groups.google.com/group/comp.lang.python/browse_thread/thread/69f85cadb424a1d4/bdf73a28f3f770cb?lnk=gst&q=unladen+swallow#bdf73a28f3f770cb |title=Message on comp.lang.python |access-date=2011-08-19}}</ref> Unladen की मेलिंग सूची पर यातायात जनवरी 2010 में 500 संदेशों से घटकर सितंबर 2010 में 10 से कम हो गया था।<ref>{{cite web|url=http://groups.google.com/group/unladen-swallow/about?hl=en |title=Unladen Swallow &#124; Google Groups |access-date=2011-08-19}}</ref> यह भी बताया गया है कि Unladen ने Google की फंडिंग खो दी है।<ref>{{cite web|url=https://www.reddit.com/r/Python/comments/cilk0/anyone_know_whats_going_on_with_unladen_swallow/c0su1wt |title=reddit post by an Unladen committer |publisher=Reddit.com |date=2010-06-24 |access-date=2011-08-19}}</ref> नवंबर 2010 में, मुख्य डेवलपर्स में से ने घोषणा की कि जेफरी और मुझे Google के लिए उच्च महत्व की अन्य परियोजनाओं पर खींच लिया गया है।<ref>{{cite web | url=http://groups.google.com/group/unladen-swallow/msg/bd4e6f935c23252a | first=Collin | last=Winter | title= Current status of Unladen-Swallow | date=8 November 2010 }}</ref>
2009 Q4 विकास शाखा 26 जनवरी 2010 को बनाई गई थी,<ref>{{cite web|url=https://code.google.com/p/unladen-swallow/source/detail?spec=svn1164&r=1042 |title=2009 Q4 release branch creation |date=2010-01-26 |access-date=2011-08-19}}</ref> लेकिन वेबसाइट पर कोई विज्ञापन नहीं किया गया था। इसके अलावा, लंबी अवधि की योजनाओं के बारे में, और जैसा कि परियोजना ने पायथन 2.7 रिलीज को याद किया, [[पायथन संवर्द्धन प्रस्ताव]] (पीईपी)<ref name="PEP3146"/>स्वीकार कर लिया गया, जिसने पायथन के आधिकारिक रिपॉजिटरी (संस्करण नियंत्रण) की विशेष py3k-jit शाखा में Unladen Swallow के विलय का प्रस्ताव दिया। जुलाई 2010 तक यह काम चल रहा था।<ref>{{cite web|url=http://groups.google.com/group/unladen-swallow/browse_thread/thread/be3d226079c457b1 |title=Developers focus on merge into py3k-jit |date=2010-07-13 |access-date=2011-08-19}}</ref> इस विलय में कुछ समय लग सकता था, क्योंकि Unladen Swallow मूल रूप से Python 2.6 पर आधारित था<ref>{{cite web|url=https://www.python.org/dev/peps/pep-3146/#rationale-implementation |title=Unladen Swallow baseline |publisher=Python.org |access-date=2011-08-19}}</ref> जिसके साथ Python 3 ने संगतता तोड़ दी (अधिक विवरण के लिए [[Python 3000]] देखें)। हालाँकि, बाद में PEP को वापस ले लिया गया था।
2009 Q4 विकास शाखा 26 जनवरी 2010 को बनाई गई थी,<ref>{{cite web|url=https://code.google.com/p/unladen-swallow/source/detail?spec=svn1164&r=1042 |title=2009 Q4 release branch creation |date=2010-01-26 |access-date=2011-08-19}}</ref> लेकिन वेबसाइट पर कोई विज्ञापन नहीं किया गया था। इसके अलावा, लंबी अवधि की योजनाओं के बारे में, और जैसा कि परियोजना ने पायथन 2.7 रिलीज को याद किया, [[पायथन संवर्द्धन प्रस्ताव]] (पीईपी)<ref name="PEP3146"/>स्वीकार कर लिया गया, जिसने पायथन के आधिकारिक रिपॉजिटरी (संस्करण नियंत्रण) की विशेष py3k-jit शाखा में Unladen Swallow के विलय का प्रस्ताव दिया। जुलाई 2010 तक यह काम चल रहा था।<ref>{{cite web|url=http://groups.google.com/group/unladen-swallow/browse_thread/thread/be3d226079c457b1 |title=Developers focus on merge into py3k-jit |date=2010-07-13 |access-date=2011-08-19}}</ref> इस विलय में कुछ समय लग सकता था, क्योंकि Unladen Swallow मूल रूप से पायथन 2.6 पर आधारित था<ref>{{cite web|url=https://www.python.org/dev/peps/pep-3146/#rationale-implementation |title=Unladen Swallow baseline |publisher=Python.org |access-date=2011-08-19}}</ref> जिसके साथ पायथन 3 ने संगतता तोड़ दी (अधिक विवरण के लिए [[Python 3000|पायथन 3000]] देखें)। हालाँकि, बाद में PEP को वापस ले लिया गया था।


2011 की शुरुआत में, यह स्पष्ट हो गया कि परियोजना को रोक दिया गया था।<ref>{{cite web|url=http://qinsb.blogspot.com/2011/03/unladen-swallow-retrospective.html|title=Unladen Swallow Retrospective | date = 26 March 2011| publisher = QINSB is not a Software Blog (qinsb.blogspot.com)| first = Reid | last = Kleckner}}</ref>
2011 की शुरुआत में, यह स्पष्ट हो गया कि परियोजना को रोक दिया गया था।<ref>{{cite web|url=http://qinsb.blogspot.com/2011/03/unladen-swallow-retrospective.html|title=Unladen Swallow Retrospective | date = 26 March 2011| publisher = QINSB is not a Software Blog (qinsb.blogspot.com)| first = Reid | last = Kleckner}}</ref>
Line 134: Line 134:
* [[Windows NT4]] (unsupported since 2.6)
* [[Windows NT4]] (unsupported since 2.6)
}}
}}
बाहरी पोर्ट जो कि Python Software Foundation के CPython के आधिकारिक संस्करण में एकीकृत नहीं हैं, इसकी मुख्य विकास साइट के लिंक के साथ, अक्सर प्लेटफ़ॉर्म-विशिष्ट कार्यात्मकताओं के लिए अतिरिक्त मॉड्यूल शामिल होते हैं, जैसे PSP के लिए ग्राफिक्स और ध्वनि API और S60 के लिए SMS और कैमरा API। इन बंदरगाहों में शामिल हैं:
बाहरी पोर्ट जो कि पायथन Software Foundation के सीपीथॉन के आधिकारिक संस्करण में एकीकृत नहीं हैं, इसकी मुख्य विकास साइट के लिंक के साथ, अक्सर प्लेटफ़ॉर्म-विशिष्ट कार्यात्मकताओं के लिए अतिरिक्त मॉड्यूल शामिल होते हैं, जैसे PSP के लिए ग्राफिक्स और ध्वनि API और S60 के लिए SMS और कैमरा API। इन बंदरगाहों में शामिल हैं:


{{columns-list|colwidth=30em|
{{columns-list|colwidth=30em|
Line 156: Line 156:
! Distribution version  
! Distribution version  
! Distribution [[End-of-life (product)|end-of-life]]
! Distribution [[End-of-life (product)|end-of-life]]
! colspan="2" | Python version
! colspan="2" | पायथन version
|-
|-
|[[Ubuntu (operating system)|Ubuntu]] 22.04 LTS (Jammy Jellyfish)
|[[Ubuntu (operating system)|Ubuntu]] 22.04 LTS (Jammy Jellyfish)
Line 234: Line 234:
== विकल्प ==
== विकल्प ==


CPython कई उत्पादन-गुणवत्ता वाले पायथन (प्रोग्रामिंग भाषा) #कार्यान्वयनों में से है: Java [[जावा वर्चुअल मशीन]]JVM) के लिए Java (प्रोग्रामिंग भाषा) में लिखा गया [[Jython]], [[PyPy]]#RPython में लिखा गया PyPy और C में अनुवादित, और [[IronPython]], जो सी शार्प (प्रोग्रामिंग लैंग्वेज) में लिखा गया है। [[सामान्य भाषा अवसंरचना]] के लिए सी #। कई प्रयोगात्मक कार्यान्वयन भी हैं।<ref>{{cite book | last = Martelli | first = Alex | author-link = Alex Martelli | title = Python in a Nutshell | publisher = [[O'Reilly Media|O'Reilly]] | year = 2006 | edition = 2nd | isbn = 978-0-596-10046-9 | pages = 5–7 }}</ref>
सीपीथॉन कई उत्पादन-गुणवत्ता वाले पायथन (प्रोग्रामिंग भाषा) #कार्यान्वयनों में से है: Java [[जावा वर्चुअल मशीन]]JVM) के लिए Java (प्रोग्रामिंग भाषा) में लिखा गया [[Jython]], [[PyPy]]#Rपायथन में लिखा गया PyPy और C में अनुवादित, और [[IronPython|Ironपायथन]], जो सी शार्प (प्रोग्रामिंग भाषा) में लिखा गया है। [[सामान्य भाषा अवसंरचना]] के लिए सी #। कई प्रयोगात्मक कार्यान्वयन भी हैं।<ref>{{cite book | last = Martelli | first = Alex | author-link = Alex Martelli | title = Python in a Nutshell | publisher = [[O'Reilly Media|O'Reilly]] | year = 2006 | edition = 2nd | isbn = 978-0-596-10046-9 | pages = 5–7 }}</ref>





Revision as of 15:19, 26 February 2023

CPython
Original author(s)Guido van Rossum
Developer(s)Python core developers and the Python community, supported by the Python Software Foundation
Initial release26 January 1994; 31 years ago (1994-01-26)
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)

सीपीथॉन पायथन (प्रोग्रामिंग भाषा) का संदर्भ कार्यान्वयन है। सी (प्रोग्रामिंग भाषा) और पायथन में लिखा गया, सीपीथॉन, पायथन भाषा का डिफ़ॉल्ट और सबसे व्यापक रूप से उपयोग किया जाने वाला कार्यान्वयन है।

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

डिजाइन

सीपीथॉन की विशेष विशेषता यह है कि यह प्रत्येक सीपीथॉन दुभाषिया प्रक्रिया (कंप्यूटिंग) पर वैश्विक दुभाषिया लॉक (जीआईएल) का उपयोग करता है, जिसका अर्थ है कि ही प्रक्रिया के भीतर, किसी समय में केवल थ्रेड पायथन बाइटकोड को संसाधित कर सकता है।[1] इसका मतलब यह नहीं है कि मल्टीथ्रेडिंग (कंप्यूटर आर्किटेक्चर) का कोई मतलब नहीं है; सबसे आम मल्टीथ्रेडिंग परिदृश्य वह है जहां थ्रेड (कंप्यूटिंग) ज्यादातर बाहरी प्रक्रियाओं के पूरा होने की प्रतीक्षा कर रहे हैं।

यह तब हो सकता है जब कई थ्रेड्स अलग-अलग क्लाइंट्स को सर्विस दे रहे हों। हो सकता है कि थ्रेड क्लाइंट के जवाब का इंतज़ार कर रहा हो, और दूसरा थ्रेड डेटाबेस क्वेरी के निष्पादित होने का इंतज़ार कर रहा हो, जबकि तीसरा थ्रेड वास्तव में पायथन कोड को प्रोसेस कर रहा हो।

हालाँकि, जीआईएल का मतलब यह है कि सीपीथॉन उन प्रक्रियाओं के लिए उपयुक्त नहीं है जो पायथन कोड में सीपीयू-गहन एल्गोरिदम को लागू करते हैं जो संभावित रूप से कई कोर में वितरित किए जा सकते हैं।

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

पायथन कोड की समवर्ती केवल मल्टीटास्किंग ऑपरेटिंग सिस्टम द्वारा प्रबंधित अलग-अलग सीपीथॉन दुभाषिया प्रक्रियाओं के साथ प्राप्त की जा सकती है। यह समानांतर कंप्यूटिंग के बीच संचार को जटिल बनाता है, हालांकि मल्टीप्रोसेसिंग मॉड्यूल इसे कुछ हद तक कम करता है; इसका मतलब यह है कि समवर्ती पायथन-कोड निष्पादन से वास्तव में लाभान्वित होने वाले अनुप्रयोगों को सीमित मात्रा में ओवरहेड (कंप्यूटिंग) के साथ लागू किया जा सकता है।

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

हालाँकि जीआईएल को खत्म करने के लिए कई प्रस्ताव दिए गए हैं, आम सहमति यह रही है कि ज्यादातर मामलों में, जीआईएल के फायदे नुकसान से अधिक हैं; कुछ मामलों में जहां जीआईएल अड़चन है, एप्लिकेशन को मल्टीप्रोसेसिंग संरचना के आसपास बनाया जाना चाहिए।

इतिहास


अनलादेन निगल

Unladen Swallow सीपीथॉन की अनुकूलन शाखा थी, जिसका उद्देश्य पूरी तरह से संगत और काफी तेज होना था। इसका उद्देश्य सीपीथॉन की कस्टम आभासी मशीन को जस्ट-इन-टाइम संकलन | समय-समय पर संकलन LLVM का उपयोग करके बनाया गया है।

परियोजना ने सीपीथॉन पर पांच के कारक द्वारा गति में सुधार का लक्ष्य बताया था;[2] यह लक्ष्य पूरा नहीं हुआ था।[3] परियोजना को Google द्वारा प्रायोजित किया गया था, और परियोजना के मालिक, थॉमस वाउटर्स, जेफरी यास्किन और कॉलिन विंटर, पूर्णकालिक Google कर्मचारी हैं; हालाँकि, अधिकांश परियोजना योगदानकर्ता Google के कर्मचारी नहीं थे।[4] Unladen Swallow को Google Developers पर होस्ट किया गया था।[5] पायथन भाषा के बारे में कई चीजों की तरह, अनलाडेन निगलना नाम मोंटी पायथन संदर्भ है, विशेष रूप [[मोंटी अजगर एंड द होली ग्रेल]] में अनलडेन स्वैलोज़ के एयरस्पीड वेग के बारे में मजाक के लिए।

हालांकि यह सभी प्रकाशित लक्ष्यों से कम हो गया, अनलाडेन निगल ने कुछ कोड का उत्पादन किया जो मुख्य पायथन कार्यान्वयन में जोड़ा गया, जैसे कि cPickle मॉड्यूल में सुधार।[6] जुलाई 2010 में, कुछ पर्यवेक्षकों ने अनुमान लगाया कि 2009 की चौथी तिमाही के मील के पत्थर को अभी तक जारी नहीं किया गया था कि क्या परियोजना मर चुकी थी या मर रही थी।[7] Unladen की मेलिंग सूची पर यातायात जनवरी 2010 में 500 संदेशों से घटकर सितंबर 2010 में 10 से कम हो गया था।[8] यह भी बताया गया है कि Unladen ने Google की फंडिंग खो दी है।[9] नवंबर 2010 में, मुख्य डेवलपर्स में से ने घोषणा की कि जेफरी और मुझे Google के लिए उच्च महत्व की अन्य परियोजनाओं पर खींच लिया गया है।[10] 2009 Q4 विकास शाखा 26 जनवरी 2010 को बनाई गई थी,[11] लेकिन वेबसाइट पर कोई विज्ञापन नहीं किया गया था। इसके अलावा, लंबी अवधि की योजनाओं के बारे में, और जैसा कि परियोजना ने पायथन 2.7 रिलीज को याद किया, पायथन संवर्द्धन प्रस्ताव (पीईपी)[3]स्वीकार कर लिया गया, जिसने पायथन के आधिकारिक रिपॉजिटरी (संस्करण नियंत्रण) की विशेष py3k-jit शाखा में Unladen Swallow के विलय का प्रस्ताव दिया। जुलाई 2010 तक यह काम चल रहा था।[12] इस विलय में कुछ समय लग सकता था, क्योंकि Unladen Swallow मूल रूप से पायथन 2.6 पर आधारित था[13] जिसके साथ पायथन 3 ने संगतता तोड़ दी (अधिक विवरण के लिए पायथन 3000 देखें)। हालाँकि, बाद में PEP को वापस ले लिया गया था।

2011 की शुरुआत में, यह स्पष्ट हो गया कि परियोजना को रोक दिया गया था।[14]


अनलादेन निगल रिलीज इतिहास

  • 2009 Q1[15]
  • 2009 उल्टी[16]
  • 2009 Q3: स्मृति उपयोग कम करें, गति में सुधार करें[17]


वितरण

आधिकारिक तौर पर समर्थित टियर-1 प्लेटफॉर्म खिड़कियाँ, लिनक्स और मैकओएस (और रास्पबेरी पाई ओएस, और निचले स्तर पर s390x के लिए लिनक्स) हैं।

ऐसे और भी प्लेटफ़ॉर्म हैं जिनमें कार्यशील कार्यान्वयन शामिल हैं:[18]

यूनिक्स की तरह
विशेष और एम्बेडेड
अन्य

पीईपी 11[19] पायथन सॉफ्टवेयर फाउंडेशन द्वारा सीपीथॉन में समर्थित नहीं होने वाले प्लेटफार्मों को सूचीबद्ध करता है। इन प्लेटफार्मों को अभी भी बाहरी बंदरगाहों द्वारा समर्थित किया जा सकता है। इन बंदरगाहों में शामिल हैं:

बाहरी पोर्ट जो कि पायथन Software Foundation के सीपीथॉन के आधिकारिक संस्करण में एकीकृत नहीं हैं, इसकी मुख्य विकास साइट के लिंक के साथ, अक्सर प्लेटफ़ॉर्म-विशिष्ट कार्यात्मकताओं के लिए अतिरिक्त मॉड्यूल शामिल होते हैं, जैसे PSP के लिए ग्राफिक्स और ध्वनि API और S60 के लिए SMS और कैमरा API। इन बंदरगाहों में शामिल हैं:


एंटरप्राइज़ लिनक्स

ये पायथन संस्करण वर्तमान में समर्थित एंटरप्राइज़ लिनक्स वितरण के साथ वितरित किए गए हैं।[28] तालिका में पायथन की समर्थन स्थिति का तात्पर्य पायथन कोर टीम से समर्थन से है, न कि वितरण अनुरक्षक से।

Enterprise Linux
Distribution version Distribution end-of-life पायथन version
Ubuntu 22.04 LTS (Jammy Jellyfish) 3.10 [1]
Ubuntu 20.04 LTS (Focal Fossa) 2030-04[29][needs update] [30] Older version, yet still maintained: 3.8[31][needs update]
Ubuntu 18.04 LTS (Bionic Beaver) 2028-04[32] Old version, no longer maintained: 2.7[33] Old version, no longer maintained: 3.6[34]
Ubuntu 16.04 LTS (Xenial Xerus) 2021-04-30[35][needs update] Old version, no longer maintained: 2.7[33] Old version, no longer maintained: 3.5[34]
Debian 11 2026-06[36] Older version, yet still maintained: 3.9[36][needs update]
Debian 10 2024-06[37] Old version, no longer maintained: 2.7[38] Older version, yet still maintained: 3.7[39][needs update]
Debian 9 2022-06-30[40][needs update] Old version, no longer maintained: 2.7[41] Old version, no longer maintained: 3.5[42]
Red Hat Enterprise Linux 8 2029 Old version, no longer maintained: 2.7[43] Old version, no longer maintained: 3.6
Red Hat Enterprise Linux 7 2024-11-30[44] Old version, no longer maintained: 2.7[45]
CentOS 8 2029-05-31 Old version, no longer maintained: 2.7 Old version, no longer maintained: 3.6
CentOS 7 2024-06-30 Old version, no longer maintained: 2.7[46]
SUSE Linux Enterprise Server 15 2031-07-31 Old version, no longer maintained: 2.7[47] Old version, no longer maintained: 3.6
SUSE Linux Enterprise Server 12 2027-10-31 Old version, no longer maintained: 2.7[48]
SUSE Linux Enterprise Server 11 2022-03-31[needs update] Old version, no longer maintained: 2.7[48]
Legend:
Old version
Older version, still maintained
Latest version
Latest preview version
Future release


विकल्प

सीपीथॉन कई उत्पादन-गुणवत्ता वाले पायथन (प्रोग्रामिंग भाषा) #कार्यान्वयनों में से है: Java जावा वर्चुअल मशीनJVM) के लिए Java (प्रोग्रामिंग भाषा) में लिखा गया Jython, PyPy#Rपायथन में लिखा गया PyPy और C में अनुवादित, और Ironपायथन, जो सी शार्प (प्रोग्रामिंग भाषा) में लिखा गया है। सामान्य भाषा अवसंरचना के लिए सी #। कई प्रयोगात्मक कार्यान्वयन भी हैं।[49]


संदर्भ

  1. "Initialization, Finalization, and Threads". Python v3.8.3 documentation. Retrieved 2020-06-04.
  2. Paul, Ryan (2009-03-26). "Ars Technica report on Unladen Swallow goals". Arstechnica.com. Retrieved 2011-08-19.
  3. 3.0 3.1 Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). "PEP 3146 - Merging Unladen Swallow into CPython". Python.org.
  4. "People working on Unladen Swallow". Archived from the original on 2015-10-29. Retrieved 2019-08-08.
  5. "Unladen Swallow project page". Retrieved 2011-08-19.
  6. "Issue 9410: Add Unladen Swallow's optimizations to Python 3's pickle. - Python tracker". bugs.python.org. Retrieved 2019-08-08.
  7. "Message on comp.lang.python". Retrieved 2011-08-19.
  8. "Unladen Swallow | Google Groups". Retrieved 2011-08-19.
  9. "reddit post by an Unladen committer". Reddit.com. 2010-06-24. Retrieved 2011-08-19.
  10. Winter, Collin (8 November 2010). "Current status of Unladen-Swallow".
  11. "2009 Q4 release branch creation". 2010-01-26. Retrieved 2011-08-19.
  12. "Developers focus on merge into py3k-jit". 2010-07-13. Retrieved 2011-08-19.
  13. "Unladen Swallow baseline". Python.org. Retrieved 2011-08-19.
  14. Kleckner, Reid (26 March 2011). "Unladen Swallow Retrospective". QINSB is not a Software Blog (qinsb.blogspot.com).
  15. "Unladen Swallow 2009Q1". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  16. "Unladen Swallow 2009Q2". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  17. "Unladen Swallow 2009Q3". unladen-swallow, A faster implementation of Python. Retrieved 19 October 2012.
  18. "PythonImplementations". Retrieved 19 July 2012.
  19. "PEP 11 -- Removing support for little used platforms". Python.org (in English). Retrieved 2019-08-08.
  20. "Irix still supported?".
  21. AmigaPython
  22. iSeriesPython
  23. PythonD
  24. http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 and 3
  25. Stackless Python for PSP
  26. Python Windows CE port
  27. "Python". VSI. Retrieved 2021-08-31.
  28. https://linuxlifecycle.com
  29. "Ubuntu release cycle". Ubuntu (in English). Retrieved 2021-01-18.
  30. "With Python 2 EOL'ed, Ubuntu 20.04 LTS Moves Along With Its Python 2 Removal - Phoronix". www.phoronix.com. Retrieved 2020-04-01.
  31. "Binary package "python3" in ubuntu focal". Launchpad.net.
  32. "Ubuntu 18.04 extended to 2028". ServerWatch.com. 2018-11-15. Retrieved 2019-09-09.
  33. 33.0 33.1 "python-defaults package : Ubuntu". Canonical Ltd. 2018-06-08. Retrieved 2018-06-08.
  34. 34.0 34.1 "python3-defaults package : Ubuntu". Canonical Ltd. 2018-06-08. Retrieved 2018-06-08.
  35. Science, Carnegie Mellon University School of Computer. "Ubuntu 16.04 - End of Life in 2021 - SCS Computing Facilities - Carnegie Mellon University". computing.cs.cmu.edu (in English). Retrieved 2021-02-15.
  36. 36.0 36.1 "Debian -- News -- Debian 11 "bullseye" released". www.debian.org. Retrieved 2022-01-04.
  37. "LTS - Debian Wiki". wiki.debian.org. Retrieved 2021-02-15.
  38. "Debian -- Details of package python in buster". packages.debian.org. Retrieved 2019-09-13.
  39. "Debian -- News -- Debian 10 "buster" released". www.debian.org. Retrieved 2019-08-09.
  40. "Debian -- News -- Debian 8 Long Term Support reaching end-of-life". www.debian.org. Retrieved 2021-02-15.
  41. "DistroWatch.com: Debian". DistroWatch.com. 2017-10-15. Retrieved 2017-10-15.
  42. "Debian -- Details of package python3 in stretch". Retrieved 2017-12-19.
  43. "Python in RHEL 8". Red Hat Developer Blog (in English). 2018-11-14. Archived from the original on 2019-05-10. Retrieved 2019-05-10.
  44. "Red Hat Enterprise Linux Life Cycle". Red Hat Customer Portal (in English). Retrieved 2020-04-01.
  45. "DistroWatch.com: Red Hat Enterprise Linux". DistroWatch.com. 2017-09-07. Retrieved 2017-10-15.
  46. "DistroWatch.com: CentOS". DistroWatch.com. 2017-09-14. Retrieved 2017-10-15.
  47. "Release Notes | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA". www.suse.com. Retrieved 2019-08-08.
  48. 48.0 48.1 "DistroWatch.com: openSUSE". DistroWatch.com. 2017-10-14. Retrieved 2017-10-15.
  49. Martelli, Alex (2006). Python in a Nutshell (2nd ed.). O'Reilly. pp. 5–7. ISBN 978-0-596-10046-9.


अग्रिम पठन

  • Shaw, Anthony (2021). CPython Internals: Your Guide to the Python 3 Interpreter. Real Python. ISBN 9781775093343.


बाहरी संबंध