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




backwards-compatibility binary-compatibility (7)

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

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

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

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

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

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


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


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


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

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

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

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


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


नवीनतम जावा शामिल करने के लिए उत्तर विस्तार ...

जावा एसई 7 और जेडीके 7 संगतता

ओरेकल के अनदेखा पृष्ठ से उद्धरण:

संगतता एक जटिल मुद्दा है। यह दस्तावेज़ जावा प्लेटफॉर्म के रिलीज से संबंधित तीन प्रकार की संभावित असंगतताओं पर चर्चा करता है:

  1. स्रोत : स्रोत संगतता जावा स्रोत कोड का अनुवाद कक्षा फ़ाइलों में अनुवाद करने से संबंधित है, भले ही कोड अभी भी संकलित हो या नहीं।
  2. बाइनरी : बिना किसी त्रुटि के लिंक करने की क्षमता को संरक्षित करने के रूप में जावा भाषा विशिष्टता में बाइनरी संगतता परिभाषित की गई है।
  3. व्यवहारिक : व्यवहारिक संगतता में रनटाइम पर निष्पादित कोड के अर्थशास्त्र शामिल हैं।

… तथा

जावा एसई 7 और जावा एसई 6 जावा एसई 7 के बीच असंगतता जावा प्लेटफ़ॉर्म के पिछले संस्करणों के साथ दृढ़ता से संगत है। लगभग सभी मौजूदा कार्यक्रमों को संशोधन के बिना जावा एसई 7 पर चलाना चाहिए। हालांकि, जेआरई और जेडीके में कुछ मामूली संभावित स्रोत और द्विआधारी असंगतताएं हैं जिनमें दुर्लभ परिस्थितियों और "कोने के मामलों" शामिल हैं जिन्हें पूर्णता के लिए यहां दस्तावेज किया गया है।

भाषा, जेवीएम, या जावा एसई एपीआई में जावा एसई 7 असंगतताएं

… तथा

जेडीके 7 और जेडीके 6 के बीच असंगतताएं

जाडैक में जेडीके 7 असंगतता, हॉटस्पॉट, या जावा एसई एपीआई में

(वहां कोई प्रस्ताव नहीं है - असंगतताओं की एक सूची।)


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


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

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

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

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

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

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

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

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





forward-compatibility