Magik (programming language)
मैजिक एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है जो कई विरासत और बहुरूपता का समर्थन करती है, और इसे गतिशील रूप से टाइप किया जाता है। इसे 1989 में स्मॉलवर्ल्ड जियोग्राफिक इनफार्मेशन सिस्टम (जी. आई. एस.) के हिस्से के रूप में स्मॉलवर्ल्ड सिस्टम्स लिमिटेड के आर्थर चांस द्वारा डिजाइन और कार्यान्वित किया गया था। 2000 में स्मॉलवर्ल्ड के अधिग्रहण के बाद, मैजिक को अब जीई एनर्जी द्वारा प्रदान किया जाता है, जो अभी भी अपने स्मॉलवर्ल्ड प्रौद्योगिकी मंच के हिस्से के रूप में है। मैजिक (इंस्पिरेशनल मैजिक) को मूल रूप से 1990 में पेश किया गया था और वर्षों से इसमें सुधार और अद्यतन किया गया है। इसका वर्तमान संस्करण 5.2 है। जुलाई 2012 में, मैजिक डेवलपर्स ने घोषणा की कि वे जावा वर्चुअल मशीन पर मैजिक भाषा को पोर्ट करने की प्रक्रिया में हैं। उसी वर्ष नवंबर में ओरेकल कॉर्पोरेशन द्वारा सफल पोर्टिंग की पुष्टि की गई थी। स्मॉलटॉक मैजिक के साथ समानताएं अपनी भाषा विशेषताओं और इसकी वास्तुकला के संदर्भ में स्मॉलटॉक के साथ कुछ समानताएं साझा करती हैंः मैजिक भाषा को मैजिक वर्चुअल मशीन द्वारा व्याख्या किए गए बाइट कोड में संकलित किया गया है। मैजिक वर्चुअल मशीन माइक्रोसॉफ्ट विंडोज, यूनिक्स और लिनक्स के विभिन्न स्वादों सहित कई प्लेटफार्मों पर उपलब्ध है। मैजिक कंसोल आधारित है और कोड को तब भी संशोधित किया जा सकता है जब कोई एप्लिकेशन चल रहा हो। कंसोल का उपयोग मैजिक कोड को निष्पादित करने और परिणाम देखने के लिए भी किया जा सकता है। संकलित कोड एक एकल फ़ाइल में संग्रहीत किया जाता है जिसे छवि फ़ाइल कहा जाता है। प्रत्येक छवि फ़ाइल में संकलित बाइट-कोड और सत्र की स्थिति (उदाहरण के लिए परिवर्तनीय मान) होती है जब छवि को आखिरी बार सहेजा गया था। मैजिक टिप्पणी के रूप में कोड के वर्गों को चिह्नित करने के लिए #टोकन का उपयोग करता हैः #यह एक टिप्पणी है। असाइनमेंट मैजिक असाइनमेंट बनाने के लिए <<ऑपरेटर का उपयोग करता हैः a <1.234 b <<b + a c <<"foo" + "बार" #कॉनकैट स्ट्रिंग्स स्पष्टता के लिए, इस संकेतन को "a 1.234 बन जाता है" या "b b प्लस a बन जाता है" के रूप में पढ़ा जाता है। यह शब्दावली असाइनमेंट को तुलना से अलग करती है। मैजिक इस प्रचालक के एक संपीड़ित संस्करण का भी समर्थन करता है जो सीः बी + <<ए #के बराबर बी <<बी + ए में पाए जाने वाले लोगों के समान काम करता है एक चर को प्रिंट करने के लिए आप निम्नलिखित आदेश का उपयोग कर सकते हैं a <<"हैलो" लिखें (ए) प्रतीकों के साथ-साथ पारंपरिक डेटा प्रकार जैसे पूर्णांक, फ्लोट्स और स्ट्रिंग्स मैजिक भी प्रतीकों को लागू करते हैं। प्रतीक एक विशेष टोकन डेटा प्रकार है जिसका उपयोग वस्तुओं की विशिष्ट रूप से पहचान करने के लिए पूरे मैजिक में बड़े पैमाने पर किया जाता है। उन्हें एक बृहदान्त्र द्वारा दर्शाया जाता है जिसके बाद वर्णों की एक श्रृंखला होती है। ऊर्ध्वाधर बार वर्ण का उपयोग करके प्रतीकों से बचा जा सकता है। उदाहरण के लिएः ए <<: हैलो #जब भीः हैलो का सामना किया जाता है, तो यह वही उदाहरण है b <<: |hello वर्ल्ड। डायनेमिक टाइपिंग मैजिक चर टाइप नहीं किए जाते हैं क्योंकि वे सी #कहते हैं और रनटाइम पर विभिन्न वस्तुओं को संदर्भित कर सकते हैं। मैजिक में सब कुछ एक वस्तु है (वस्तुओं और पूर्णांक जैसे आदिम प्रकारों के बीच कोई अंतर नहीं है): एक <<1.2 #एक फ़्लोटिंग बिंदु संख्या को चर 'a' a <<1.2 "#को बाद में सौंपा जाता है, एक स्ट्रिंग को चर 'a' को सौंपा जाता है। उदाहरणों में जावा जैसी अन्य प्रोग्रामिंग भाषाओं के वर्गों के साथ समानताएं हैं, लेकिन महत्वपूर्ण अंतरों के साथ। मैजिक कई विरासत और मिक्सिन का समर्थन करता है (जो बिना किसी डेटा के कार्यक्षमता को लागू करते हैं)। नए उदाहरण एक मौजूदा उदाहरण की क्लोनिंग करके बनाए जाते हैं (जो आम तौर पर उदाहरण होगा लेकिन होना जरूरी नहीं है)। डेफ _ स्लॉटेड _ इम्पिएलर () कथन का उपयोग करके नए उदाहरण बनाए जाते हैं, उदाहरण के लिएः डेफ _ स्लॉटेड _ इम्पिएलर (: माय _ ऑब्जेक्ट, {{: स्लॉट _ ए, 34}, {: स्लॉट _ बी, "हैलो"}, {: पेरेंट _ ऑब्जेक्ट _ ए,: पेरेंट _ ऑब्जेक्ट _ बी) यह कोड टुकड़ा माय _ ऑब्जेक्ट नामक एक नए उदाहरण को परिभाषित करेगा जिसमें दो स्लॉट (या फ़ील्ड) हैं जिन्हें स्लॉट _ ए (34 से पहले शुरू किया गया) और स्लॉट _ बी ("हैलो" से पहले शुरू किया गया) कहा जाता है जो दो मौजूदा उदाहरणों से विरासत में मिलता है जिन्हें पेरेंट _ ऑब्जेक्ट _ ए और पेरेंट _ ऑब्जेक्ट _ बी कहा जाता है। तुलना मैजिक तुलना के लिए सभी सामान्य तार्किक प्रचालक (=, <, <=,>,> =, ~ =/<>) के साथ-साथ कुछ असामान्य प्रचालक भी लागू करता है। इस और इस ऑपरेटरों का उपयोग वस्तुओं के विशिष्ट उदाहरणों, या मूल्यों के बजाय वस्तु संदर्भों की तुलना करने के लिए किया जाता है। उदाहरण के लिएः a <<"हैलो" b <<<"हैलो" a = b #लौटाता है सही (_ सही) क्योंकि a और b के मान बराबर हैं a _ is b #लौटाता है गलत (_ गलत) क्योंकि a वही उदाहरण नहीं है जो b a <<<"हैलो" b <<a = b #लौटाता है सही (_ सही) क्योंकि a और b के मान बराबर हैं a _ is b #लौटाता है सही (_ सही) क्योंकि b को a के मान के बजाय a के रूप में एक ही वस्तु का विशिष्ट उदाहरण सौंपा गया था। विधियों को स्टेटमेंट _ मेथड और _ एंडमेथोड का उपयोग करके उदाहरणों पर परिभाषित किया जाता हैः _ मेथड my_object.my_method (a, b) _ रिटर्न a + b _ एंडमेथोड यह दो विधियों नई () (एक नया उदाहरण बनाने के लिए) और init () (एक उदाहरण शुरू करने के लिए) की आपूर्ति करने की परंपरा है। #नया मेथड _ मेथड person.new (नाम, आयु) _ रिटर्न _clone.init (नाम, आयु) _ एंडमेथोड #इनिशियलाइज़ मेथड। निजी _ विधि person.init (नाम, आयु) #मूल कार्यान्वयन को कॉल करें। _super.init (नाम, आयु) #स्थान प्रारंभ करें। . नेम <<नेम. एज <<एज _ रिटर्न _ सेल्फ _ एंडमेथोड क्लोन व्यक्ति ऑब्जेक्ट की एक भौतिक प्रति बनाता है। सुपर स्टेटमेंट वस्तुओं को मूल उदाहरण पर एक विधि के कार्यान्वयन का आह्वान करने की अनुमति देता है। वस्तुएँ स्वयं कथन का उपयोग करके स्वयं को संदर्भित कर सकती हैं। एक वस्तु के स्लॉट को एक डॉट नोटेशन का उपयोग करके एक्सेस और असाइन किया जाता है। वे विधियाँ जो वस्तु के सार्वजनिक इंटरफेस का हिस्सा नहीं हैं, उन्हें निजी कथन का उपयोग करके निजी चिह्नित किया जा सकता है। निजी विधियों को केवल स्वयं, सुपर और क्लोन द्वारा कहा जा सकता है। वैकल्पिक तर्कों को वैकल्पिक कथन का उपयोग करके घोषित किया जा सकता है। वैकल्पिक तर्क जो पारित नहीं किए जाते हैं, उन्हें मैजिक द्वारा विशेष ऑब्जेक्ट _ अनसेट (शून्य के समकक्ष) को सौंपा जाता है। एकत्र कथन का उपयोग वैकल्पिक तर्कों की सूची घोषित करने के लिए किया जा सकता है। _ मेथड my_object.my_method (_ इकट्ठा मान) _ एंडमेथोड पुनरावृत्ति मैजिक में, _ फॉर, _ ओवर, _ लूप और _ एंडलूप कथन पुनरावृत्ति की अनुमति देते हैं। _ ब्लॉक _ लोकल s <<0 _ लोकल i <<0 _ जबकि i <= 100 _ लूप s + <<i i + <<1 _ एंडलूप>> s _ एंडब्लॉक यहाँ, _ वाइल को _ लूप और _ एंडलूप के साथ जोड़ा जाता है। _ विधि my_object.my_method (_ इकट्ठा मान) कुल <<0.0 _ a _ के लिए values.elements () _ लूप कुल + <<a _ एंडलूप _ रिटर्न कुल _ एंडमेथोड m <<my_object.new () x <<m.my_method (1,0,2,3,4) #x = 10.0 यहाँ values.elements () एक इटरेटर है जो मानों को दोहराने में मदद करता है। मैजिक जनरेटर विधियों को इटरेटर विधियाँ कहा जाता है। नए पुनरावृत्ति विधियों को _ iter और _ लूपबॉडी कथनों का उपयोग करके परिभाषित किया जा सकता हैः _ iter _ मेथड my_object.even_elements () _ a _ over _self.elements () _ लूप _ अगर a.even के लिए? _ इस _ ट्रू _ तब _ लूपबॉडी (ए) _ एंडिफ _ एंडलूप _ एंडमेथोड प्रक्रियाएं मैजिक भी प्रक्रियाओं नामक कार्यों का समर्थन करता है। प्रक्रियाएँ भी वस्तुएँ हैं और इन्हें _ प्रोसी और _ एंडप्रोक कथनों का उपयोग करके घोषित किया जाता है। प्रक्रियाएँ उन चरों को निर्धारित की जाती हैं जिन्हें तब लागू किया जा सकता हैः माइ _ प्रोसीजर <<_ प्रोसीजर @my_procedure (a, b, c) _ रिटर्न a + b + c _ एंडप्रोक x <<माइ _ प्रोसीजर (1,2,3) #x = 6 रेगुलर एक्सप्रेशन मैजिक का समर्थन करता है// रेगुलर एक्सप्रेशन सिंटैक्सः _ इफ/हैलो, \s (\w) +!/. मैच? "हैलो, मैजिक!") फिर लिखें ("एक मैच मिला!") एंडिफ और रेगेक्सः/स्व ([0-9] +)-([0-9] +) में समूहों को पकड़ने के लिए। */. प्रतिस्थापन _ सभी ("एसडब्ल्यू 65456-324 एसएसएस", "$1") #"65456"/एसडब्ल्यू ([0-9] +)-([0-9] +)। */. प्रतिस्थापन _ सभी ("एस. डब्ल्यू. 65456-324 एस. एस. एस"., "$2") #"324" एच. टी. टी. पी. पुस्तकालय मैजिक एच. टी. टी. पी. या एच. टी. टी. पी. एस. अनुरोधों को एच. टी. टी. पी. पुस्तकालय के माध्यम से करने का समर्थन करता है, नीचे दिए गए उदाहरण देखें-मैजिख्ट. टी. पी. <http.new ("https://www.google.com"). गेट () magikhttp.url ("https://www.google.com"). पोस्ट ("उपयोगकर्ता-एजेंट", "बॉट"), "कुछ डेटा") भाषा क्विर्क क्योंकि मैजिक मूल रूप से इंग्लैंड में विकसित किया गया था, मुख्य छोटी दुनिया के पुस्तकालयों में विधियों की वर्तनी ब्रिटिश अंग्रेजी का उपयोग करके की जाती है। उदाहरण के लिएः "आरंभ करें" का उपयोग करें, "आरंभ करें" का नहीं। अन्य प्रोग्रामिंग भाषाओं की तरह मैजिक के भी संग्रह हैं। उनमें निम्नलिखित शामिल हैंः सरल वेक्टर रोप हैश टेबल संपत्ति सूची समानता सेट बैग हैलो वर्ल्ड उदाहरण निम्नलिखित मैजिक में लिखे गए हैलो वर्ल्ड प्रोग्राम का एक उदाहरण हैः लिखें ("हैलो वर्ल्ड!") संदर्भ बाहरी लिंक स्मॉलवर्ल्ड प्रोडक्ट सूट टेक्नोलॉजी एम. डी. टी.-जी. ई. स्मॉलवर्ल्ड जी. आई. एस. डेवलपर्स के लिए मैजिक डेवलपमेंट टूल्स आई. डी. ई. ओपन सोर्स (सोर्सफोर्ज) मैजिक टेक्निकल पेपर नं. 5-स्मॉलवर्ल्ड मैजिक जीई स्मॉलवर्ल्ड का एक अवलोकन, मैजिक डेवलपर्स के लिए ईमैक्स एक्सटेंशन स्मॉलवर्ल्ड मैजिक प्रोग्रामिंग लैंग्वेज के लिए विजुअल स्टूडियो कोड एक्सटेंशन। वर्ग-आधारित प्रोग्रामिंग भाषाएँ गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएँ