StaDyn (programming language)
स्टैडिन. नेट प्लेटफॉर्म के लिए एक ऑब्जेक्ट-ओरिएंटेड सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा है जो एक ही प्रोग्रामिंग भाषा में स्थिर और गतिशील टाइपिंग दोनों का समर्थन करती है। स्टैडिन संकलक गतिशील रूप से टाइप किए गए कोड के लिए प्रकार की जानकारी एकत्र करता है। उस प्रकार की जानकारी का उपयोग संकलन समय पर प्रकार त्रुटियों का पता लगाने और महत्वपूर्ण अनुकूलन करने के लिए किया जाता है। उस उद्देश्य के लिए, यह प्रकार पुनर्निर्माण (अनुमान), प्रवाह-संवेदनशील प्रकार, संघ और प्रतिच्छेदन प्रकार, बाधा-आधारित टाइपिंग, उर्फ विश्लेषण और विधि विशेषज्ञता प्रदान करता है। इसका पहला प्रोटोटाइप 2007 में सी #3 के संशोधन के रूप में दिखाई दिया। प्रकार अनुमान को सी #के विपरीत एक नए प्रकार के रूप में वार को शामिल करके समर्थित किया गया था, जो केवल प्रारंभिक स्थानीय चर को परिभाषित करने के लिए वार प्रदान करता है। प्रवाह-संवेदनशील प्रकार के वार संदर्भों का अनुमान संकलक द्वारा लगाया जाता है, जो प्रकार-सुरक्षित बतख टाइपिंग प्रदान करता है। जब प्रोग्रामर द्वारा अधिक उदार दृष्टिकोण की आवश्यकता होती है, तो वार के बजाय डायनेमिकटाइप का उपयोग किया जा सकता है। यद्यपि प्रकार अनुमान अभी भी किया जाता है, गतिशील संदर्भ गतिशील भाषाओं में उन लोगों के करीब व्यवहार करते हैं। स्टैडिन को ओविडो विश्वविद्यालय के फ्रांसिस्को ऑर्टिन द्वारा डिजाइन किया गया है। भाषा को कम्प्यूटेशनल रिफ्लेक्शन रिसर्च ग्रुप के विभिन्न सदस्यों द्वारा लागू किया गया है, जिसमें फ्रांसिस्को ऑर्टिन के अलावा मिगुएल गार्सिया, जोस बाल्टासर गार्सिया पेरेज़-स्कोफील्ड और जोस क्विरोगा शामिल हैं। स्टैडिन नाम स्थिर और गतिशील दोनों का एक संयोजन है, जो स्थिर और गतिशील टाइपिंग दोनों के लाभ प्रदान करने के अपने उद्देश्य को दर्शाता है। विभिन्न प्रकार के कोड नमूने चर गतिशील भाषाओं की तरह, चर एक ही दायरे में विभिन्न प्रकार के हो सकते हैंः प्रणाली का उपयोग करना; वर्ग कार्यक्रम {सार्वजनिक स्थैतिक शून्य मुख्य () {Console.Write ("संख्याः"); वार आयु = Console.In.ReadLine (); Console.WriteLine ("अंकः + age.Length); आयु = Convert.ToInt32 (आयु); आयु + +; Console.WriteLine (" जन्मदिन मुबारक हो, आप "+ आयु +" हैं। "); पूर्णांक लंबाई = age.Length;// * संकलक त्रुटि} आयु चर को पहले स्ट्रिंग के रूप में अनुमानित किया जाता है, इसलिए इसकी लंबाई गुण प्राप्त करना सुरक्षित है। फिर, यह एक पूर्णांक रखता है, इसलिए आयु + + एक वैध अभिव्यक्ति है। संकलक अंतिम पंक्ति में एक त्रुटि का पता लगाता है, क्योंकि लंबाई अब उम्र द्वारा प्रदान नहीं की जाती है। उत्पन्न कोड आयु का प्रतिनिधित्व करने के लिए एक एकल ऑब्जेक्ट चर का उपयोग नहीं करता है, लेकिन दो अलग-अलग चर जिनके प्रकार स्ट्रिंग और इंट हैं। यह एसएसए फॉर्म की गणना करने के लिए एल्गोरिथ्म के संशोधन के साथ प्राप्त किया जाता है। यह उत्पन्न कोड को अधिक कुशल बनाता है, क्योंकि रनटाइम प्रकार रूपांतरण की आवश्यकता नहीं होती है। प्रवाह-संवेदनशील प्रकार वार और गतिशील चर प्रवाह-संवेदनशील प्रकारों को धारण कर सकते हैंः प्रणाली का उपयोग करना; वर्ग कार्यक्रम {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] आर्ग) {वार अपवाद; यदि (args.Length> 0) अपवाद = नया अनुप्रयोग अपवाद ("एक अनुप्रयोग अपवाद")। "); अन्यथा अपवाद = नया सिस्टम अपवाद (" एक सिस्टम अपवाद। "); Console.WriteLine (exception.Message);}} संदेश संपत्ति को अपवाद से प्राप्त करना सुरक्षित है क्योंकि एप्लिकेशन-एक्सेप्शन और सिस्टम-एक्सेप्शन दोनों ही उस संपत्ति को प्रदान करते हैं। अन्यथा, संकलक त्रुटि दिखाई देती है। इस तरह, स्टैडाइन एक प्रकार-सुरक्षित स्थिर बतख-टाइपिंग प्रणाली प्रदान करता है। निम्नलिखित कार्यक्रम मेंः सिस्टम का उपयोग करना; वर्ग कार्यक्रम {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] आर्ग) {वार अपवाद; स्विच (args.Length) {मामला 0: अपवाद = नया अनुप्रयोग अपवाद ("एक अनुप्रयोग अपवाद। "); विराम; मामला 1: अपवाद = नया सिस्टम अपवाद (" एक सिस्टम अपवाद। "); विराम; डिफ़ॉल्टः अपवाद =" यह कोई अपवाद नहीं है। "; ब्रेक;} Console.WriteLine (exception.Message);// * वार के साथ संकलक त्रुटि, लेकिन गतिशील Console.WriteLine (exception.Unknown) के साथ नहीं;// * संकलक त्रुटि} संदेश गुण स्ट्रिंग द्वारा प्रदान नहीं किया गया है, इसलिए exception.Message के लिए एक संकलक त्रुटि दिखाई गई है। हालाँकि, यदि हम अपवाद को गतिशील घोषित करते हैं, तो पिछले प्रोग्राम को संकलक द्वारा स्वीकार किया जाता है। गतिशील भाषाओं के स्वाद के बाद, गतिशील वार की तुलना में अधिक उदार है। हालांकि, स्थिर प्रकार की जाँच अभी भी की जाती है। यह कोड की अंतिम पंक्ति में दिखाया गया है, जहां संकलक exception.Unknown के लिए एक त्रुटि दिखाता है, भले ही अपवाद को गतिशील घोषित किया गया हो। ऐसा इसलिए है क्योंकि तीन संभावित प्रकारों (एप्लीकेशन-एक्सेप्शन, सिस्टम-एक्सेप्शन और स्ट्रिंग) में से कोई भी अज्ञात संदेश का समर्थन नहीं करता है। हालांकि गतिशील और वार प्रकारों का उपयोग स्पष्ट रूप से सुरक्षित या अधिक उदार प्रकार की जाँच प्राप्त करने के लिए किया जा सकता है, एकल वार संदर्भों की गतिशीलता को कमांड-लाइन विकल्पों, एक्स. एम. एल. विन्यास फ़ाइलों और विजुअल स्टूडियो के लिए एक प्लगइन के साथ भी संशोधित किया जा सकता है। फ़ील्ड्स वार और डायनेमिक प्रकारों के प्रकार अनुमान का उपयोग ऑब्जेक्ट फ़ील्ड्स के रूप में किया जा सकता हैः वर्ग रैपर {निजी वार विशेषता; सार्वजनिक रैपर (वार विशेषता) {this.attribute = विशेषता;} सार्वजनिक वार गेट () {रिटर्न विशेषता;} सार्वजनिक शून्य सेट (वार विशेषता) {this.attribute = विशेषता;}} वर्ग परीक्षण {सार्वजनिक स्थिर शून्य मुख्य () {स्ट्रिंग ए स्ट्रिंग; इंट ए इंट; रैपर रैपर = नया रैपर ("हैलो"); ए स्ट्रिंग = wrapper.get (); ए इंट = wrapper.get ();// * कंपाइलर त्रुटि wrapper.set (3); ए स्ट्रिंग = wrapper.get ();// * कंपाइलर हर बार जब हम सेट विधि कहते हैं, तो विशेषता के प्रकार का अनुमान तर्क के प्रकार के रूप में लगाया जाता है। प्रत्येक वस्तु में संभावित रूप से अलग प्रकार की विशेषता होती है, इसलिए इसका प्रकार पूरे वर्ग के बजाय हर एक उदाहरण के लिए संग्रहीत किया जाता है। इस तरह, उपरोक्त कोड में दर्शाई गई दो पंक्तियाँ संकलन त्रुटियों की रिपोर्ट करती हैं। इस व्यवहार का समर्थन करने के लिए एक प्रकार-आधारित उपनाम विश्लेषण एल्गोरिदम लागू किया गया है। अवरोध-आधारित प्रकार आइए निम्नलिखित विधि का विश्लेषण करेंः सार्वजनिक स्थिर वार ऊपरी (वार पैरामीटर) {रिटर्न parameter.ToUpper ();} पैरामीटर के प्रकार और फ़ंक्शन रिटर्न मूल्य का अनुमान संकलक द्वारा लगाया जाता है। उस उद्देश्य के लिए, ऊपरी विधि के प्रकार में एक बाधा जोड़ी जाती हैः तर्क को बिना किसी मापदंड के एक टॉपर विधि प्रदान करनी चाहिए। प्रत्येक आह्वान पर, बाधा की जाँच की जाएगी। इसके अतिरिक्त, ऊपरी के वापसी प्रकार का अनुमान तर्क द्वारा लागू की गई संबंधित टॉपर विधि के वापसी प्रकार के रूप में लगाया जाएगा। प्रोग्रामर पैरामीटर घोषित करने के लिए या तो वार या डायनेमिक का उपयोग कर सकता है, विधि आह्वान पर प्रकार की जाँच करने के तरीके को बदल सकता है। मान लीजिए कि ऊपरी पर पारित तर्क एक प्रवाह-संवेदनशील प्रकार रखता है (जैसे, ऊपर दिए गए कोड में एप्लीकेशन-एक्सेप्शन, सिस्टम-एक्सेप्शन या स्ट्रिंग एक्सेप्शन वेरिएबल)। वार के साथ, सभी संभावित प्रकार के तर्क को टॉपर प्रदान करना चाहिए; गतिशील के साथ, कम से कम एक प्रकार को टॉपर प्रदान करना चाहिए। रनटाइम प्रदर्शन स्टैडिन द्वारा एकत्र की गई प्रकार की जानकारी का उपयोग उत्पन्न कोड में महत्वपूर्ण अनुकूलन करने के लिए किया जाता हैः प्रकार निरीक्षण और प्रकार कास्ट की संख्या कम हो जाती है, प्रतिबिंब से बचा जाता है, लगातार प्रकार कैश किए जाते हैं, और बाधाओं के साथ विधियाँ विशेष होती हैं। सभी अनुकूलन का उद्देश्य रनटाइम पर किए गए प्रकार-जाँच संचालन की संख्या को कम करना है, जो अधिकांश गतिशील भाषाओं का मुख्य प्रदर्शन दंड है। इनमें से कई प्रकार की जाँचें स्टैडिन संकलक द्वारा पहले की जाती हैं। स्टैडिन के रनटाइम प्रदर्शन का एक विस्तृत मूल्यांकन में विस्तृत है। ओ. सी. ए. एम. एल. स्ट्रॉन्ग टॉक बू संदर्भ बाहरी लिंक आधिकारिक वेबसाइट गिटहब रिपॉजिटरी कम्प्यूटेशनल रिफ्लेक्शन रिसर्च ग्रुप प्रोग्रामिंग भाषाएँ. एन. ई. टी. प्रोग्रामिंग भाषाएँ वर्ग-आधारित प्रोग्रामिंग भाषाएँ मुफ्त संकलक और दुभाषिया ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाएँ 2007 में एम. आई. टी. लाइसेंस का उपयोग करके बनाई गई प्रोग्रामिंग भाषाएँ।