java - क्या जेडीके "ऊपर की ओर" या "पिछड़ा" संगत है?




backwards-compatibility binary-compatibility (6)

पिछड़ा बाइनरी संगतता (या नीचे की संगतता) - लाइब्रेरी एपीआई के पुराने संस्करण के साथ बनाए गए ग्राहकों की एक नई ( wiki ) पर चलाने के लिए।

ऊपर की बाइनरी संगतता (या आगे संगतता) - पुरानी एक ( wiki ) पर चलाने के लिए लाइब्रेरी एपीआई के एक नए संस्करण के साथ बनाए गए ग्राहकों की क्षमता।

1.4.2 के बाद जे 2 एसई 5.0 में जेडीके असंगतताओं के बारे में सामान्य सूर्य का दस्तावेज (और जे 2 एसई 5.0 के साथ जावा एसई 6 संगतता ) जेडीके की संगतता का वर्णन निम्नानुसार करता है:

जेडीके 5.0 ऊपर सूचीबद्ध असंगतताओं को छोड़कर जावा 2 एसडीके, v1.4.2 के साथ बाइनरी-संगत है। इसका मतलब यह है कि, उल्लेखनीय असंगतताओं को छोड़कर, संस्करण 1.4.2 कंपाइलर्स के साथ निर्मित कक्षा फाइलें जेडीके 5.0 में सही ढंग से चलेंगी

मुझे लगता है कि दस्तावेज लेखकों ने इस वाक्य में "ऊपर की ओर" और "पिछड़ा" संगतता को मिश्रित किया है । वे "पिछड़ा" संगतता का वर्णन करते हैं, लेकिन इस सुविधा को "ऊपर की ओर" संगतता के रूप में कहते हैं।

क्या यह एक टाइपो, गलती या इच्छित शब्द है? क्या जेडीके "ऊपर की ओर" या "पिछड़ा" संगत है?


केवल पीछे की ओर। फॉरवर्ड कंपैट ("अपने आप के बाद के संस्करणों के लिए इच्छित इनपुट को स्वीकार्य रूप से स्वीकार करें") को 1.5 जेवीएम 1.6 संकलित कोड चलाने में सक्षम होने की आवश्यकता होगी, जो यह नहीं कर सकता है।

बैकवर्ड की आवश्यकता है "अगर यह किसी पुराने डिवाइस द्वारा उत्पन्न इनपुट के साथ काम कर सकता है" जो कि 1.6 जेवीएम 1.5 संकलित कोड चला सकता है।

जेडीके / जेआरई की प्रत्येक रिलीज जावा बाइटकोड के एक संस्करण के साथ मेल खाता है। प्रत्येक कंपाइलर एक विशिष्ट बाइटकोड संस्करण का कोड उत्पन्न करता है। प्रत्येक JVM एक संस्करण और एक विशिष्ट बाइटकोड संस्करण के सभी पुराने संस्करणों को समझता है।

जब JVM कक्षा को लोड करता है तो यह बाइटकोड संस्करण की जांच करता है और यदि यह है> JVMs नवीनतम समझा संस्करण से आपको एक त्रुटि मिल जाएगी। (क्लासवर्सन त्रुटि या कुछ)।


जावा (वीएम) पिछड़ा संगत है। जावा 1.4.2 द्वारा निर्मित कोड 1.5 और 6 वीएम पर चलाएगा। जेडीके कंपाइलर पिछड़ा संगत नहीं है। तो उदाहरण के लिए 1.4.2 पर चलाने के लिए जावा 1.5 द्वारा कोड संकलित नहीं किया जा सकता है।


जेडीके पिछड़ा संगत है, यानी बाइट कोड जो 1.4.2 spec का अनुपालन करता है जावा 5 जेवीएम पर चलाएगा


ध्यान दें कि कुछ पिछड़ा संगत होने के लिए एक समकक्ष होना चाहिए जो आगे संगत (या तो जानबूझकर या अनजाने में) हो। उदाहरण के लिए: क्या डीवीडी पाठक सीडी के साथ पीछे संगत हैं या सीडी के डीवीडी पाठकों के साथ संगत हैं?

इस मामले में, यह निर्भर करता है कि क्या आप कंपाइलर (या बाइटकोड उत्पन्न करता है) या आभासी मशीन को देखते हैं।

कंपाइलर पिछड़ा संगत नहीं है क्योंकि जावा 5 जेडीके के साथ जेनरेट किया गया बाइटकोड जावा 1.4 जेवीएम में नहीं चलाया जाएगा (जब तक -target 1.4 ध्वज के साथ संकलित नहीं किया जाता है)। लेकिन जेवीएम पीछे की ओर संगत है, क्योंकि यह पुराने बाइटकोड चला सकता है।

तो मुझे लगता है कि उन्होंने जावैक के दृष्टिकोण से संगतता पर विचार करना चुना है (क्योंकि यह जेडीके के लिए विशिष्ट हिस्सा है), जिसका अर्थ है कि उत्पन्न बाइटकोड जेवीएम की भविष्य की रिलीज में चलाया जा सकता है (जो जेआरई से अधिक संबंधित है , लेकिन जेडीके में भी बंडल)।

संक्षेप में, हम कह सकते हैं:

  • जेडीके (आमतौर पर) आगे संगत हैं।
  • जेआरई (आमतौर पर) पिछड़े संगत हैं।

(और यह एक सबक के रूप में भी कार्य करता है जिसे बहुत पहले सीखा जाना चाहिए: कंपाइलर लिखने वाले लोग आमतौर पर सही होते हैं, और हम लोग गलत xD का उपयोग करते हैं)

वैसे, क्या यह उन्हें मिश्रण करने के बजाय पीछे / आगे और नीचे / ऊपर की ओर जोड़ना अधिक समझ में नहीं आता है?


यह पिछड़ा संगत होना चाहिए।


विकी से परिभाषा के अनुसार जेडीके नीचे संगत है।





forward-compatibility