Vtable

2011-08-10 7 views
8

VTables के लिए विकल्प अधिकांश ओओ कार्यान्वयन में सर्वव्यापी हैं, लेकिन क्या उनके पास विकल्प हैं? Vtables के लिए विकी पेज में एक छोटा सा अस्पष्टता है, लेकिन वास्तव में बहुत अधिक जानकारी (और लिंक वाले लिंक) नहीं है।Vtable

क्या आप कुछ भाषा कार्यान्वयन के बारे में जानते हैं जो vtables का उपयोग नहीं करता है?

क्या निःशुल्क ऑनलाइन पृष्ठ हैं जो विकल्पों पर चर्चा करते हैं?

उत्तर

13

हां, कई विकल्प हैं!

Vtables तभी संभव है जब

  1. सभी विधि कॉल स्थिर निर्धारित किया जा सकता है। यदि आप स्ट्रिंग नाम से फ़ंक्शंस कॉल कर सकते हैं, या यदि आपके पास कोई ऑब्जेक्ट्स नहीं है कि आप किस ऑब्जेक्ट्स को कॉल कर रहे हैं, तो आप vtables का उपयोग नहीं कर सकते हैं क्योंकि आप प्रत्येक विधि को इंडेक्स में प्रत्येक विधि को मैप नहीं कर सकते हैं। इसी प्रकार, यदि आप रनटाइम पर किसी वर्ग में फ़ंक्शंस जोड़ सकते हैं, तो आप VTE स्थिर रूप से सभी विधियों को इंडेक्स असाइन नहीं कर सकते हैं।
  2. विरासत स्थिर रूप से निर्धारित किया जा सकता है। यदि आप प्रोटोटाइप विरासत या अन्य विरासत योजना का उपयोग करते हैं, जहां आप स्थाई रूप से नहीं बता सकते कि विरासत संरचना कैसा दिखता है, तो आप तालिका में प्रत्येक विधि की अनुक्रमणिका या स्लॉट में कौन सी विशेष कक्षा की विधि जाती है, का प्रीकंप्यूट नहीं कर सकते हैं।

आम तौर पर, विरासत को उनके कार्यान्वयन में कार्यों के स्ट्रिंग-आधारित टेबल मैपिंग नामों के साथ कार्यान्वित किया जाता है, साथ ही पॉइंटर्स प्रत्येक वर्ग को अपनी बेस क्लास देखने की इजाजत देता है। विधि प्रेषण को तब इस संरचना को चलने के द्वारा लागू किया जाता है जो विधि को लागू करने वाले रिसीवर ऑब्जेक्ट की कक्षा के ऊपर या उससे ऊपर की निम्नतम कक्षा की तलाश में होता है। आईपी ​​निष्पादन को गति देने के लिए, इनलाइन कैशिंग जैसी तकनीकों का अक्सर उपयोग किया जाता है, जहां कॉल साइट ऑब्जेक्ट के प्रकार के आधार पर किस विधि को लागू किया जाना चाहिए, इस पूरे ढांचे को पार करने में समय बिताने से बचने के लिए। स्वयं प्रोग्रामिंग भाषा ने इस विचार का उपयोग किया, जिसे इंटरफेस को संभालने के लिए हॉटस्पॉट जेवीएम में शामिल किया गया था (मानक विरासत अभी भी vtables का उपयोग करता है)।

एक अन्य विकल्प ट्रेसिंग का उपयोग करना है, जहां संकलक कोड को उत्सर्जित करता है जो अनुमान लगाता है कि ऑब्जेक्ट का प्रकार क्या है और फिर ट्रेस में कॉल करने के लिए विधि को हार्डकोड करता है। मोज़िला फ़ायरफ़ॉक्स इसका उपयोग अपने जावास्क्रिप्ट दुभाषिया में करता है, क्योंकि प्रत्येक ऑब्जेक्ट के लिए vtables बनाने का कोई तरीका नहीं है।

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

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे