साइथन

From Vigyanwiki
Revision as of 11:06, 18 February 2023 by alpha>Indicwiki (Created page with "{{Distinguish|CPython}} {{Use dmy dates|date=February 2014}} {{short description|Programming language}} {{Infobox programming language | name = Cython | logo = Cython-logo.svg...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cython
File:Cython-logo.svg
DeveloperRobert Bradshaw, Stefan Behnel, et al.
पहली प्रस्तुति28 July 2007; 18 years ago (2007-07-28)[1]
कार्यान्वयन भाषाPython
ओएसWindows, macOS, Linux
लाइसेंसApache License 2.0
फ़ाइल नाम एक्सटेंशनएस.pyx, .pxd, .pxi [2]
Influenced by
C, Python

साइथन (/ˈsθɒn/) एक प्रोग्रामिंग भाषा है, एक (गैर-सख्त, कम से कम पायथन 3 के लिए) पायथन प्रोग्रामिंग भाषा का सुपरसेट (थोड़ा अलग शब्दार्थ के साथ), सी (प्रोग्रामिंग भाषा)-जैसा प्रदर्शन कोड के साथ देने के लिए डिज़ाइन किया गया है जो ज्यादातर पायथन में लिखा गया है वैकल्पिक अतिरिक्त सी-प्रेरित सिंटैक्स के साथ।[3][4] साइथन एक संकलित भाषा है जिसका उपयोग आमतौर पर सीपीथॉन एक्सटेंशन मॉड्यूल उत्पन्न करने के लिए किया जाता है। एनोटेटेड पायथन-जैसे कोड को C (उदाहरण के लिए C ++ से भी प्रयोग करने योग्य) में संकलित किया जाता है, फिर स्वचालित रूप रैपर लाइब्रेरी को लपेटता है, एक्सटेंशन मॉड्यूल का उत्पादन करता है जिसे आयात विवरण का उपयोग करके नियमित पायथन कोड द्वारा लोड और उपयोग किया जा सकता है, लेकिन रन टाइम (प्रोग्राम) पर काफी कम कम्प्यूटेशनल ओवरहेड के साथ जीवनचक्र चरण)। साइथन स्वतंत्र सी या सी ++ कोड को अजगर-आयात योग्य मॉड्यूल में लपेटने की सुविधा भी देता है।

साइथन को पायथन और सी में लिखा गया है और यह माइक्रोसॉफ़्ट विंडोज़, मैकओएस और लिनक्स पर काम करता है, जो सीपीथॉन 2.6, 2.7 और 3.3 और बाद के संस्करणों के साथ संगत सी स्रोत फ़ाइलों का उत्पादन करता है। साइथन स्रोत कोड जो साइथन संकलित करता है (सी तक) पायथन 2 और पायथन 3 सिंटैक्स दोनों का उपयोग कर सकता है, साइथन 0.x में पायथन 2 सिंटैक्स के लिए डिफ़ॉल्ट (और साइथन 3.x में पायथन 3 सिंटैक्स, जो वर्तमान में अल्फा सॉफ्टवेयर है)। डिफ़ॉल्ट को पायथन 3 (या 2) सिंटैक्स में ओवरराइड किया जा सकता है (उदाहरण के लिए स्रोत कोड टिप्पणी में)। चूंकि हाल के संस्करणों में पायथन 3 सिंटैक्स बदल गया है, साइथन नवीनतम जोड़ के साथ अद्यतित नहीं हो सकता है। साइथन के पास अधिकांश सी++ भाषा के लिए सहज समर्थन है और यह लगभग सभी मौजूदा पायथन कोड को संकलित करता है।[5] साइथन 3.0.0 विकास में है।[6]


डिजाइन

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

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

एक साइथन प्रोग्राम जो एक समान एल्गोरिथ्म को संबंधित पायथन प्रोग्राम के रूप में लागू करता है, कम कंप्यूटिंग संसाधनों का उपभोग कर सकता है जैसे कि सीपीथॉन और साइथन निष्पादन मॉडल के बीच अंतर के कारण कोर मेमोरी और प्रोसेसिंग चक्र। एक बुनियादी पायथन प्रोग्राम CPython आभासी मशीन द्वारा लोड और निष्पादित किया जाता है, इसलिए रनटाइम और प्रोग्राम दोनों ही कंप्यूटिंग संसाधनों का उपभोग करते हैं। एक साइथन प्रोग्राम को C कोड में संकलित किया जाता है, जिसे आगे मशीन कोड में संकलित किया जाता है, इसलिए प्रोग्राम लोड होने पर वर्चुअल मशीन का उपयोग केवल संक्षिप्त रूप से किया जाता है।[8][9][10][11] साइथन कार्यरत हैं:

  • आशावादी अनुकूलन
  • अनुमान टाइप करें (वैकल्पिक)
  • नियंत्रण संरचनाओं में कम ओवरहेड
  • लो फंक्शन कॉल ओवरहेड[12][13]

