जावा कंपाइलर पार्स टाइपकास्ट कैसे करता है?
(x) - y
जैसे एक साधारण अभिव्यक्ति का अर्थ भिन्न है कि x
एक प्रकार का नाम है या नहीं। यदि x
एक प्रकार का नाम नहीं है, तो (x) - y
x
से y
को घटा देता है। लेकिन यदि x
एक प्रकार का नाम है, (x) - y
y
के नकारात्मक की गणना करता है और परिणामस्वरूप मान x
टाइप करने के लिए बनाता है।
एक सामान्य सी या सी ++ कंपाइलर में, x
एक प्रकार है या नहीं, इसका सवाल उत्तरदायी है क्योंकि पार्सर इस तरह की जानकारी लेक्सर को संचारित करता है जैसे ही यह टाइपिफ़ या स्ट्रक्चर घोषणा को संसाधित करता है। (मुझे लगता है कि स्तरों के इस तरह के आवश्यक उल्लंघन सी के डिजाइन का सबसे नास्ट हिस्सा था)
लेकिन जावा में, x
को बाद में स्रोत कोड में परिभाषित नहीं किया जा सकता है। जावा कंपाइलर इस तरह की अभिव्यक्ति को कैसे असंबद्ध करता है?
यह स्पष्ट है कि जावा कंपाइलर को कई पास की आवश्यकता होती है, क्योंकि जावा को घोषणा-पूर्व-उपयोग की आवश्यकता नहीं होती है। लेकिन ऐसा लगता है कि पहले पास को अभिव्यक्तियों को पार करने पर एक बहुत ही बेवकूफ नौकरी करना पड़ता है, और उसके बाद बाद में पास एक और अधिक सटीक, अभिव्यक्तियों का विश्लेषण करता है। यह अपमानजनक लगता है।
क्या कोई बेहतर तरीका है?
में वोट दिया जाना चाहिए, मैं वास्तव में कल्पना को देखने के लिए बहुत आलसी था (और मुझे नहीं पता था कि वैसे भी कहां देखना है)। +1 –
इस उत्तर को स्वीकार करने पर विचार करें। –