विशिष्टता प्रकार: Difference between revisions

From Vigyanwiki
No edit summary
Line 1: Line 1:
{{Type systems}}
{{Type systems}}
[[ कम्प्यूटिंग |कम्प्यूटिंग]] में, एक '''विशिष्ट प्रकार''' यह सुनिश्चित करता है कि किसी वस्तु का उपयोग [[एकल थ्रेड|सिंगल-थ्रेडेड]] विधि से किया जाता है, जिसमें सबसे अधिक एक संदर्भ होता है। यदि किसी मान में एक विशिष्ट प्रकार है, तो उस पर कार्यान्वित फ़ंक्शन को ऑब्जेक्ट कोड में वैल्यू इन-प्लेस को अपडेट करने के लिए अनुकूलित किया जा सकता है। इस तरह के इन-प्लेस अद्यतनों से कार्यात्मक लैंग्वेजओं की दक्षता में सुधार होता है, जबकि संदर्भ संबंधी पारदर्शिता बनी रहती है। कार्यात्मक और अनिवार्य प्रोग्रामिंग को एकीकृत करने के लिए अद्वितीय प्रकारों का भी उपयोग किया जा सकता है।
[[ कम्प्यूटिंग |कम्प्यूटिंग]] में, एक '''विशिष्ट प्रकार''' यह सुनिश्चित करता है कि किसी वस्तु का उपयोग [[एकल थ्रेड|सिंगल-थ्रेडेड]] विधि से किया जाता है, जिसमें सबसे अधिक एक संदर्भ होता है। यदि किसी मान में एक विशिष्ट प्रकार है, तो उस पर कार्यान्वित फ़ंक्शन को ऑब्जेक्ट कोड में वैल्यू इन-प्लेस को अपडेट करने के लिए अनुकूलित किया जा सकता है। इस तरह के इन-प्लेस अद्यतनों से फंक्शनल लैंग्वेजेस की दक्षता में सुधार होता है, जबकि संदर्भ संबंधी पारदर्शिता बनी रहती है। फंक्शनल और इम्पेरेटिव प्रोग्रामिंग को एकीकृत करने के लिए अद्वितीय प्रकारों का भी उपयोग किया जा सकता है।


==परिचय==
==परिचय==
Line 10: Line 10:
end
end
</syntaxhighlight>
</syntaxhighlight>
अब <code>doImperativeReadLineSystemCall</code> ओएस-स्तरीय [[सिस्टम कॉल]] का उपयोग करके फ़ाइल से अगली पंक्ति को पढ़ता है जिसका फ़ाइल में वर्तमान स्थिति को बदलने का दुष्प्रभाव होता है। लेकिन यह संदर्भात्मक पारदर्शिता का उल्लंघन करता है क्योंकि इसे एक ही तर्क के साथ कई बार कॉल करने पर हर बार अलग-अलग परिणाम मिलेंगे क्योंकि फ़ाइल में वर्तमान स्थिति बदल जाएगी। इसके परिणामस्वरूप <code>readLine</code>संदर्भात्मक पारदर्शिता का उल्लंघन करती है क्योंकि यह <code>doImperativeReadLineSystemCall</code>को कॉल करती है।
अब <code>doImperativeReadLineSystemCall</code> ओएस-स्तरीय [[सिस्टम कॉल]] का उपयोग करके फ़ाइल से अगली लाइन को पढ़ता है जिसका फ़ाइल में वर्तमान स्थिति को बदलने का दुष्प्रभाव होता है। लेकिन यह संदर्भात्मक पारदर्शिता का उल्लंघन करता है क्योंकि इसे एक ही तर्क के साथ कई बार कॉल करने पर हर बार अलग-अलग परिणाम मिलेंगे क्योंकि फ़ाइल में वर्तमान स्थिति बदल जाएगी। इसके परिणामस्वरूप <code>readLine</code>संदर्भात्मक पारदर्शिता का उल्लंघन करती है क्योंकि यह <code>doImperativeReadLineSystemCall</code>को कॉल करती है।


हालाँकि, विशिष्टता टाइपिंग का उपयोग करके, हम <code>readLine</code>का एक नया संस्करण बना सकते हैं जो संदर्भात्मक रूप से पारदर्शी है, भले ही यह ऐसे फ़ंक्शन के शीर्ष पर बनाया गया हो जो संदर्भित रूप से पारदर्शी नहीं है:<syntaxhighlight lang="text">
हालाँकि, विशिष्टता टाइपिंग का उपयोग करके, हम <code>readLine</code>का एक नया संस्करण बना सकते हैं जो संदर्भात्मक रूप से पारदर्शी है, भले ही यह ऐसे फ़ंक्शन के शीर्ष पर बनाया गया हो जो संदर्भित रूप से पारदर्शी नहीं है:<syntaxhighlight lang="text">
Line 19: Line 19:
     end
     end
