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

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


==परिचय==
==परिचय==
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन पर विचार करें <code>readLine</code> जो किसी दी गई फ़ाइल से पाठ की अगली पंक्ति पढ़ता है:
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन<code>readLine</code>पर विचार करें जो किसी दी गई फ़ाइल से टेक्स्ट की अगली पंक्ति पढ़ता है:<syntaxhighlight lang="text">
 
<!-- unclear what programming language this is -->
<syntaxhighlight lang="text">
function readLine(File f) returns String
function readLine(File f) returns String
     return line where
     return line where
Line 13: 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> यह संदर्भात्मक रूप से पारदर्शी है, भले ही यह एक ऐसे फ़ंक्शन के शीर्ष पर बनाया गया हो जो संदर्भात्मक रूप से पारदर्शी नहीं है:
हालाँकि, विशिष्टता टाइपिंग का उपयोग करके, हम <code>readLine</code>का एक नया संस्करण बना सकते हैं जो संदर्भात्मक रूप से पारदर्शी है, भले ही यह एक ऐसे फ़ंक्शन के शीर्ष पर बनाया गया हो जो संदर्भित रूप से पारदर्शी नहीं है:<syntaxhighlight lang="text">
<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 23: Line 19:
     end
     end
end
end
</syntaxhighlight>
</syntaxhighlight>विशिष्ट घोषणा निर्दिष्ट करती है कि f का प्रकार अद्वितीय है; कहने का तात्पर्य यह है कि, <code>readLine2</code> रिटर्न के बाद <code>readLine2</code> के कॉलर द्वारा <code>f</code> को दोबारा कभी संदर्भित नहीं किया जा सकता है, और यह प्रतिबंध प्रकार प्रणाली द्वारा लागू किया जाता है। और चूँकि <code>readLine2</code> स्वयं <code>f</code> नहीं लौटाता है, बल्कि एक नई, अलग फ़ाइल ऑब्जेक्ट को अलग करता है, इसका मतलब यह है कि<code>readLine2</code> को <code>f</code> के साथ एक तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।
<code>unique</code> ई> घोषणा निर्दिष्ट करती है कि का प्रकार <code>f</code> निराला है; कहने का मतलब यह है <code>f</code> कॉल करने वाले द्वारा दोबारा कभी इसका उल्लेख नहीं किया जा सकता है <code>readLine2</code> बाद <code>readLine2</code> रिटर्न, और यह प्रतिबंध [[ प्रकार प्रणाली ]] द्वारा लागू किया जाता है। और तबसे <code>readLine2</code> वापस नहीं आता <code>f</code> स्वयं, बल्कि एक नई, भिन्न फ़ाइल ऑब्जेक्ट <code>differentF</code>, इसका मतलब यह है कि यह असंभव है <code>readLine2</code> के साथ बुलाया जाना है <code>f</code> एक तर्क के रूप में फिर से, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।


==प्रोग्रामिंग भाषाएँ==
==प्रोग्रामिंग भाषाएँ==

Revision as of 23:43, 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 के साथ एक तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।

प्रोग्रामिंग भाषाएँ

विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग भाषाओं जैसे क्लीन (प्रोग्रामिंग भाषा), मर्करी (प्रोग्रामिंग भाषा), एसएसी_प्रोग्रामिंग_भाषा और इदरीस (प्रोग्रामिंग_भाषा) में लागू किए जाते हैं। इन्हें कभी-कभी कार्यात्मक प्रोग्रामिंग में मोनाड्स के बदले कार्यात्मक भाषाओं में I/O संचालन करने के लिए उपयोग किया जाता है।

स्काला (प्रोग्रामिंग भाषा) के लिए एक कंपाइलर एक्सटेंशन विकसित किया गया है जो अभिनेताओं के बीच संदेश भेजने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।[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.


बाहरी संबंध