प्रदर्शन दोनों पर निर्भर करता है कि साइथन द्वारा सी कोड क्या उत्पन्न होता है और सी कंपाइलर द्वारा उस कोड को कैसे संकलित किया जाता है।[14]


इतिहास

साइथन पाइरेक्स (प्रोग्रामिंग लैंग्वेज) का व्युत्पन्न है, और पाइरेक्स की तुलना में अधिक सुविधाओं और अनुकूलन का समर्थन करता है।[15][16] साइथॉन 2007 में सेजमैथ कंप्यूटर बीजगणित पैकेज के डेवलपर्स द्वारा पाइरेक्स से फोर्क (सॉफ्टवेयर विकास) था, क्योंकि वे पाइरेक्स की सीमाओं से नाखुश थे और पाइरेक्स के अनुरक्षक ग्रेग इविंग द्वारा स्वीकार किए गए पैच नहीं पा सके, जिन्होंने अपने उपकरण की तुलना में बहुत छोटे दायरे की कल्पना की थी। ऋषि डेवलपर्स के मन में था। फिर उन्होंने Pyrex को SageX के रूप में फोर्क किया। जब उन्होंने पाया कि लोग केवल सेजएक्स प्राप्त करने के लिए सेज डाउनलोड कर रहे थे, और अन्य पैकेजों के डेवलपर्स (स्टीफन बेहनेल सहित, जो एक्सएमएल लाइब्रेरी एलएक्सएमएल को बनाए रखते हैं) भी पाइरेक्स के कांटे बनाए रख रहे थे, सेजएक्स को सेज प्रोजेक्ट से अलग कर दिया गया और इसके साथ विलय कर दिया गया। cython-lxml साइथन बनने के लिए।[17] साइथन फाइलों में एक .pyx विस्तार। अपने सबसे बुनियादी रूप में, साइथन कोड बिल्कुल पायथन कोड जैसा दिखता है। हालाँकि, जबकि मानक पायथन गतिशील टाइपिंग है, साइथन में, प्रकार वैकल्पिक रूप से प्रदान किए जा सकते हैं, जिससे बेहतर प्रदर्शन की अनुमति मिलती है, जहाँ लूप को C लूप में परिवर्तित करने की अनुमति मिलती है। उदाहरण के लिए: <वाक्यविन्यास लैंग = साइथन> डीईएफ़ प्राइम्स (इंट किमीएक्स): # तर्क को इंट में बदल दिया जाएगा या टाइप एरर बढ़ा दिया जाएगा।

   cdef int n, k, i # ये वेरिएबल C प्रकार के साथ घोषित किए गए हैं।
   cdef int p [1000] # एक और सी प्रकार
   परिणाम = [] # एक पायथन प्रकार
   अगर किमी> 1000:
       किमी अधिकतम = 1000
   के = 0
   एन = 2
   जबकि कश्मीर <kmax:
       मैं = 0
       जबकि मैं <के और एन% पी [i]! = 0:
           मैं = मैं + 1
       अगर मैं == के:
           पी [के] = एन
           के = के + 1
           परिणाम.परिशिष्ट (एन)
       एन = एन + 1
   वापसी परिणाम

</वाक्यविन्यास हाइलाइट>

उदाहरण

साइथन में हैलो वर्ल्ड

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

  • setup.py फ़ाइल का आह्वान करने के लिए setuptools निर्माण प्रक्रिया जो एक्सटेंशन मॉड्यूल उत्पन्न करती है
  • एक्सटेंशन मॉड्यूल को लोड करने के लिए एक मुख्य पायथन प्रोग्राम
  • साइथन स्रोत फ़ाइल (फ़ाइलें)

निम्नलिखित कोड सूचियाँ निर्माण और लॉन्च प्रक्रिया को प्रदर्शित करती हैं:

<वाक्यविन्यास लैंग = अजगर>

  1. hello.pyx - पायथन मॉड्यूल, इस कोड को साइथन द्वारा सी में अनुवादित किया जाएगा।

डीईएफ़ Say_hello ():

   प्रिंट (हैलो वर्ल्ड!)

