मेटाडेटा (सीएलआई): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 65: Line 65:




नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है <code>ExampleMethod</code> है, इसका रिटर्न वैल्यू, या संभवतः पूर्ण असेंबली है? इस विषय में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से युग्मित के रूप में माना जाएगा। यदि यह उद्देश्य नहीं है, या यदि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लेखन <code>[return: Orange]</code> रिटर्न मान को नारंगी के रूप में चिह्नित करेगा, <code>[assembly: Orange]</code> पूर्ण असेंबली को चिह्नित करेगा। वैध लक्ष्य  <code>assembly</code>, <code>field</code>, <code>event</code>, <code>method</code>, <code>module</code>, <code>param</code>, <code>property</code>, <code>return</code> और <code>type</code> हैं।  
नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है <code>ExampleMethod</code> है, इसका रिटर्न वैल्यू, या संभवतः पूर्ण असेंबली है? इस विषय में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से युग्मित के रूप में माना जाएगा। यह उद्देश्य नहीं है, कि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लेखन <code>[return: Orange]</code> रिटर्न मान को नारंगी के रूप में चिह्नित करेगा, <code>[assembly: Orange]</code> पूर्ण असेंबली को चिह्नित करेगा। वैध लक्ष्य  <code>assembly</code>, <code>field</code>, <code>event</code>, <code>method</code>, <code>module</code>, <code>param</code>, <code>property</code>, <code>return</code> और <code>type</code> हैं।  


छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं के जैसे ही किया जाता है किन्तु उनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के निकट विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस प्रकार की विशेषताओं के साथ चिह्नित कोड को भिन्न विधि से संभालता है। जैसे गुण <code>Serializable</code> और <code>Obsolete</code> छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। [[ILAsm]] द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।{{Clarify me|date=March 2008}}
छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं के जैसे ही किया जाता है किन्तु उनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के निकट विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस प्रकार की विशेषताओं के साथ चिह्नित कोड को भिन्न विधि से संभालता है। जैसे गुण <code>Serializable</code> और <code>Obsolete</code> छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। [[ILAsm]] द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।{{Clarify me|date=March 2008}}

Revision as of 10:45, 7 March 2023

सीएलआई मेटाडेटा, ऑन-डिस्क प्रतिनिधित्व
Filename extension
.exe, .dll, .winmd
Magic number0x424A5342
Developed byमाइक्रोसॉफ्ट,
एक्मा अंतरराष्ट्रीय
StandardECMA-335 part II

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

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

विंडोज 8 और विंडोज फोन 8 में उपस्तिथ विंडोज रनटाइम एप्लिकेशन प्लेटफॉर्म, किसी भी समर्थित प्रोग्रामिंग भाषाओं में लिखे गए कोड के लिए घटक-उन्मुख प्रोग्रामिंग इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का वर्णन करने के लिए सीएलआई मेटाडेटा प्रारूप का उपयोग करता है। कॉमन भाषा रनटाइम के भीतर उपयोग में अंतर यह है कि असेंबली में सामान्यतः कोई सीएलआई निर्देश नहीं होता है।[1]


गुण

डेवलपर विशेषताओं के माध्यम से कोड में मेटा डेटा जोड़ सकते हैं। दो प्रकार की विशेषताएँ हैं, कस्टम और छद्म कस्टम विशेषताएँ, और डेवलपर के लिए सिंटैक्स कंप्यूटर विज्ञान है। मेटाडेटा उत्पन्न करने के लिए कोड में विशेषताएँ संकलक के लिए संदेश हैं। सीएलआई में, मेटा डेटा जैसे कि इनहेरिटेंस मॉडिफायर्स, स्कोप मॉडिफायर्स, और लगभग कुछ ओपी कोड्स (opcodes) या स्ट्रीम को गुण के रूप में संदर्भित किया जाता है।

कस्टम विशेषता नियमित वर्ग है जो गुण वर्ग से प्राप्त होता है।सिंटैक्स के साथ किसी भी विधि, संपत्ति, वर्ग या संपूर्ण असेंबली पर कस्टम विशेषता [AttributeName(optional parameter, optional name=value pairs)] का उपयोग किया जा सकता है।

[Custom]
[Custom(1)]
[Custom(1, Comment="yes")]

