विशिष्टता प्रकार
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
के साथ तर्क के रूप में फिर से कॉल करना असंभव है, इस प्रकार साइड इफेक्ट होने की अनुमति देते हुए संदर्भात्मक पारदर्शिता को संरक्षित किया जाता है।
प्रोग्रामिंग भाषाएँ
विशिष्टता प्रकार कार्यात्मक प्रोग्रामिंग भाषाओं जैसे कि क्लीन, मर्करी, सैक और इदरीस में लागू किए जाते हैं. वे कभी-कभी मोनड्स के बदले कार्यात्मक भाषाओं में इनपुट/आउटपुट संचालन करने के लिए उपयोग किए जाते हैं।
स्काला प्रोग्रामिंग भाषा के लिए कंपाइलर एक्सटेंशन विकसित किया गया है जो निर्वाहकों के बीच संदेश पारित करने के संदर्भ में विशिष्टता को संभालने के लिए एनोटेशन का उपयोग करता है।[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.