</वाक्यविन्यास हाइलाइट>

<वाक्यविन्यास लैंग = अजगर>

  1. launch.py ​​- पायथन स्टब लोडर, साइथन द्वारा बनाए गए मॉड्यूल को लोड करता है।
  1. इस कोड की हमेशा व्याख्या की जाती है, सामान्य पायथन की तरह।
  2. यह सी के लिए संकलित नहीं है।

हैलो आयात करें हैलो। </वाक्यविन्यास हाइलाइट>

<वाक्यविन्यास लैंग = अजगर>

  1. setup.py - कोड को पुनर्वितरित नहीं करने पर अनावश्यक, नीचे देखें

setuptools आयात सेटअप से साइथन से। आयात साइथनाइज करें

सेटअप (नाम = हैलो वर्ल्ड ऐप,

     ext_modules = साइथोनाइज़ (* .pyx))

</वाक्यविन्यास हाइलाइट>

ये आदेश प्रोग्राम का निर्माण और लॉन्च करते हैं:

<वाक्यविन्यास लैंग = बैश> $ अजगर setup.py build_ext --inplace $ पायथन लॉन्च.py </वाक्यविन्यास हाइलाइट>

IPython/Jupyter नोटबुक में प्रयोग करना

साइथन के साथ शुरू करने का एक अधिक सरल तरीका कमांड-लाइन आईपीथॉन (या इन-ब्राउज़र पायथन कंसोल के माध्यम से ज्यूपिटर नोटबुक इंटरफ़ेस कहा जाता है) के माध्यम से है:

<वाक्यविन्यास लैंग = साइथन> [1] में: %load_ext साइथन

[2] में: %% साइथन

  ...: डीईएफ़ एफ (एन):
  ...: ए = 0
  ...: मैं सीमा में (एन) के लिए:
  ...: ए + = मैं
  ...: रिटर्न ए
  ...:
  ...: सीपीडीएफ जी (इंट एन):
  ...: सीडीएफ लांग ए = 0
  ...: सीडीएफ इंट आई
  ...: मैं सीमा में (एन) के लिए:
  ...: ए + = मैं
  ...: रिटर्न ए
  ...:

[3] में: %timeit f(1000000) 10 लूप, सर्वश्रेष्ठ 3: 26.5 एमएस प्रति लूप

[4] में: %timeit g(1000000) 1000 लूप, सर्वश्रेष्ठ 3: 279 µ प्रति लूप </वाक्यविन्यास हाइलाइट>

जो शुद्ध-अजगर संस्करण पर 95 गुना सुधार देता है। आधिकारिक क्विकस्टार्ट पेज में विषय पर अधिक जानकारी।[18]


उपयोग

पायथन के वैज्ञानिक उपयोगकर्ताओं के बीच साइथन विशेष रूप से लोकप्रिय है,[10][19][20] जहां इसके पास पायथन निर्माता गुइडो वैन रोसुम के अनुसार सही दर्शक हैं।[21] विशेष ध्यान दें:

  • मुफ्त सॉफ्टवेयर SageMath कंप्यूटर बीजगणित प्रणाली प्रदर्शन और अन्य पुस्तकालयों के साथ इंटरफेस दोनों के लिए साइथन पर निर्भर करती है।[22]
  • वैज्ञानिक कंप्यूटिंग पुस्तकालयों के महत्वपूर्ण भाग SciPy, पांडा (सॉफ्टवेयर) और scikit-सीखें साइथन में लिखे गए हैं।[23][24]
  • कुछ उच्च-ट्रैफ़िक वेबसाइट जैसे Quora साइथन का उपयोग करती हैं।[better source needed][25]

साइथन का कार्यक्षेत्र केवल संख्यात्मक कंप्यूटिंग तक ही सीमित नहीं है। उदाहरण के लिए, एलएक्सएमएल एक्सएमएल टूलकिट ज्यादातर साइथन में लिखा गया है, और इसके पूर्ववर्ती पायरेक्स की तरह, साइथन का उपयोग कई सी और सी ++ पुस्तकालयों जैसे मैसेजिंग लाइब्रेरी ज़ीरोएमक्यू के लिए पायथन बाइंडिंग प्रदान करने के लिए किया जाता है।[26] साइथन का उपयोग मल्टी-कोर प्रोसेसर मशीनों के समानांतर प्रोग्राम विकसित करने के लिए भी किया जा सकता है; यह सुविधा OpenMP लाइब्रेरी का उपयोग करती है।

सी भी

