विशिष्टता प्रकार: Difference between revisions
(Created page with "{{Type systems}} कम्प्यूटिंग में, एक अद्वितीय प्रकार यह गारंटी देता है कि क...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{Type systems}} | {{Type systems}} | ||
[[ कम्प्यूटिंग ]] में, एक अद्वितीय प्रकार यह | [[ कम्प्यूटिंग |कम्प्यूटिंग]] में, एक अद्वितीय प्रकार यह प्रत्याभूति देता है कि किसी ऑब्जेक्ट का उपयोग [[एकल थ्रेड|सिंगल-थ्रेडेड]] तरीके से किया जाता है, जिसमें अधिकतम एक ही संदर्भ होता है। यदि किसी मान में एक अद्वितीय प्रकार है, तो उस पर लागू फ़ंक्शन को ऑब्जेक्ट कोड में मूल्य को अद्यतन करने के लिए अनुकूलित किया जा सकता है। ऐसे इन-प्लेस अपडेट [[संदर्भात्मक पारदर्शिता]] बनाए रखते हुए कार्यात्मक भाषाओं की दक्षता में सुधार करते हैं। अद्वितीय प्रकारों का उपयोग कार्यात्मक और अनिवार्य प्रोग्रामिंग को एकीकृत करने के लिए भी किया जा सकता है। | ||
==परिचय== | ==परिचय== | ||
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन | विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन<code>readLine</code>पर विचार करें जो किसी दी गई फ़ाइल से टेक्स्ट की अगली पंक्ति पढ़ता है:<syntaxhighlight lang="text"> | ||
<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>doImperativeReadLineSystemCall</code> ओएस-स्तरीय [[सिस्टम कॉल]] का उपयोग करके फ़ाइल से अगली पंक्ति को पढ़ता है जिसका फ़ाइल में वर्तमान स्थिति को बदलने का दुष्प्रभाव होता है। लेकिन यह संदर्भात्मक पारदर्शिता का उल्लंघन करता है क्योंकि इसे एक ही तर्क के साथ कई बार कॉल करने पर हर बार अलग-अलग परिणाम मिलेंगे क्योंकि फ़ाइल में वर्तमान स्थिति बदल जाएगी। इसके परिणामस्वरूप <code>readLine</code>संदर्भात्मक पारदर्शिता का उल्लंघन करती है क्योंकि यह <code>doImperativeReadLineSystemCall</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> के साथ एक तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है। | ||
==प्रोग्रामिंग भाषाएँ== | ==प्रोग्रामिंग भाषाएँ== |
Revision as of 23:43, 15 July 2023
Type systems |
---|
General concepts |
Major categories |
|
Minor categories |
कम्प्यूटिंग में, एक अद्वितीय प्रकार यह प्रत्याभूति देता है कि किसी ऑब्जेक्ट का उपयोग सिंगल-थ्रेडेड तरीके से किया जाता है, जिसमें अधिकतम एक ही संदर्भ होता है। यदि किसी मान में एक अद्वितीय प्रकार है, तो उस पर लागू फ़ंक्शन को ऑब्जेक्ट कोड में मूल्य को अद्यतन करने के लिए अनुकूलित किया जा सकता है। ऐसे इन-प्लेस अपडेट संदर्भात्मक पारदर्शिता बनाए रखते हुए कार्यात्मक भाषाओं की दक्षता में सुधार करते हैं। अद्वितीय प्रकारों का उपयोग कार्यात्मक और अनिवार्य प्रोग्रामिंग को एकीकृत करने के लिए भी किया जा सकता है।
परिचय
विशिष्टता टाइपिंग को एक उदाहरण का उपयोग करके सबसे अच्छी तरह समझाया गया है। एक फ़ंक्शन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]
यह भी देखें
- रैखिक प्रकार
- रैखिक तर्क
संदर्भ
- ↑ Haller, P.; Odersky, M. (2010), "Capabilities for uniqueness and borrowing", ECOOP 2010—Object-Oriented Programming (PDF), pp. 354–378
- ↑ 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.
- ↑ 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.