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

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


==परिचय==
==परिचय==
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन<code>readLine</code>पर विचार करें जो किसी दी गई फ़ाइल से टेक्स्ट की अगली पंक्ति पढ़ता है:<syntaxhighlight lang="text">
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। फ़ंक्शन<code>readLine</code>पर विचार करें जो किसी दी गई फ़ाइल से टेक्स्ट की अगली पंक्ति पढ़ता है:<syntaxhighlight lang="text">
function readLine(File f) returns String
function readLine(File f) returns String
     return line where
     return line where
Line 12: Line 12:
अब <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">
function readLine2(unique File f) returns (unique File, String)
function readLine2(unique File f) returns (unique File, String)
     return (differentF, line) where
     return (differentF, line) where
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> के साथ तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।


==प्रोग्रामिंग भाषाएँ==
==प्रोग्रामिंग भाषाएँ==
विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग भाषाओं जैसे क्लीन (प्रोग्रामिंग भाषा), मर्करी (प्रोग्रामिंग भाषा), एसएसी_प्रोग्रामिंग_भाषा और इदरीस (प्रोग्रामिंग_भाषा) में लागू किए जाते हैं। इन्हें कभी-कभी कार्यात्मक प्रोग्रामिंग में मोनाड्स के बदले कार्यात्मक भाषाओं में I/O संचालन करने के लिए उपयोग किया जाता है।
विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग भाषाओं जैसे कि क्लीन, मर्करी, सैक और इदरीस में लागू किए जाते हैं. वे कभी-कभी मोनड्स के बदले कार्यात्मक भाषाओं में इनपुट/आउटपुट  संचालन करने के लिए उपयोग किए जाते हैं।
 
[[स्काला (प्रोग्रामिंग भाषा)]] के लिए एक कंपाइलर एक्सटेंशन विकसित किया गया है जो अभिनेताओं के बीच संदेश भेजने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।<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>
==रैखिक टाइपिंग से संबंध==
==रैखिक टाइपिंग से संबंध==
एक अद्वितीय प्रकार एक [[रैखिक प्रकार]] के समान होता है, इस बिंदु पर कि शब्दों को अक्सर एक दूसरे के स्थान पर उपयोग किया जाता है, लेकिन वास्तव में एक अंतर होता है: वास्तविक रैखिक टाइपिंग एक गैर-रैखिक मान को एक रैखिक में [[टाइप कास्टिंग (कंप्यूटर प्रोग्रामिंग)]] करने की अनुमति देती है प्रपत्र, जबकि अभी भी इसके कई संदर्भ बरकरार हैं। विशिष्टता यह गारंटी देती है कि किसी मूल्य का कोई अन्य संदर्भ नहीं है, जबकि रैखिकता गारंटी देती है कि किसी मूल्य का कोई और संदर्भ नहीं बनाया जा सकता है।<ref>{{cite conference |first=Philip |last=Wadler |authorlink=Philip Wadler |title=Is there a use for linear logic? |conference=ACM SIGPLAN symposium on partial evaluation and semantics-based program manipulation (PEPM '91) |date=17–19 June 1991 |url=http://homepages.inf.ed.ac.uk/wadler/topics/linear-logic.html#linearuse |pages=255–273 |doi=10.1145/115865.115894 |isbn=0-89791-433-3 |citeseerx=10.1.1.26.4202}}</ref>
अद्वितीय प्रकार एक [[रैखिक प्रकार]] के समान होता है, इस हद तक कि शब्दों का उपयोग प्रायः परस्पर विनिमय के लिए किया जाता है, लेकिन वास्तव में अंतर होता है: वास्तविक रेखीय टाइपिंग गैर-रेखीय मान को रेखीय रूप में टाइपकास्ट करने की अनुमति देती है, जबकि इसके कई संदर्भ अभी भी बरकरार रहते हैं। विशिष्टता यह प्रत्याभूति देती है कि किसी मूल्य का कोई अन्य संदर्भ नहीं है, जबकि रैखिकता प्रत्याभूति देती है कि किसी मूल्य का कोई और संदर्भ नहीं दिया जा सकता है।<ref>{{cite conference |first=Philip |last=Wadler |authorlink=Philip Wadler |title=Is there a use for linear logic? |conference=ACM SIGPLAN symposium on partial evaluation and semantics-based program manipulation (PEPM '91) |date=17–19 June 1991 |url=http://homepages.inf.ed.ac.uk/wadler/topics/linear-logic.html#linearuse |pages=255–273 |doi=10.1145/115865.115894 |isbn=0-89791-433-3 |citeseerx=10.1.1.26.4202}}</ref>
गैर-रैखिकता और गैर-विशिष्टता तौर-तरीकों के संबंध में रैखिकता और विशिष्टता को विशेष रूप से अलग देखा जा सकता है, लेकिन फिर इसे एक ही प्रकार की प्रणाली में भी एकीकृत किया जा सकता है। <ref>{{cite conference |first1=Daniel | last1=Marshall |first2=Michael |last2=Vollmer |first3=Dominic| last3= Orchard| title=Linearity and Uniqueness: An Entente Cordiale|conference=ESOP'22 |date=7 April 2022|doi=10.1007/978-3-030-99336-8_13|doi-access=free}}</ref>


रैखिकता और विशिष्टता को गैर-रैखिकता और गैर-विशिष्टता के उपायों के संबंध में विशेष रूप से अलग देखा जा सकता है, लेकिन फिर एक प्रकार की प्रणाली में भी एकीकृत किया जा सकता है।<ref>{{cite conference |first1=Daniel | last1=Marshall |first2=Michael |last2=Vollmer |first3=Dominic| last3= Orchard| title=Linearity and Uniqueness: An Entente Cordiale|conference=ESOP'22 |date=7 April 2022|doi=10.1007/978-3-030-99336-8_13|doi-access=free}}</ref>
==यह भी देखें==


==यह भी देखें==
* रैखिक प्रकार
*रैखिक प्रकार
* रैखिक तर्क
*रैखिक तर्क


==संदर्भ==
==संदर्भ==

Revision as of 23:56, 15 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.


बाहरी संबंध