साइथन
File:Cython-logo.svg | |
Developer | रॉबर्ट ब्रैडशॉ, स्टीफन बेहनेल, एट अल। |
---|---|
पहली प्रस्तुति | 28 July 2007[1] |
कार्यान्वयन भाषा | पायथन |
ओएस | विंडोज, मैकओएस, लिनक्स |
लाइसेंस | अपाचे लाइसेंस 2.0 |
फ़ाइल नाम एक्सटेंशनएस | .pyx, .pxd, .pxi [2] |
Influenced by | |
सी, पायथन |
साइथन (/ˈsaɪθɒ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]
डिजाइन
साइथन एक मानक पायथन मॉड्यूल का निर्माण करके कार्य करता है। हालाँकि, व्यवहार मानक पायथन से भिन्न होता है जिसमें मूल रूप से पायथन में लिखे गए मॉड्यूल कोड का सी में अनुवाद किया जाता है। जबकि परिणामी कोड तेज़ होता है, यह वास्तविक कार्य करने के लिए सी-पायथन दुभाषिया और सी-पायथन मानक लाइब्रेरियों में कई कॉल करता है। इस व्यवस्था को चुनने से साइथन के विकास के समय में काफी बचत हुई, लेकिन मॉड्यूल की निर्भरता पायथन दुभाषिया और मानक लाइब्रेरी पर है।
हालांकि अधिकांश कोड सी-आधारित है, व्याख्या किए गए पायथन में लिखे गए एक छोटे स्टब लोडर की सामान्यतः आवश्यकता होती है (जब तक कि लक्ष्य पूरी तरह से सी में लिखे गए लोडर को बनाने के लिए नहीं है, जिसमें सीपीथॉन के अनियंत्रित इंटर्नल के साथ कार्य सम्मिलित हो सकता है)। हालाँकि, पायथन दुभाषिया की उपस्थिति के कारण यह कोई बड़ी समस्या नहीं है।[7]
सी (प्रोग्रामिंग लैंग्वेज)/सी++ सबरूटीन को इनवोक करने के लिए साइथन के पास एक विदेशी फ़ंक्शन इंटरफ़ेस है और स्थिर प्रकार के सबरूटीन पैरामीटर और परिणाम, स्थानीय चर और वर्ग विशेषताओं को घोषित करने की क्षमता है।
एक साइथन प्रोग्राम जो एक समान एल्गोरिथ्म को संबंधित पायथन प्रोग्राम के रूप में लागू करता है, कम कंप्यूटिंग संसाधनों का उपभोग कर सकता है जैसे कि सीपीथॉन और साइथन निष्पादन मॉडल के बीच अंतर के कारण कोर मेमोरी और प्रोसेसिंग चक्र एक बुनियादी पायथन प्रोग्राम सी-पायथन आभासी मशीन द्वारा लोड और निष्पादित किया जाता है, इसलिए रनटाइम और प्रोग्राम दोनों ही कंप्यूटिंग संसाधनों का उपभोग करते हैं। एक साइथन प्रोग्राम को C कोड में संकलित किया जाता है, जिसे आगे मशीन कोड में संकलित किया जाता है, इसलिए प्रोग्राम लोड होने पर वर्चुअल मशीन का उपयोग केवल संक्षिप्त रूप से किया जाता है।[8][9][10][11] साइथन कार्यरत हैं:
- आशावादी अनुकूलन
- अनुमानित कोड (वैकल्पिक)
- नियंत्रण संरचनाओं में कम ओवरहेड
- लो फंक्शन कॉल ओवरहेड[12][13]
डिस्प्ले दोनों पर निर्भर करता है कि साइथन द्वारा सी कोड क्या उत्पन्न होता है और सी कंपाइलर द्वारा उस कोड को कैसे संकलित किया जाता है।[14]
इतिहास
साइथन पाइरेक्स (प्रोग्रामिंग लैंग्वेज) का व्युत्पन्न है, और पाइरेक्स की तुलना में अधिक सुविधाओं और अनुकूलन का समर्थन करता है।[15][16] साइथॉन 2007 में सेजमैथ कंप्यूटर बीजगणित पैकेज के डेवलपर्स द्वारा पाइरेक्स से फोर्क (सॉफ्टवेयर विकास) था, क्योंकि वे पाइरेक्स की सीमाओं से नाखुश थे और पाइरेक्स के अनुरक्षक ग्रेग इविंग द्वारा स्वीकार किए गए पैच नहीं पा सके, जिन्होंने अपने उपकरण की तुलना में बहुत छोटे दायरे की कल्पना की थी। ऋषि डेवलपर्स के मन में था। फिर उन्होंने पाइरेक्स को सेजएक्स के रूप में फोर्क किया। जब उन्होंने पाया कि लोग केवल सेजएक्स प्राप्त करने के लिए सेज डाउनलोड कर रहे थे, और अन्य पैकेजों के डेवलपर्स (स्टीफन बेहनेल सहित, जो एक्सएमएल लाइब्रेरी एलएक्सएमएल को बनाए रखते हैं) भी पाइरेक्स के सोर्स बनाए रख रहे थे, सेजएक्स को सेज प्रोजेक्ट से अलग कर दिया गया और इसके साथ विलय कर दिया गया। साइथन-एलएक्सएमएल
साइथन बनने के लिए[17]
साइथन फाइलों में एक .pyx
विस्तार अपने सबसे बुनियादी रूप में, साइथन कोड बिल्कुल पायथन कोड जैसा दिखता है। हालाँकि, जबकि मानक पायथन गतिशील टाइपिंग है, साइथन में, प्रकार वैकल्पिक रूप से प्रदान किए जा सकते हैं, जिससे बेहतर डिस्प्ले की अनुमति मिलती है, जहाँ लूप को C लूप में परिवर्तित करने की अनुमति मिलती है। उदाहरण के लिए:
def primes(int kmax): # The argument will be converted to int or raise a TypeError.
cdef int n, k, i # These variables are declared with C types.
cdef int p[1000] # Another C type
result = [] # A Python type
if kmax > 1000:
kmax = 1000
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
उदाहरण
साइथन के लिए एक नमूना हैलो वर्ल्ड प्रोग्राम अधिकांश भाषाओं की तुलना में अधिक जटिल है क्योंकि यह पायथन सी एपीआई और के साथ इंटरफेस करता है सेटअप टूल्स
या अन्य पीईपी517-अनुपालन विस्तार निर्माण सुविधाएं बुनियादी परियोजना के लिए कम से कम तीन फाइलों की आवश्यकता होती है:
- ए
setup.py
फ़ाइल का आह्वान करने के लिएसेटअप टूल्स
निर्माण प्रक्रिया जो एक्सटेंशन मॉड्यूल उत्पन्न करती है - एक्सटेंशन मॉड्यूल को लोड करने के लिए एक मुख्य पायथन प्रोग्राम
- साइथन स्रोत फ़ाइल (फ़ाइलें)
निम्नलिखित कोड सूचियाँ निर्माण और लॉन्च प्रक्रिया को प्रदर्शित करती हैं:
# hello.pyx - Python module, this code will be translated to C by Cython.
def say_hello():
print("Hello World!")
# launch.py - Python stub loader, loads the module that was made by Cython.
# This code is always interpreted, like normal Python.
# It is not compiled to C.
import hello
hello.say_hello()
# setup.py - unnecessary if not redistributing the code, see below
from setuptools import setup
from Cython.Build import cythonize
setup(name = "Hello world app",
ext_modules = cythonize("*.pyx"))
ये आदेश प्रोग्राम का निर्माण और लॉन्च करते हैं:
$ python setup.py build_ext --inplace
$ python launch.py
आई-पायथन/जूपिटर नोटबुक में प्रयोग करना
साइथन के साथ शुरू करने का एक अधिक सरल तरीका कमांड-लाइन आईपीथॉन (या इन-ब्राउज़र पायथन कंसोल के माध्यम से ज्यूपिटर नोटबुक इंटरफ़ेस कहा जाता है) के माध्यम से है:
In [1]: %load_ext Cython
In [2]: %%cython
...: def f(n):
...: a = 0
...: for i in range(n):
...: a += i
...: return a
...:
...: cpdef g(int n):
...: cdef long a = 0
...: cdef int i
...: for i in range(n):
...: a += i
...: return a
...:
In [3]: %timeit f(1000000)
10 loops, best of 3: 26.5 ms per loop
In [4]: %timeit g(1000000)
1000 loops, best of 3: 279 µs per loop
जो शुद्ध-पायथन संस्करण पर 95 गुना सुधार देता है। आधिकारिक क्विकस्टार्ट पेज में विषय पर अधिक जानकारी।[18]
उपयोग
पायथन के वैज्ञानिक उपयोगकर्ताओं के बीच साइथन विशेष रूप से लोकप्रिय है,[10][19][20] जहां इसके पास पायथन निर्माता गुइडो वैन रोसुम के अनुसार सही दर्शक हैं।[21] विशेष ध्यान दें:
- मुफ्त सॉफ्टवेयर सेजमैथ कंप्यूटर बीजगणित प्रणाली डिस्प्ले और अन्य लाइब्रेरियों के साथ इंटरफेस दोनों के लिए साइथन पर निर्भर करती है।[22]
- वैज्ञानिक कंप्यूटिंग लाइब्रेरियों के महत्वपूर्ण भाग SciPy, पांडा (सॉफ्टवेयर) और एससीआईकिट-सीखें साइथन में लिखे गए हैं।[23][24]
- कुछ उच्च-ट्रैफ़िक वेबसाइट जैसे क्वोरा साइथन का उपयोग करती हैं।[better source needed][25]
साइथन का कार्यक्षेत्र केवल संख्यात्मक कंप्यूटिंग तक ही सीमित नहीं है। उदाहरण के लिए, एलएक्सएमएल एक्सएमएल टूलकिट ज्यादातर साइथन में लिखा गया है, और इसके पूर्ववर्ती पायरेक्स की तरह, साइथन का उपयोग कई सी और सी ++ लाइब्रेरियों जैसे मैसेजिंग लाइब्रेरी ज़ीरोएमक्यू के लिए पायथन बाइंडिंग प्रदान करने के लिए किया जाता है।[26] साइथन का उपयोग मल्टी-कोर प्रोसेसर मशीनों के समानांतर प्रोग्राम विकसित करने के लिए भी किया जा सकता है; यह सुविधा ओपन एमपी लाइब्रेरी का उपयोग करती है।
सी भी
संदर्भ
- ↑ Behnel, Stefan (2008). "The Cython Compiler for C-Extensions in Python". EuroPython (28 July 2007: official Cython launch). Vilnius/Lietuva.
- ↑ "Language Basics — Cython 3.0.0a9 documentation". cython.readthedocs.io. Retrieved 9 September 2021.
- ↑ "Cython - an overview — Cython 0.19.1 documentation". Docs.cython.org. Retrieved 21 July 2013.
- ↑ Smith, Kurt (2015). Cython: A Guide for Python Programmers. O'Reilly Media. ISBN 978-1-4919-0155-7.
- ↑ "FAQ · cython/cython Wiki". GitHub (in English). Retrieved 11 January 2023.
- ↑ "3.0 Milestone · cython/cython". GitHub (in English). Retrieved 26 March 2022.
- ↑ "Basic Tutorial — Cython 3.0a6 documentation". cython.readthedocs.io. Retrieved 11 December 2020.
- ↑ Oliphant, Travis (20 June 2011). "Technical Discovery: Speeding up Python (NumPy, Cython, and Weave)". Technicaldiscovery.blogspot.com. Retrieved 21 July 2013.
- ↑ 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.0 10.1 Seljebot, Dag Sverre (2009). "Fast numerical computations with Cython". Proceedings of the 8th Python in Science Conference (SciPy 2009): 15–22.
- ↑ 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.
- ↑ "wrapper benchmarks for several Python wrapper generators (except Cython)". Archived from the original on 4 April 2015. Retrieved 28 May 2010.
- ↑ "wrapper benchmarks for Cython, Boost.Python and PyBindGen". Archived from the original on 3 March 2016. Retrieved 28 May 2010.
- ↑ "Cython: C-Extensions for Python". Retrieved 22 November 2015.
- ↑ "Differences between Cython and Pyrex".
- ↑ 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. - ↑ 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.
- ↑ "Building Cython code". cython.readthedocs.io. Retrieved 24 April 2017.
- ↑ "inSCIght: The Scientific Computing Podcast" (Episode 6). Archived from the original on 10 October 2014. Retrieved 29 May 2011.
- ↑ 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.
- ↑ 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. - ↑ 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) - ↑ "SciPy 0.7.2 release notes".
- ↑ 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.
- ↑ "Is Quora still running on PyPy?".
- ↑ "ØMQ: Python binding".