@ जस्टिस सही है। उस पर थोड़ा विस्तार करने के लिए, सी में केवल वास्तविक मुश्किल हिस्सा चर से अलग प्रकार बता रहा है। विशेष रूप से आप यह देख जब:
T t;
आप जानना चाहते हैं कि T
एक प्रकार है कि एक कानूनी पार्स होने के लिए है की जरूरत है। ऐसा कुछ है जो आपको प्रतीक तालिका में देखना है। जब तक पार्स जारी रहता है तब तक प्रतीक तालिका में टाइप जोड़े जाने के लिए यह अपेक्षाकृत सरल है। आपको कंपाइलर में बहुत अधिक काम करने की आवश्यकता नहीं है: या तो T
तालिका में मौजूद है या यह नहीं है।
सी ++ चीजों में बहुत अधिक हैं, अधिक अधिक जटिल। संदिग्ध या संभावित संदिग्ध संरचनाओं की भारी संख्याएं हैं। सबसे स्पष्ट यह एक है:
B::C (c);
तथ्य यह है कि यह स्पष्ट नहीं है अगर B
एक class
, एक typedef
, या एक namespace
है के अलावा, यह भी स्पष्ट नहीं है अगर C
एक प्रकार और c
कि की एक वस्तु है टाइप करें, या C
एक फ़ंक्शन (या कन्स्ट्रक्टर) c
को तर्क के रूप में ले रहा है (या यहां तक कि यदि सी operator()
ओवरलोडेड वाला ऑब्जेक्ट है)। पार्सिंग को चलाने के लिए आपको प्रतीक तालिका की आवश्यकता है, हालांकि प्रतीक के प्रकार प्रतीक तालिका में है, क्योंकि यह अभी भी पर्याप्त रूप से जारी रखना संभव है।
चीजें मिश्रण में आने पर उससे ज्यादा, बहुत खराब होती हैं। यदि C (c)
टेम्पलेट में है, तो हो सकता है कि आप टेम्पलेट की वास्तविक परिभाषा में नहीं जानते हैं, यदि सी एक प्रकार या फ़ंक्शन/ऑब्जेक्ट है।ऐसा इसलिए है क्योंकि टेम्पलेट C
या तो एक प्रकार या एक चर घोषित कर सकता है। इसका अर्थ यह है कि आपको प्रतीक तालिका की आवश्यकता है, लेकिन आप एक नहीं हैं - और नहीं हो सकता है जब तक कि टेम्पलेट वास्तव में घोषित नहीं किया जाता है। इससे भी बदतर, यह केवल प्रतीक के प्रकार के लिए पर्याप्त नहीं है: आप उन परिस्थितियों के साथ आ सकते हैं जिनके प्रतीक के आकार, संरेखण, और अन्य मशीन-विशिष्ट जानकारी सहित प्रतीक की पूर्ण जानकारी की आवश्यकता होती है।
इन सभी के कई व्यावहारिक प्रभाव हैं। मैं सबसे महत्वपूर्ण कहूंगा कि:
- संकलन बहुत तेज़ है। मुझे लगता है कि गो सी से संकलित करने के लिए तेज़ है, और सी ++ में कई टेम्पलेट्स शामिल स्थितियों के लिए प्रसिद्ध धीमी संकलन के समय हैं।
- आप पार्सर्स लिख सकते हैं जो पूर्ण कंपाइलर होने पर निर्भर नहीं हैं। कोड विश्लेषण करने और रिफैक्टरिंग के लिए यह बहुत उपयोगी है।
यह एक उत्कृष्ट संदर्भ है। –
ईमानदारी से, यह Google – hasen
से पहला (या दूसरा) परिणाम था, उस पोस्ट के उत्तरों को भी ध्यान दें - उनमें भी बहुत अच्छे कारण हैं कि यह असंभव क्यों है। – MSalters