end
end
</syntaxhighlight>विशिष्ट घोषणा निर्दिष्ट करती है कि f का प्रकार अद्वितीय है; कहने का तात्पर्य यह है कि, <code>readLine2</code> रिटर्न के बाद <code>readLine2</code> के कॉलर द्वारा <code>f</code> को दोबारा कभी संदर्भित नहीं किया जा सकता है, और यह प्रतिबंध प्रकार प्रणाली द्वारा लागू किया जाता है। और चूँकि <code>readLine2</code> स्वयं <code>f</code> नहीं लौटाता है, बल्कि एक नई, अलग फ़ाइल ऑब्जेक्ट को अलग करता है, इसका तात्पर्य यह है कि<code>readLine2</code> को <code>f</code> के साथ तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।
</syntaxhighlight>विशिष्ट घोषणा निर्दिष्ट करती है कि f का प्रकार अद्वितीय है; कहने का तात्पर्य यह है कि, <code>readLine2</code> रिटर्न के बाद <code>readLine2</code> के कॉलर द्वारा <code>f</code> को दोबारा कभी संदर्भित नहीं किया जा सकता है, और यह प्रतिबंध प्रकार प्रणाली द्वारा प्रयुक्त किया जाता है। और चूँकि <code>readLine2</code> स्वयं <code>f</code> नहीं लौटाता है, बल्कि एक नई, अलग फ़ाइल ऑब्जेक्ट को अलग करता है, इसका तात्पर्य यह है कि<code>readLine2</code> को <code>f</code> के साथ तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।


==प्रोग्रामिंग लैंग्वेज==
==प्रोग्रामिंग लैंग्वेज==
विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग लैंग्वेज जैसे कि क्लीन, मर्करी, सैक और इदरीस में लागू किए जाते हैं. वे कभी-कभी मोनड्स के बदले कार्यात्मक लैंग्वेजओं में इनपुट/आउटपुट  संचालन करने के लिए उपयोग किए जाते हैं।
विशिष्टता प्रकार फंक्शनल प्रोग्रामिंग लैंग्वेज जैसे कि क्लीन, मर्करी, सैक और इदरीस में प्रयुक्त किए जाते हैं। वे कभी-कभी मोनड्स के बदले फंक्शनल लैंग्वेजेस में इनपुट/आउटपुट  संचालन करने के लिए उपयोग किए जाते हैं।