कस्टम विशेषताओं का उपयोग सीएलआई द्वारा बड़े स्तर पर किया जाता है। विंडोज संचार रूप सेवा अनुबंधों को परिभाषित करने के लिए विशेषताओं का उपयोग करता है, एएसपी.नेट (ASP.NET) इनका उपयोग वेब सेवाओं के रूप में विधियों को प्रकाशित करने के लिए करता है, लिंक (LINQ) उनका उपयोग अंतर्निहित डेटाबेस स्कीमा में क्लासओं की मैपिंग को परिभाषित करने के लिए करता है, विजुअल स्टूडियो उन्हें वस्तु के गुणों को समूहित करने के लिए उपयोग करता है। [Category] कस्टम विशेषता को ऑब्जेक्ट, क्लास डेवलपर प्रारम्भ करके ऑब्जेक्ट के वर्ग के लिए श्रेणी को प्रदर्शित करता है। कस्टम विशेषताओं की व्याख्या एप्लिकेशन कोड द्वारा की जाती है न कि सीएलआर द्वारा की जाती है। जब संकलक कस्टम विशेषता देखता है तो यह कस्टम मेटाडेटा उत्पन्न करेगा जो सीएलआर द्वारा पहचाना नहीं गया है। डेवलपर को मेटाडेटा पढ़ने और उस पर कार्य करने के लिए कोड प्रदान करना होता है। उदाहरण के रूप में, दिखाई गई विशेषता को कोड द्वारा नियंत्रित किया जा सकता है:

 class CustomAttribute : Attribute
 {
  private int paramNumber = 0;
  private string comment = "";
   public CustomAttribute() { }
   public CustomAttribute(int num) { paramNumber = num; }
   public String Comment
  {
      set { comment = value; }
  }
}


वर्ग का नाम विशेषता नाम पर मैप किया गया है। विजुअल सी कंपाइलर स्वचालित रूप से किसी भी विशेषता नाम के अंत में स्ट्रिंग Attribute जोड़ता है । परिणाम स्वरुप, प्रत्येक विशेषता वर्ग का नाम इस स्ट्रिंग के साथ समाप्त होना चाहिए, Attribute-प्रत्यय के बिना विशेषता को परिभाषित करना विधि है। किसी आइटम के लिए विशेषता को परिभाषित करते समय, कंपाइलर शाब्दिक नाम और अंत में जोड़े गए विशेषता वाले नाम दोनों का अनुसंधान करेगा। Attribute अंत में जोड़ा गया। यदि आप [Custom] लिखना चाहते हैं तो संकलक Custom और CustomAttribute दोनों का अनुसंधान करेगा।यदि दोनों उपस्तिथ हैं, तो संकलक विफल हो जाता है। यदि आप अस्पष्टता का संकट नहीं उठाना चाहते हैं, तो विशेषता को @ के साथ उपसर्ग किया जा सकता है, इसलिए [@Custom] लिखना CustomAttribute से युग्मित नहीं होगा। विशेषता का उपयोग क्लास के निर्माता को आमंत्रित करता है। ओवरलोडेड कंस्ट्रक्टर समर्थित हैं। नाम-मूल्य जोड़े गुणों के लिए मैप किए जाते हैं, नाम संपत्ति के नाम को दर्शाता है और आपूर्ति मूल्य संपत्ति द्वारा निर्धारित किया जाता है।

कभी-कभी इस बात को लेकर अस्पष्टता होती है कि आप किस विशेषता को जोड़ रहे हैं। निम्नलिखित कोड पर विचार करें:

   [Orange]
  public int ExampleMethod(string input)
{
 //method body goes here
}


नारंगी के रूप में क्या चिह्नित किया गया है? क्या यह है ExampleMethod है, इसका रिटर्न वैल्यू, या संभवतः पूर्ण असेंबली है? इस विषय में, कंपाइलर डिफ़ॉल्ट होगा, और विशेषता को विधि से युग्मित के रूप में माना जाएगा। यह उद्देश्य नहीं है, कि लेखक अपने कोड को स्पष्ट करना चाहता है, तो विशेषता लक्ष्य निर्दिष्ट किया जा सकता है। लेखन [return: Orange] रिटर्न मान को नारंगी के रूप में चिह्नित करेगा, [assembly: Orange] पूर्ण असेंबली को चिह्नित करेगा। वैध लक्ष्य assembly, field, event, method, module, param, property, return और type हैं।

