स्विफ्ट को गवाह तालिकाओं की आवश्यकता क्यों है?


10

मैं स्विफ्ट के कार्यान्वयन विवरणों को पढ़ने की कोशिश कर रहा हूं, और एक चीज जो मैं नीचे नहीं कर सकता, वह है इसकी "गवाह तालिका"। ऐसा लगता है कि वे अलग-अलग व्यवहार्य सूचक हैं जिनका उपयोग संरचनाओं के लिए किया जाता है।

लेकिन आपको इसकी आवश्यकता क्यों होगी? संरचनाओं को मूल्य द्वारा कॉपी किया जाता है, इसलिए आप पहले से ही संकलन-समय पर जानते हैं कि वे किस प्रकार के हैं। तो क्या आप केवल हार्ड-कोड नहीं चाहते हैं कि किस विधि से कॉल किया जाए और उसके साथ किया जाए? इन विधियों पर आभासी प्रेषण क्यों करें?


1
क्या आप उन संरचना गवाह तालिकाओं पर कुछ संसाधनों की ओर संकेत कर सकते हैं? सभी मुझे मिल गए हैं प्रोटोकॉल गवाह तालिकाएं हैं।
जोर्ग डब्ल्यू मित्तग

जवाबों:


12

संरचनाएं स्विफ्ट में प्रोटोकॉल नामक इंटरफेस को लागू कर सकती हैं। आपके पास एक पैरामीटर, चर या क्षेत्र / सदस्य हो सकता है जो एक प्रोटोकॉल है, और, क्योंकि कई अलग-अलग संरचनाएं, वर्गों का उल्लेख नहीं करने के लिए, उसी प्रोटोकॉल को लागू कर सकते हैं, जब आप किसी प्रोटोकॉल पैरामीटर (या) को पास करते हैं (या असाइन करते हैं) चर या क्षेत्र), किस संरचना की संरचना हो सकती है, यह "खो" (पुनः: संकलन समय) है और प्रोटोकॉल गवाह तालिका खेल में आती है (पुनः: रनटाइम)।

आप स्विफ्ट मेमोरी लेआउट के बारे में अधिक जान सकते हैं ।


C # में भी ऐसा ही होता है, जिससे मैं अधिक परिचित हूं। एक इंटरफ़ेस चर या क्षेत्र / सदस्य के लिए एक संरचना को पारित या सौंपा गया है, और संरचना का बॉक्सिंग प्रतिनिधित्व वर्ग के प्रतिनिधित्व से मेल खाता है, जिसका अर्थ है कि बॉक्सिंग संरचनाओं के लिए एक व्यवहार्य है।

मैं उम्मीद करूंगा कि C # और Swift दोनों ही सीधे कॉल करें जब आइटम को कंपाइल समय पर एक स्ट्रक्चर के रूप में जाना जाता है, और कंपाइल टाइम पर वाइबेट डिस्पैच का उपयोग करने के लिए, आइटम को केवल एक इंटरफेस के रूप में जाना जाता है।


1
"मैं उम्मीद करूंगा कि C # और Swift दोनों को डायरेक्ट कॉल करने के लिए जब आइटम को एक संकलन के रूप में संकलन समय पर जाना जाता है," हां, यह एक प्रक्रिया है जिसे विचलन
अलेक्जेंडर - Reinstate Monica

उपरोक्त लिंक अब काम नहीं करता है। आप शायद github.com/apple/swift/blob/master/docs/ABI/TypeLayout.rst को संदर्भित करना चाहते हैं ।
मार्टिन आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.