[[स्काला (प्रोग्रामिंग भाषा)|स्काला]] प्रोग्रामिंग लैंग्वेज के लिए कंपाइलर एक्सटेंशन विकसित किया गया है जो निर्वाहकों के बीच संदेश पारित करने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।<ref>{{citation|last1=Haller|first1=P.|last2=Odersky|first2=M.|authorlink2=Martin Odersky|year=2010|contribution=Capabilities for uniqueness and borrowing|title=ECOOP 2010—Object-Oriented Programming|pages=354–378|url=http://lampwww.epfl.ch/~phaller/doc/capabilities-uniqueness2.pdf}}</ref>
[[स्काला (प्रोग्रामिंग भाषा)|स्काला]] प्रोग्रामिंग लैंग्वेज के लिए कंपाइलर एक्सटेंशन विकसित किया गया है जो निर्वाहकों के बीच संदेश पारित करने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।<ref>{{citation|last1=Haller|first1=P.|last2=Odersky|first2=M.|authorlink2=Martin Odersky|year=2010|contribution=Capabilities for uniqueness and borrowing|title=ECOOP 2010—Object-Oriented Programming|pages=354–378|url=http://lampwww.epfl.ch/~phaller/doc/capabilities-uniqueness2.pdf}}</ref>

Revision as of 22:08, 18 July 2023

कम्प्यूटिंग में, एक विशिष्ट प्रकार यह सुनिश्चित करता है कि किसी वस्तु का उपयोग सिंगल-थ्रेडेड विधि से किया जाता है, जिसमें सबसे अधिक एक संदर्भ होता है। यदि किसी मान में एक विशिष्ट प्रकार है, तो उस पर कार्यान्वित फ़ंक्शन को ऑब्जेक्ट कोड में वैल्यू इन-प्लेस को अपडेट करने के लिए अनुकूलित किया जा सकता है। इस तरह के इन-प्लेस अद्यतनों से फंक्शनल लैंग्वेजेस की दक्षता में सुधार होता है, जबकि संदर्भ संबंधी पारदर्शिता बनी रहती है। फंक्शनल और इम्पेरेटिव प्रोग्रामिंग को एकीकृत करने के लिए अद्वितीय प्रकारों का भी उपयोग किया जा सकता है।

परिचय

विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। फ़ंक्शनreadLineपर विचार करें जो किसी दी गई फ़ाइल से टेक्स्ट की अगली पंक्ति पढ़ता है:

function readLine(File f) returns String
    return line where
        String line = doImperativeReadLineSystemCall(f)
    end
end

अब doImperativeReadLineSystemCall ओएस-स्तरीय सिस्टम कॉल का उपयोग करके फ़ाइल से अगली लाइन को पढ़ता है जिसका फ़ाइल में वर्तमान स्थिति को बदलने का दुष्प्रभाव होता है। लेकिन यह संदर्भात्मक पारदर्शिता का उल्लंघन करता है क्योंकि इसे एक ही तर्क के साथ कई बार कॉल करने पर हर बार अलग-अलग परिणाम मिलेंगे क्योंकि फ़ाइल में वर्तमान स्थिति बदल जाएगी। इसके परिणामस्वरूप readLineसंदर्भात्मक पारदर्शिता का उल्लंघन करती है क्योंकि यह doImperativeReadLineSystemCallको कॉल करती है।

हालाँकि, विशिष्टता टाइपिंग का उपयोग करके, हम readLineका एक नया संस्करण बना सकते हैं जो संदर्भात्मक रूप से पारदर्शी है, भले ही यह ऐसे फ़ंक्शन के शीर्ष पर बनाया गया हो जो संदर्भित रूप से पारदर्शी नहीं है:

function readLine2(unique File f) returns (unique File, String)
    return (differentF, line) where
        String line = doImperativeReadLineSystemCall(f)
        File differentF = newFileFromExistingFile(f)
    end
end

विशिष्ट घोषणा निर्दिष्ट करती है कि f का प्रकार अद्वितीय है; कहने का तात्पर्य यह है कि, readLine2 रिटर्न के बाद readLine2 के कॉलर द्वारा f को दोबारा कभी संदर्भित नहीं किया जा सकता है, और यह प्रतिबंध प्रकार प्रणाली द्वारा प्रयुक्त किया जाता है। और चूँकि readLine2 स्वयं f नहीं लौटाता है, बल्कि एक नई, अलग फ़ाइल ऑब्जेक्ट को अलग करता है, इसका तात्पर्य यह है किreadLine2 को f के साथ तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।

प्रोग्रामिंग लैंग्वेज

विशिष्टता प्रकार फंक्शनल प्रोग्रामिंग लैंग्वेज जैसे कि क्लीन, मर्करी, सैक और इदरीस में प्रयुक्त किए जाते हैं। वे कभी-कभी मोनड्स के बदले फंक्शनल लैंग्वेजेस में इनपुट/आउटपुट  संचालन करने के लिए उपयोग किए जाते हैं।

स्काला प्रोग्रामिंग लैंग्वेज के लिए कंपाइलर एक्सटेंशन विकसित किया गया है जो निर्वाहकों के बीच संदेश पारित करने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।[1]

रैखिक टाइपिंग से संबंध

अद्वितीय प्रकार एक रैखिक प्रकार के समान होता है, इस हद तक कि शब्दों का उपयोग प्रायः परस्पर विनिमय के लिए किया जाता है, लेकिन वास्तव में अंतर होता है: वास्तविक रेखीय टाइपिंग गैर-रेखीय मान को रेखीय रूप में टाइपकास्ट करने की अनुमति देती है, जबकि इसके कई संदर्भ अभी भी बरकरार रहते हैं। विशिष्टता यह प्रत्याभूति देती है कि किसी मूल्य का कोई अन्य संदर्भ नहीं है, जबकि रैखिकता प्रत्याभूति देती है कि किसी मूल्य का कोई और संदर्भ नहीं दिया जा सकता है।[2]

रैखिकता और विशिष्टता को गैर-रैखिकता और गैर-विशिष्टता के उपायों के संबंध में विशेष रूप से अलग देखा जा सकता है, लेकिन फिर एक प्रकार की प्रणाली में भी एकीकृत किया जा सकता है।[3]

यह भी देखें

  • रैखिक प्रकार
  • रैखिक तर्क

संदर्भ

  1. Haller, P.; Odersky, M. (2010), "Capabilities for uniqueness and borrowing", ECOOP 2010—Object-Oriented Programming (PDF), pp. 354–378
  2. Wadler, Philip (17–19 June 1991). Is there a use for linear logic?. ACM SIGPLAN symposium on partial evaluation and semantics-based program manipulation (PEPM '91). pp. 255–273. CiteSeerX 10.1.1.26.4202. doi:10.1145/115865.115894. ISBN 0-89791-433-3.
  3. Marshall, Daniel; Vollmer, Michael; Orchard, Dominic (7 April 2022). Linearity and Uniqueness: An Entente Cordiale. ESOP'22. doi:10.1007/978-3-030-99336-8_13.

बाहरी संबंध