छद्म-कस्टम विशेषता का उपयोग नियमित कस्टम विशेषताओं के जैसे ही किया जाता है किन्तु उनके पास कस्टम हैंडलर नहीं होता है; जबकि संकलक के निकट विशेषताओं के बारे में आंतरिक जागरूकता होती है और इस प्रकार की विशेषताओं के साथ चिह्नित कोड को भिन्न विधि से संभालता है। जैसे गुण Serializable और Obsolete छद्म-कस्टम विशेषताओं के रूप में कार्यान्वित किया जाता है। ILAsm द्वारा छद्म-कस्टम विशेषताओं का कभी भी उपयोग नहीं किया जाना चाहिए, क्योंकि इसमें मेटाडेटा का वर्णन करने के लिए पर्याप्त सिंटैक्स है।[clarification needed]



मेटाडेटा स्टोरेज

असेंबली में मेटाडेटा की सारणी होती हैं। इन सारणियों को सीएलआई विनिर्देश द्वारा वर्णित किया गया है। मेटाडेटा सारणी में शून्य या अधिक प्रविष्टियाँ होंगी और किसी प्रविष्टि की स्थिति उसके सूचकांक को निर्धारित करती है। जब सीएलआई कोड मेटाडेटा का उपयोग करता है तो यह मेटाडेटा टोकन के माध्यम से करता है। यह 32-अंश मान है जहां शीर्ष 8 बिट उपयुक्त मेटाडेटा सारणी की पहचान करते हैं, और शेष 24 बिट सारणी में मेटाडेटा की अनुक्रमणिका देते हैं। फ्रेमवर्क सॉफ़्टवेयर विकास किट में मॉडल होता है जिसे metainfo कहा जाता है जो असेंबली में मेटाडेटा सारणी को सूचीबद्ध करेगा, चूँकि, यह जानकारी किसी डेवलपर के लिए संभवतः ही कभी उपयोगी होती है। असेंबली में मेटाडेटा को .NET फ्रेमवर्क एसडीके द्वारा प्रदान किए गए I आईएलडीएएसएम उपकरण का उपयोग करके देखा जा सकता है।

सीएलआई मानक में, मेटाडेटा को ILAsm (असेंबली भाषा) फॉर्म, स्टोरेज के लिए ऑन-डिस्क प्रतिनिधित्व फॉर्म, और पोर्टेबल निष्पादन योग्य (PE, .exe या .dll) फॉर्मेट की असेंबली में एम्बेड किए गए फॉर्म में परिभाषित किया गया है। पीई फॉर्म ऑन-डिस्क फॉर्म पर आधारित है।

प्रतिबिंब

प्रतिबिंब सीएलआई मेटाडेटा को पढ़ने के लिए उपयोग किया जाने वाला अप्लिकेशन प्रोग्रामिंग अंतरफलक है। प्रतिबिंब एपीआई मेटाइन्फो जैसे उपकरणों द्वारा प्रदान किए गए शाब्दिक दृश्य के अतिरिक्त मेटाडेटा का तार्किक दृश्य प्रदान करता है। .NET फ्रेमवर्क के संस्करण 1.1 में प्रतिबिंब का उपयोग क्लासओं और उनके सदस्यों के विवरण का निरीक्षण करने और विधियों को प्रारम्भ करने के लिए किया जा सकता है। चूँकि, यह किसी विधि के लिए सीएलआई तक रनटाइम पहुँच की अनुमति नहीं देता है। प्रारूप का संस्करण 2.0 सीआईएल को विधि प्राप्त करने की अनुमति देता है।

अन्य मेटाडेटा उपकरण

इसके अतिरिक्त System.Reflection नेमस्पेस, अन्य उपकरण भी उपलब्ध हैं जिनका उपयोग मेटाडेटा को संभालने के लिए किया जा सकता है। माइक्रोसॉफ्ट .नेट (Microsoft .NET) फ्रेमवर्क सीएलआर मेटाडेटा का आदान-प्रदान करके लाइब्रेरी को शिप करता है जिसे नेटिव कोड में प्रारम्भ किया गया है। मेटाडेटा को पुनः प्राप्त करने और आदान-प्रदान करने के लिए तृतीय-पक्ष उपकरण में पोस्टशर्प और मोनो सेसिल का भी उपयोग किया जा सकता है।

यह भी देखें

संदर्भ

  1. "Windows Metadata (WinMD) files". Windows UWP applications (in English).