सुरक्षित समानता को लागू करने के लिए विशिष्टता प्रकार का उपयोग करना


19

मैं कुछ समय के लिए शुद्ध कार्यात्मक भाषाओं में मठों के विकल्प के रूप में विशिष्टता प्रकारों में रुचि रखता हूं; दुर्भाग्य से, यह सीएस अनुसंधान के एक गूढ़ क्षेत्र की तरह है और विशिष्टता प्रकार के साथ प्रोग्रामिंग के बारे में ऑनलाइन संसाधन कुछ और दूर हैं।

यह स्पष्ट है कि संदर्भ ("बक्से") और सरणियों जैसे स्टेटफुल डेटा संरचनाओं को लागू करने के लिए विशिष्टता प्रकार का उपयोग कैसे किया जा सकता है, हालांकि यह मुझे बचता है कि आप उनके साथ अन्य सामान्य स्टेटफुल डेटा संरचनाओं को कैसे लागू कर सकते हैं।

क्या यह लागू करना संभव है, उदाहरण के लिए, अद्वितीय प्रकारों के साथ लॉक करना? धागे के पार परस्पर डेटा साझा करने के लिए विशिष्टता प्रकार का उपयोग किया जा सकता है? क्या सिंक्रनाइज़ेशन प्राइमेटिव्स (जैसे म्यूटेक्स) के निर्माण के लिए अद्वितीय प्रकारों का उपयोग करना संभव है, या संदेश आवश्यक रूप से गुजर रहा है?


क्या आप अपने प्रश्न को थोड़ा और विशिष्ट बना सकते हैं? उदाहरण के लिए, क्या आप पहले से ही अद्वितीय प्रकारों के साथ लॉक करने के बारे में जानते हैं और आपका अपना ज्ञान अपर्याप्त है?
रॉबर्ट हार्वे

> क्या, उदाहरण के लिए, क्या आप पहले से ही अनूठे प्रकारों के साथ लॉक करने के बारे में जानते हैं, मुझे अद्वितीय प्रकारों के साथ लॉक करने के बारे में कुछ भी नहीं पता है - मुझे वास्तव में पता नहीं है कि अद्वितीय प्रकार के साथ सुरक्षित समानता कैसे काम करती है और मैं जानना चाहता हूं कि क्या है विषय पर कोई संसाधन हैं।
रिकी स्टीवर्ट


2
@ रिकीस्टार्ट: आप शायद पहले से ही क्लीन ( wiki.clean.cs.ru.nl/Clean ) जानते हैं । मैं सिर्फ लिंक जोड़ना चाहता था क्योंकि आपने इसका उल्लेख नहीं किया था।
जियोर्जियो

मुझे लगता है कि आपको समानता के लिए रैखिक प्रकारों पर ध्यान देना चाहिए। IIRC विशिष्टता प्रकार रैखिक प्रकारों पर बनाए जाते हैं। फ्रैंक पफेनिंग के पास इस विषय पर कुछ दिलचस्प चीजें हैं
डैनियल ग्रैज़र

जवाबों:


2

क्या यह लागू करना संभव है, उदाहरण के लिए, अद्वितीय प्रकारों के साथ लॉक करना?

मैंने उस लिंक का अनुसरण किया जो रॉबर्ट हार्वे ने प्रदान किया और मैंने एक त्वरित रीड-अप किया। मैं नहीं कह सकता कि मैं सब कुछ समझ गया या मुझे लगता है कि मैं विश्वास के एक उच्च स्तरीय है कि वास्तव में समझ में आ मैं क्या लगता है कि मैं समझ गया, लेकिन मुझे ऐसा लगता है कि बाहरी विशिष्टता और संदर्भ अचल स्थिति के पूरे मुद्दे लॉकिंग की कोई आवश्यकता नहीं है।

मल्टीथ्रेडिंग के लिए आधुनिक दृष्टिकोण लॉकिंग से बचने की कोशिश करते हैं क्योंकि केवल अत्यधिक अनुभवी प्रोग्रामर ही कोड लिख सकते हैं जो लॉकिंग का उपयोग करता है, और यहां तक ​​कि उनके कोड में बग होने का खतरा है। यदि आप इस तथ्य के शीर्ष पर जोड़ते हैं कि लॉकिंग कोड वास्तव में अस्थिर है, तो यह स्पष्ट होना चाहिए कि यह चीजों को करने का एक बहुत अवांछनीय तरीका है, और हमें लॉकिंग से मुक्त करने के लिए कोई भी समाधान कम से कम कहने का वादा कर रहा है।

जिस तरह से हम लॉकिंग से बचते रहे हैं वह मैसेज पासिंग के साथ है, जिसके लिए जरूरी है कि मैसेज अपरिवर्तनीय हों। मोटे तौर पर, (पहली नज़र में) संदर्भ अपरिवर्तनीयता एक ऐसी तकनीक प्रतीत होती है, जो हमें वास्तव में अपरिवर्तनीय प्रकारों का निर्माण किए बिना अपरिवर्तनीयता की गारंटी देने में मदद कर सकती है, और बाहरी विशिष्टता एक ऐसी तकनीक प्रतीत होती है, जो हमें स्थानीय स्तर पर सख्त अपरिवर्तनीयता को आराम देने में मदद कर सकती है।

धागे के पार परस्पर डेटा साझा करने के लिए विशिष्टता प्रकार का उपयोग किया जा सकता है?

कागज ने इसे स्पष्ट रूप से नहीं बताया है, लेकिन जो मैं समझता हूं, वस्तुओं का एक बाहरी अनोखा क्लस्टर थ्रेड सुरक्षित है क्योंकि किसी भी तरह (वास्तव में, कैसे? ) यह गारंटी है कि वस्तुओं के उस क्लस्टर में केवल एक बाहरी संदर्भ मौजूद है, जिसका अर्थ है कि इस तरह के एक संदर्भ को प्राप्त करने वाला एक धागा संदर्भित वस्तुओं को बिना किसी चिंता के पारस्परिक रूप से व्यवहार कर सकता है, क्योंकि कोई अन्य धागा भी उन्हें उत्परिवर्तित कर सकता है, क्योंकि कोई अन्य धागा संभवतः एक और संदर्भ नहीं हो सकता है। मुझे यह जानने की उत्सुकता होगी कि इस तरह के सैद्धांतिक निर्माण को कैसे लागू और लागू किया जा सकता है।

क्या सिंक्रनाइज़ेशन प्राइमेटिव्स (जैसे म्यूटेक्स) के निर्माण के लिए अद्वितीय प्रकारों का उपयोग करना संभव है, या संदेश आवश्यक रूप से गुजर रहा है?

फिर से, जो मैं समझता हूं, बाहरी रूप से अद्वितीय प्रकार और संदर्भ अपरिवर्तनीयता तालों, म्यूटेक्स और अनावश्यक की तरह प्रस्तुत करना है। संदेश पास होने का मार्ग प्रतीत होता है, और यह अच्छा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.