मैं मार्च 1 99 7 की कक्षाओं के पुराने सेट में आया था। यह उस समय था जब मैंने जावा सीखने की कोशिश की थी, और यह जेडीके 1.0.2जावा बाइनरी संगतता के साथ क्या हुआ?
दिलचस्प है, मेरे पास स्रोत फाइलें और क्लास फाइलें हैं उस समय से बरकरार है। स्रोत अभी भी संकलित और निष्पादित के रूप में निष्पादित करते हैं, जो वास्तव में अच्छा था। लेकिन जावा को द्विआधारी संगतता को बरकरार रखने वाला नहीं था? खैर, कहीं भी, प्रारूप अब वैध नहीं है। एक जावा 8 वीएम रिपोर्ट करेगा;
Exception in thread "main" java.lang.ClassFormatError: Invalid start_pc 65535 in LocalVariableTable in class file bali/core/Application
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
:
[snip many ClassLoader calls]
:
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
अपमानजनक वर्ग उस वर्ग का सुपरक्लास है जिसे मैं कमांड लाइन से कॉल करता हूं।
एक और विवरण, उन दिनों में, माइक्रोसॉफ्ट अभी भी जावा शिविर में था, और मुझे याद है कि उनका जाव बुरी तरह लिखित वाक्यविन्यास के खिलाफ अधिक अनुपालन था। सन कंपाइलर खुशी से "सार्वजनिक सिंक्रनाइज़ क्लास एबीसी" और कई अन्य अमान्य बयान स्वीकार करेगा। इसलिए, एक बड़ा मौका है कि इन वर्ग फ़ाइलों को एमएस कंपाइलर द्वारा उत्पन्न किया गया था, और फिर सूर्य जेवीएम पर चलाया गया था।
वैसे भी, मेरा सवाल है; क्या जावा के प्रारंभिक संस्करणों में संगतता प्रतिबद्धता के बारे में ज्ञान रखने वाले किसी के पास कोई है? क्या यह एक बड़ा सौदा था, या इसे उद्देश्य पर त्याग दिया गया था? या बाद में कोई निर्णय था, जावा 1.4 या जावा 5 को बस जेडीके 1.0 समर्थन ड्रॉप करने के लिए कहें ??
मैं कुछ टिप्पणी नहीं ऑनलाइन है कि पुराने javac कि पता चलता पाया टूटा हुआ था, गलत बाइट कोड उत्पन्न हुआ और बाद के संस्करण के वेरिफ़ियर ने उन गलतियों में से कुछ पकड़ा। ऐसा लगता है कि जावा 6 में एक विशेष बदलाव हुआ है, जहां इसे पकड़ा जाना शुरू हो सकता था। –
खैर, कक्षा फ़ाइल मान्य नहीं है। जावा बाइनरी संगतता केवल वैध वर्ग फ़ाइलों के लिए है। सिर्फ इसलिए कि कुछ पहले जेवीएम कमजोर था, वह नहीं बदलता है। – Andreas
यह हमेशा एक बड़ी दुविधा है कि क्या एक निश्चित बग को ठीक करना है यदि फिक्स आपके द्वारा पहले किए गए संगतता वादे को तोड़ देता है। लेकिन इस मामले में सवाल में बग शायद इतना गंभीर था कि इसे बग compatiblity तोड़ने के लिए सार्थक समझा गया था। – biziclop