जावा को कैसे बेहतर बनाया जा सकता है ताकि उसे अब प्रकार के क्षरण करने की आवश्यकता न हो?


16

जेनरिक पर सरकारी जावा ट्यूटोरियल प्रकार विलोपन बताते हैं और क्यों यह संकलक को जोड़ा गया है:

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

यह सबसे अधिक संभावना एक व्यावहारिक दृष्टिकोण था, या शायद कम से कम दर्दनाक एक। हालाँकि, अब इस उद्योग में व्यापक रूप से जेनरिक का समर्थन किया जाता है, ऐसे में हमें किस प्रकार के क्षरण की आवश्यकता नहीं है? क्या यह बैकवर्ड संगतता को तोड़ने की आवश्यकता के साथ संभव है, या यदि यह संभव है, तो क्या यह व्यावहारिक है?

क्या ऊपर दिए गए उद्धरण में अंतिम कथन आत्म संदर्भित है? वह है: "टाइप इरेज़र जावा अनुप्रयोगों को सक्षम करता है जो जावा पुस्तकालयों के साथ द्विआधारी संगतता बनाए रखने के लिए जेनेरिक का उपयोग करते हैं और ऐसे एप्लिकेशन जो जावा संस्करण के साथ बनाए गए थे जो टाइप इरेज़र करते हैं।"


1
सन 1.4 ईओएलईडी था। आईबीएम अभी भी अपने प्लेटफार्मों पर 1.4 का समर्थन करता है।

@ ThorbjørnRavnAndersen: और कम से कम उस मंच के लिए जो मेरे पिताजी के तहखाने में बैठता है, वहाँ कोई 1.5 नहीं है
जोर्ग डब्ल्यू मित्तग

@ ThorbjørnRavnAndersen केवल इतना ही नहीं, बल्कि JVM के पहले के कई संस्करणों के लिए भी विस्तारित समर्थन खरीद सकते हैं। पिछले मैंने सुना है, हालांकि यह काफी महंगा है।
maple_shaft

1
हमारे यहाँ कोई भी क्रिस्टल बॉल नहीं रखता है, इस प्रकार, यह जवाबदेह नहीं है। शायद इसे फिर से खोल दिया जा सकता है यदि आप "क्या कभी होगा ..." से प्रश्न को "जावा के भविष्य के संस्करण में
टाइप एरासुरे के

@ JörgWMittag 2012 में उत्पादन के लिए वास्तव में इस्तेमाल किया जाने वाला एक मंच होगा?

जवाबों:


7

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

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


6
OpenJDK की टीम ने फिर से जनरेटेड जेनरिक को देखते हुए चर्चा की है? जावा 9 के टाइमफ्रेम के दौरान सबसे अधिक गंभीरता से देखा जा सकता है और अगर यह तकनीकी रूप से संभव है, तो जावा 10 के टाइमफ्रेम में दिया जाएगा। लेकिन यह मेरी ओर से गंभीर soothsaying है।
मार्टिज्न वर्बर्ग 12

प्रकार का क्षरण संकलक द्वारा किया जाता है, जेवीएम से नहीं। पुनरीक्षित जेनरिक का परिचय एक नए संकलक और नए JVM की आवश्यकता होगी, लेकिन संभवतः वे अभी भी पुराने कोड के साथ काम करेंगे।
गब

@ गैबे: जाहिर है कि उन्हें नए रिलीज में पेश किया जाएगा, इसलिए नए कंपाइलर और नए जेवीएम होंगे। लेकिन इसके लिए मानक पुस्तकालय के महत्वपूर्ण भाग की नकल करने की भी आवश्यकता है, क्योंकि इसमें नए कोड के लिए सामान्य संस्करण और पिछड़े संगतता के लिए गैर-सामान्य संस्करण की आवश्यकता होगी। .NET ने संस्करण 2.0 में ऐसा ही किया, जावा ने इसे मिटाने से बचा लिया। .NET में वैल्यू टाइप (स्ट्रक्चर) है और उनके लिए फर्स्ट क्लास सपोर्ट टाइप इरेज़र को रोकता है। जावा नहीं करता है, इसलिए संशोधित जेनरिक के लिए दबाव बहुत छोटा है।
जन हुदेक

जनवरी: मैं सिर्फ इस तथ्य पर टिप्पणी कर रहा था कि जेनरिक को संशोधित करने का मतलब यह नहीं है कि सभी पुराने कोड टूट गए हैं। मैं यह भी जोड़ूंगा कि List<int>निश्चित रूप से वर्कलोड वर्तमान की तुलना में बहुत अधिक कुशल होगा List<Integer>
गाबे

@ गैबे: हम इसमें असहमत नहीं हैं। मैं सिर्फ मुख्य दोष को नोट करना चाहता था।
Jan Hudec
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.