संदर्भ

  1. Behnel, Stefan (2008). "The Cython Compiler for C-Extensions in Python". EuroPython (28 July 2007: official Cython launch). Vilnius/Lietuva.
  2. "Language Basics — Cython 3.0.0a9 documentation". cython.readthedocs.io. Retrieved 9 September 2021.
  3. "Cython - an overview — Cython 0.19.1 documentation". Docs.cython.org. Retrieved 21 July 2013.
  4. Smith, Kurt (2015). Cython: A Guide for Python Programmers. O'Reilly Media. ISBN 978-1-4919-0155-7.
  5. "FAQ · cython/cython Wiki". GitHub (in English). Retrieved 11 January 2023.
  6. "3.0 Milestone · cython/cython". GitHub (in English). Retrieved 26 March 2022.
  7. "Basic Tutorial — Cython 3.0a6 documentation". cython.readthedocs.io. Retrieved 11 December 2020.
  8. Oliphant, Travis (20 June 2011). "Technical Discovery: Speeding up Python (NumPy, Cython, and Weave)". Technicaldiscovery.blogspot.com. Retrieved 21 July 2013.
  9. Behnel, Stefan; Bradshaw, Robert; Citro, Craig; Dalcin, Lisandro; Seljebotn, Dag Sverre; Smith, Kurt (2011). "Cython: The Best of Both Worlds". Computing in Science and Engineering. 13 (2): 31–39. Bibcode:2011CSE....13b..31B. doi:10.1109/MCSE.2010.118. S2CID 14292107.
  10. 10.0 10.1 Seljebot, Dag Sverre (2009). "Fast numerical computations with Cython". Proceedings of the 8th Python in Science Conference (SciPy 2009): 15–22.
  11. Wilbers, I.; Langtangen, H. P.; Ødegård, Å. (2009). B. Skallerud; H. I. Andersson (eds.). "Using Cython to Speed up Numerical Python Programs" (PDF). Proceedings of MekIT'09: 495–512. Retrieved 14 June 2011.
  12. "wrapper benchmarks for several Python wrapper generators (except Cython)". Archived from the original on 4 April 2015. Retrieved 28 May 2010.
  13. "wrapper benchmarks for Cython, Boost.Python and PyBindGen". Archived from the original on 3 March 2016. Retrieved 28 May 2010.
  14. "Cython: C-Extensions for Python". Retrieved 22 November 2015.
  15. "Differences between Cython and Pyrex".
  16. Ewing, Greg (21 March 2011). "Re: VM and Language summit info for those not at Pycon (and those that are!)" (Message to the electronic mailing-list python-dev). Retrieved 5 May 2011.
  17. Says Sage and Cython developer Robert Bradshaw at the Sage Days 29 conference (22 March 2011). "Cython: Past, Present and Future". youtube.com. Archived from the original on 21 December 2021. Retrieved 5 May 2011.
  18. "Building Cython code". cython.readthedocs.io. Retrieved 24 April 2017.
  19. "inSCIght: The Scientific Computing Podcast" (Episode 6). Archived from the original on 10 October 2014. Retrieved 29 May 2011.
  20. Millman, Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE....13b...9M. doi:10.1109/MCSE.2011.36.
  21. Guido Van Rossum (21 March 2011). "Re: VM and Language summit info for those not at Pycon (and those that are!)" (Message to the electronic mailing-list python-dev). Retrieved 5 May 2011.
  22. Erocal, Burcin; Stein, William (2010). The Sage Project: Unifying Free Mathematical Software to Create a Viable Alternative to Magma, Maple, Mathematica and MATLAB (PDF). pp. 12–27. CiteSeerX 10.1.1.172.624. doi:10.1007/978-3-642-15582-6_4. ISBN 978-3-642-15581-9. {{cite book}}: |journal= ignored (help)
  23. "SciPy 0.7.2 release notes".
  24. Pedregosa, Fabian; Varoquaux, Gaël; Gramfort, Alexandre; Michel, Vincent; Thirion, Bertrand; Grisel, Olivier; Blondel, Mathieu; Prettenhofer, Peter; Weiss, Ron; Dubourg, Vincent; Vanderplas, Jake; Passos, Alexandre; Cournapeau, David (2011). "Scikit-learn: Machine Learning in Python". Journal of Machine Learning Research. 12: 2825–2830. arXiv:1201.0490.
  25. "Is Quora still running on PyPy?".
  26. "ØMQ: Python binding".


बाहरी संबंध

  • No URL found. Please specify a URL here or add one to Wikidata.
  • Cython on GitHub