विशिष्टता प्रकार
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
unique
ई> घोषणा निर्दिष्ट करती है कि का प्रकारf
निराला है; कहने का मतलब यह हैf
कॉल करने वाले द्वारा दोबारा कभी इसका उल्लेख नहीं किया जा सकता हैreadLine2
बादreadLine2
रिटर्न, और यह प्रतिबंध प्रकार प्रणाली द्वारा लागू किया जाता है। और तबसेreadLine2
वापस नहीं आताf
स्वयं, बल्कि एक नई, भिन्न फ़ाइल ऑब्जेक्टdifferentF
, इसका मतलब यह है कि यह असंभव है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.