यह प्रश्न किसी भी भाषा पर लागू होता है जो एक भाषा ("स्रोत") में लिखा गया है, उदा। सी या जावा, और दूसरे में वितरित ("बाइनरी"), उदा। गतिशील लिंकिंग का उपयोग कर मशीन कोड या जावा बाइट कोड।अर्थात् संस्करण स्रोत या बाइनरी संगतता पर लागू होता है?
मान लीजिए कि कोई उपयोगकर्ता पहले से ही मेरी लाइब्रेरी का संस्करण ए उपयोग कर रहा है। मैंने एक नया संस्करण बी
यदि वह बी के खिलाफ बिना किसी बदलाव के अपने कोड को संकलित कर सकता है और बी के साथ सही ढंग से चला सकता है, तो ए से बी में परिवर्तन स्रोत संगत कहा जाता है।
यदि वह ए के खिलाफ अपना कोड संकलित कर सकता है और बी के साथ सही ढंग से चला सकता है, तो ए से बी में परिवर्तन बाइनरी संगत कहा जाता है। पृथक मॉड्यूल लोडिंग (उदा। ओएसजीआई) के बिना ट्रांजिटिव निर्भरता ग्राफ का उपयोग करते समय यह स्थिति आम है। एक्स को वाई और जेड के कुछ संस्करणों के खिलाफ संकलित किया गया है, और वाई को जेड के एक अलग संस्करण के खिलाफ संकलित किया गया था। रनटाइम पर, जेड में जेड कॉल सही नहीं हो सकता है और क्रैश हो सकता है।
परिवर्तनों के लिए स्रोत संगत होने के लिए संभव है, लेकिन बाइनरी असंगत है। परिवर्तनों के असंगत और बाइनरी संगत होने के लिए परिवर्तन भी संभव है।
अर्थात् संस्करण के लिए मैं किस संगतता का उपयोग करता हूं? क्या मैं प्रमुख और मामूली/पैच अपडेट के बीच अंतर करने के लिए स्रोत संगतता का उपयोग करता हूं, या क्या मैं प्रमुख और मामूली/पैच अपडेट के बीच अंतर करने के लिए बाइनरी संगतता का उपयोग करता हूं?
मेरा वर्तमान प्रेरणा एक स्कैला लाइब्रेरी है। स्कैला बाइनरी संगतता का विश्लेषण करना बहुत मुश्किल हो सकता है और संकलक विवरण की अच्छी समझ की आवश्यकता होती है। स्रोत संगतता और बाइनरी असंगत बहुत आम है।
यह कुछ विचित्र एज केस नहीं है; यह समस्या किसी भी संकलित, गतिशील रूप से जुड़ी भाषा में दिखाई दे सकती है।
स्रोत-संगतता का अर्थ है कि उपयोगकर्ता का कोड बिना परिवर्तन किए संकलित करता है, इसलिए उन उपयोगकर्ताओं के बारे में बात करना जो प्रोग्रामर नहीं हैं या स्रोत कोड के बारे में नहीं जानते हैं, यहां काफी बकवास लगता है। साथ ही, अलग-अलग वर्जनिंग स्कीम रखने से उपयोगकर्ता को प्रश्न सीधे ले जाया जाएगा - क्या मुझे संस्करण योजना या बाइनरी-संगतता अर्थशास्त्र के साथ संस्करण योजना का उपयोग करना चाहिए? – matz
मेरे उत्तर में "pretend" शब्द नोट करें। ऐसे समय होते हैं कि प्रोग्रामर भी स्रोत कोड की परवाह नहीं करते हैं। मुझे संदेह है कि, हालांकि, आपकी टिप्पणी दी गई है कि आपको ऐसी चिंताओं हैं जो इस प्रश्न में नहीं बताई गई हैं। शायद मूल प्रश्न पर टिप्पणी में आपकी विशिष्ट समस्या का विस्तार करने के क्रम में है। – eh9