साइथन

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

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

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

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

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

इतिहास
साइथन पाइरेक्स (प्रोग्रामिंग लैंग्वेज) का व्युत्पन्न है, और पाइरेक्स की तुलना में अधिक सुविधाओं और अनुकूलन का समर्थन करता है। साइथॉन 2007 में सेजमैथ कंप्यूटर बीजगणित पैकेज के डेवलपर्स द्वारा पाइरेक्स से फोर्क (सॉफ्टवेयर विकास) था, क्योंकि वे पाइरेक्स की सीमाओं से नाखुश थे और पाइरेक्स के अनुरक्षक ग्रेग इविंग द्वारा स्वीकार किए गए पैच नहीं पा सके, जिन्होंने अपने उपकरण की तुलना में बहुत छोटे दायरे की कल्पना की थी। ऋषि डेवलपर्स के मन में था। फिर उन्होंने Pyrex को SageX के रूप में फोर्क किया। जब उन्होंने पाया कि लोग केवल सेजएक्स प्राप्त करने के लिए सेज डाउनलोड कर रहे थे, और अन्य पैकेजों के डेवलपर्स (स्टीफन बेहनेल सहित, जो एक्सएमएल लाइब्रेरी एलएक्सएमएल को बनाए रखते हैं) भी पाइरेक्स के कांटे बनाए रख रहे थे, सेजएक्स को सेज प्रोजेक्ट से अलग कर दिया गया और इसके साथ विलय कर दिया गया।   साइथन बनने के लिए। साइथन फाइलों में एक  विस्तार। अपने सबसे बुनियादी रूप में, साइथन कोड बिल्कुल पायथन कोड जैसा दिखता है। हालाँकि, जबकि मानक पायथन गतिशील टाइपिंग है, साइथन में, प्रकार वैकल्पिक रूप से प्रदान किए जा सकते हैं, जिससे बेहतर प्रदर्शन की अनुमति मिलती है, जहाँ लूप को C लूप में परिवर्तित करने की अनुमति मिलती है। उदाहरण के लिए: <वाक्यविन्यास लैंग = साइथन> डीईएफ़ प्राइम्स (इंट किमीएक्स): # तर्क को इंट में बदल दिया जाएगा या टाइप एरर बढ़ा दिया जाएगा। cdef int n, k, i # ये वेरिएबल C प्रकार के साथ घोषित किए गए हैं। cdef int p [1000] # एक और सी प्रकार परिणाम = [] # एक पायथन प्रकार अगर किमी> 1000: किमी अधिकतम = 1000 के = 0 एन = 2 जबकि कश्मीर 

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


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

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

<वाक्यविन्यास लैंग = अजगर> डीईएफ़ Say_hello : प्रिंट (हैलो वर्ल्ड!) 
 * 1) hello.pyx - पायथन मॉड्यूल, इस कोड को साइथन द्वारा सी में अनुवादित किया जाएगा।

<वाक्यविन्यास लैंग = अजगर>
 * 1) launch.py ​​- पायथन स्टब लोडर, साइथन द्वारा बनाए गए मॉड्यूल को लोड करता है।


 * 1) इस कोड की हमेशा व्याख्या की जाती है, सामान्य पायथन की तरह।
 * 2) यह सी के लिए संकलित नहीं है।

हैलो आयात करें हैलो। 

<वाक्यविन्यास लैंग = अजगर> setuptools आयात सेटअप से साइथन से। आयात साइथनाइज करें
 * 1) setup.py - कोड को पुनर्वितरित नहीं करने पर अनावश्यक, नीचे देखें

सेटअप (नाम = हैलो वर्ल्ड ऐप,     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 गुना सुधार देता है। आधिकारिक क्विकस्टार्ट पेज में विषय पर अधिक जानकारी।

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

साइथन का कार्यक्षेत्र केवल संख्यात्मक कंप्यूटिंग तक ही सीमित नहीं है। उदाहरण के लिए, एलएक्सएमएल एक्सएमएल टूलकिट ज्यादातर साइथन में लिखा गया है, और इसके पूर्ववर्ती पायरेक्स की तरह, साइथन का उपयोग कई सी और सी ++ पुस्तकालयों जैसे मैसेजिंग लाइब्रेरी ज़ीरोएमक्यू के लिए पायथन बाइंडिंग प्रदान करने के लिए किया जाता है। साइथन का उपयोग मल्टी-कोर प्रोसेसर मशीनों के समानांतर प्रोग्राम विकसित करने के लिए भी किया जा सकता है; यह सुविधा OpenMP लाइब्रेरी का उपयोग करती है।
 * मुफ्त सॉफ्टवेयर SageMath कंप्यूटर बीजगणित प्रणाली प्रदर्शन और अन्य पुस्तकालयों के साथ इंटरफेस दोनों के लिए साइथन पर निर्भर करती है।
 * वैज्ञानिक कंप्यूटिंग पुस्तकालयों के महत्वपूर्ण भाग SciPy, पांडा (सॉफ्टवेयर) और scikit-सीखें साइथन में लिखे गए हैं।
 * कुछ उच्च-ट्रैफ़िक वेबसाइट जैसे Quora साइथन का उपयोग करती हैं।

सी भी

 * पीपी
 * नुम्बा