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

From Vigyanwiki
(Created page with "{{Type systems}} कम्प्यूटिंग में, एक अद्वितीय प्रकार यह गारंटी देता है कि क...")
 
No edit summary
 
(7 intermediate revisions by 4 users not shown)
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> एक तर्क के रूप में फिर से, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।
 
==प्रोग्रामिंग भाषाएँ==
विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग भाषाओं जैसे क्लीन (प्रोग्रामिंग भाषा), मर्करी (प्रोग्रामिंग भाषा), एसएसी_प्रोग्रामिंग_भाषा और इदरीस (प्रोग्रामिंग_भाषा) में लागू किए जाते हैं। इन्हें कभी-कभी कार्यात्मक प्रोग्रामिंग में मोनाड्स के बदले कार्यात्मक भाषाओं में 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>
==यह भी देखें==


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


==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
==बाहरी संबंध==
==बाहरी संबंध==
* [https://www.cs.cmu.edu/~carsten/linearbib/llb.html Bibliography on Linear Logic]
* [https://www.cs.cmu.edu/~carsten/linearbib/llb.html Bibliography on Linear Logic]
* [http://www.edsko.net/pubs/ifl07-paper.pdf Uniqueness Typing Simplified]
* [http://www.edsko.net/pubs/ifl07-paper.pdf Uniqueness Typing Simplified]
[[Category: प्रकार सिद्धांत]]


[[Category: Machine Translated Page]]
[[Category:Created On 08/07/2023]]
[[Category:Created On 08/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:प्रकार सिद्धांत]]

Latest revision as of 15:40, 31 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.

बाहरी संबंध