Charm (programming language)
चार्म एक कंप्यूटर प्रोग्रामिंग भाषा है जिसे 1990 के दशक की शुरुआत में तैयार किया गया था, जिसमें अपनी कुछ अनूठी विशेषताओं के अलावा आरटीएल/2, पास्कल और सी भाषाओं के साथ समानताएं हैं। आकर्षक भाषा को एक संदर्भ-मुक्त व्याकरण द्वारा परिभाषित किया गया है जो पुनरावर्ती वंश पार्सर द्वारा संसाधित किए जाने के लिए उपयुक्त है जैसा कि संकलक डिजाइन पर मौलिक पुस्तकों में वर्णित है। एकोर्न के आरआईएससी ओएस प्लेटफॉर्म के लिए एक संकलक, असेंबलर और लिंकर सहित आकर्षक उपकरणों का एक सेट उपलब्ध कराया गया था। आर. आई. एस. सी. ओ. एस. प्लेटफ़ॉर्म के लिए फिर से काम किए गए आकर्षण की बाद में आर्काइव पत्रिका में समीक्षा की गई है। चार्म का वर्णन आगे ई-बुक प्रोग्रामिंग इन चार्म ऑन द रास्पबेरी पाई में किया गया है। बैकस-नौर रूप में आकर्षक व्याकरण की परिभाषा को आकर्षक रचनाओं के वर्णनात्मक उदाहरणों के साथ आकर्षक भाषा पृष्ठ पर परिभाषित किया गया है। भाषा ब्लॉक संरचित है, जिसमें प्रत्येक ब्लॉक को एक भाषा मुख्य शब्द द्वारा पेश किया जाता है जो ब्लॉक में किए जा रहे संचालन का वर्णन करता है। ,, (पुनरावृत्ति), (चयन)। प्रत्येक ब्लॉक {और} परिसीमक द्वारा घिरा हुआ है। इसके अतिरिक्त एक ब्लॉक के भीतर भाषा की पंक्तियों को आम तौर पर स्पष्टता के लिए इंडेंट किया जाता है, हालांकि यह आवश्यक नहीं है क्योंकि सफेद स्थान को नजरअंदाज कर दिया जाता है। प्रत्येक व्याकरणिक रूप से अनुरूप पाठ निष्पादन योग्य कोड और संबंधित डेटा के संग्रह का प्रतिनिधित्व करता है जिसका उपयोग एक प्रोग्राम को इकट्ठा करते समय एक घटक के रूप में एक चार्म टूल सेट द्वारा किया जा सकता है जिसे एक ऑपरेटिंग सिस्टम के तहत चलाया जा सकता है जो डेटा प्रोसेसिंग जैसे उपयोगी काम करने के लिए प्रदान की जाने वाली सेवाओं का उपयोग करता है या एक ग्राफिकल यूजर इंटरफेस (जीयूआई) के माध्यम से उपयोगकर्ताओं के साथ बातचीत करता है। डेटा प्रकार आकर्षण एक दृढ़ता से टाइप की गई भाषा है, लेकिन संख्यात्मक और फ्लोटिंग पॉइंट प्रकारों के बीच कुछ अंतर्निहित रूपांतरण की अनुमति देती है। निम्नलिखित बुनियादी चर प्रकार समर्थित हैंः-पूर्णांक-वर्ण-बूलियन मान (या)-फ़्लोटिंग पॉइंट नंबर एक ही प्रकार के डेटा समुच्चय को घोषित किया जा सकता है और मुख्य शब्द का उपयोग करके स्थिर रूप से आरंभ किया जा सकता है, और ये बहुआयामी हो सकते हैं। विभिन्न प्रकार के समुच्चय को मुख्य शब्द का उपयोग करके घोषित किया जा सकता है, और इस तरह की घोषणा के लिए भंडारण आवंटन के संदर्भ में एक दूसरे को आच्छादित करने वाले अभिलेख क्षेत्रों को परिभाषित करने की अनुमति है। मॉड्यूल स्थिर और गतिशील डेटा सदस्यों के मिश्रण को भी एकत्रित कर सकते हैं। रिकॉर्ड और मॉड्यूल (केवल गतिशील सामग्री) दोनों के उदाहरणों को स्टैक पर या ऑपरेटर के माध्यम से ढेर पर तत्काल किया जा सकता है। मॉड्यूल सी + + भाषा के समान संसाधनों को जारी करने के लिए गतिशील डेटा और संबंधित विघटनकारी प्रक्रिया को आरंभ करने के लिए एक निर्माणकर्ता प्रक्रिया को भी परिभाषित कर सकते हैं। एक मॉड्यूल के दायरे में संदर्भ डेटा या प्रक्रियाओं को मुख्य शब्द का उपयोग करके अंतिम अनुप्रयोग के लिए वैश्विक बनाया जा सकता है। यदि कोई मॉड्यूल किसी अन्य चार्म मॉड्यूल से किसी प्रक्रिया या डेटा का संदर्भ लेना चाहता है, तो वह मुख्य शब्द का उपयोग करके ऐसा करता है। मॉड्यूल में उदाहरण आधारित सदस्य चर हो सकते हैं जो अंतर्निहित पहले पैरामीटर पॉइंटर के माध्यम से मुख्य शब्द के साथ घोषित प्रक्रियाओं के माध्यम से सुलभ हैं। मुख्य शब्द का उपयोग करके डेटा निर्माण और प्रक्रियाओं का संदर्भ दिया जा सकता है। इन्हें मुख्य शब्द का उपयोग करके संदर्भित किया जा सकता है। संदर्भ चर का उपयोग करते समय, तुलना प्रचालक यह जांचने के लिए उपलब्ध होते हैं कि क्या दो संदर्भ चर डेटा की एक ही वस्तु (: =:) को संदर्भित करते हैं या क्या वे जिस डेटा की ओर इशारा करते हैं वह समान (=) है। उदाहरण चार्म में लिखा गया मूल क्लासिक हैलो वर्ल्ड प्रोग्राम हैः एक्सट प्रोक राइट स्ट्रिंग (रेफ ऐरे चार); मॉड्यूल हैलो; एंट प्रोक स्टार्ट (); राइट स्ट्रिंग ("हैलो वर्ल्ड"); एंड प्रोक; एंड मॉड्यूल; और विकासवादी वाक्यविन्यास भाषा परिवर्तनों के बाद समकक्ष नवीनतम संस्करण हैः इम्पोर्ट lib.Out; मॉड्यूल हैलो {एक्सपोर्ट प्रोक ~ स्टार्ट () {Out.vdu.str ("हैलो वर्ल्ड")। एन. एल. ();} टूल सेट कार्यान्वयन से चार्म स्रोत कोड और असेंबलर स्रोत कोड से ऑब्जेक्ट फ़ाइलों को उत्पन्न करने के लिए एक संकलक और एक असेंबलर प्रदान करने की उम्मीद है, जिसे फिर एक निष्पादन योग्य प्रोग्राम उत्पन्न करने के लिए लाइब्रेरी और रन टाइम समर्थन फ़ाइलों के साथ जोड़ा जा सकता है। लिखने के समय डाउनलोड करने के लिए केवल एक चार्म टूल सेट इंस्टॉलेशन (निः शुल्क) उपलब्ध है। उपकरण स्वयं आकर्षक भाषा में लिखे गए हैं, और स्रोत कोड जीएनयू जनरल पब्लिक लाइसेंस की शर्तों के तहत उपलब्ध है। वे आर. आई. एस. सी. ओ. एस. पी. सी. और ए. आर. एम. सी. पी. यू. (जैसे रास्पबेरी पाई) के साथ प्लेटफार्मों पर और आर. आई. एस. सी. ओ. एस. के लिए एमुलेटर पर चलते हैं जो विंडोज या लिनक्स प्लेटफार्मों (जैसे आर. पी. सी. ई. एम. यू) पर होस्ट किए जाते हैं। हार्डवेयर सहायता प्राप्त दोहरी परिशुद्धता वाले फ्लोटिंग पॉइंट संचालन के लिए कोड उत्पादन एआरएम चिप्स पर आधारित प्लेटफार्मों के लिए समर्थित है जो वीएफपी संस्करण 2 कोप्रोसेसर वास्तुकला का समर्थन करते हैं। कम्पाइलर चार्म कम्पाइलर एक रिकर्सिव डिसेंट सिंगल पास कम्पाइलर है जो एक मध्यवर्ती भाषा में फॉर्म परिणामः = lhs op rhs के चार गुना उत्पन्न करने के लिए चार्म स्रोत कोड को पार्स करता है जो अंकगणितीय, तार्किक और नियंत्रण संचालन के प्रवाह का समर्थन करता है। डेटा को अस्थायी रूप से संग्रहीत किया जाता है जो संकलक के पिछले छोर में रजिस्टरों और स्मृति स्थानों को सौंपा जाता है। वर्तमान में दो पिछले छोर मौजूद हैं, एक मोटोरोला 68000 असेंबली भाषा उत्पन्न करता है, और दूसरा एआरएम वास्तुकला उत्पन्न करता है। हैलो वर्ल्ड के उदाहरण से चौगुना आउटपुट हैः पैराम l1 $कॉल राइट _ स्ट्रिंग [प्रोसी (रेफ ऐरे चार) शून्य] और असेंबलर आउटपुट हैः स्ट्रिंग "हैलो" xdef _ प्रारंभ संरेखित करें xref _ लिखें _ स्ट्रिंग stmfd sp!, {rp} adr r0, _ l1 $bl _ लिखें _ स्ट्रिंग ldmfd sp!, {pc} पता संरेखित करें _ l1 $स्ट्रिंग "हैलो वर्ल्ड" डायरेक्ट एंड चार्म के हाल ही के रिलीज में, I/O प्रक्रियाओं को उनके अपने मॉड्यूल इन और आउट में विभाजित किया गया है। अन्य मानक पुस्तकालय प्रक्रियाओं को अभिलेखों के एक समूह में व्यवस्थित किया जाता है जिसमें प्रक्रिया संदर्भ क्षेत्र के रूप में होते हैं। इस पुनर्गठन के हिस्से के रूप में, लेखन _ स्ट्रिंग विधि को अब स्थिर सदस्य संदर्भ. vdu के माध्यम से रन टाइम लाइब्रेरी मॉड्यूल आउट के माध्यम से लागू किया जाता है। हैलो वर्ल्ड में उपरोक्त उदाहरण में लिखें _ स्ट्रिंग ("हैलो वर्ल्ड") Out.vdu.str ("हैलो वर्ल्ड") बन जाता है। असेंबलर निर्देश निमोनिक्स, डेटा घोषणाओं और निर्देशों को स्वीकार करता है और एक ऑब्जेक्ट फ़ाइल का निर्माण करता है जिसमें लक्ष्य प्रोसेसर के सीपीयू द्वारा आसानी से समझने योग्य जानकारी होती है, विशेष रूप से बाइनरी में कोडित कोड निर्देशों में। लिंकर एक और एक निष्पादन योग्य कार्यक्रम बनाने के लिए जुड़े चार्म मॉड्यूल में से केवल एक में हस्ताक्षरों में से एक से मेल खाने वाली प्रक्रिया होनी चाहिएः निर्यात प्रोक ~ स्टार्ट () निर्यात प्रोक ~ स्टार्ट (इंट आर्गक, रेफ ऐरे रेफ ऐरे चार आर्गव) यह सी और जावा भाषाओं में मुख्य कार्य के अनुरूप है। यहाँ आर. जी. सी. में कमांड लाइन पर पारित मापदंडों की संख्या होती है और आर. जी. वी. में आर. जी. सी. + 1 स्ट्रिंग्स (एक स्ट्रिंग प्रति स्थितिगत पैरामीटर क्रम में और एक समाप्ति शून्य) की एक सरणी का संदर्भ होता है। इसके अलावा, मॉड्यूल में वैकल्पिक रूप से प्रोग्राम स्टार्टअप और शटडाउन के दौरान लागू स्थिर स्टार्टअप और शटडाउन प्रक्रियाएं हो सकती हैं जो हस्ताक्षरों से मेल खाती हैंः निर्यात खरीद () निर्यात खरीद बंद () लिंकर प्रोग्राम को निष्पादित करने के लिए ऑपरेटिंग सिस्टम द्वारा आवश्यक किसी भी आवश्यक हेडर जानकारी को जोड़ता है, और सुनिश्चित करता है कि रन टाइम लाइब्रेरी असेंबलर समर्थन कोड चलाया जाता है जो रन टाइम वातावरण (डेटा और स्टैक पॉइंटर्स) को सेट करता है और एप्लिकेशन की प्रारंभ प्रक्रिया को नियंत्रण देता है। वैश्विक डेटा और कोड संदर्भों के साथ प्रोग्राम बनाने के लिए जुड़े सभी मॉड्यूल के नाम दिखाने वाली एक मानचित्र फ़ाइल वैकल्पिक रूप से तैयार की जाती है जिसका उपयोग डिबगर और प्रोफाइलर द्वारा किया जा सकता है। संदर्भ बाहरी लिंक आरआईएससी ओएस रिस्क पीसी एमुलेटर एआरएम सूचना केंद्र प्रोग्रामिंग भाषाओं के लिए आकर्षण आरआईएससी ओएस प्रोग्रामिंग उपकरण उदाहरण कोड के साथ लेख