जंग के टुकड़े Semantic Versioning का उपयोग करते हैं। नतीजतन, एक ब्रेकिंग बदलाव के साथ प्रत्येक रिलीज के परिणामस्वरूप एक प्रमुख संस्करण टक्कर होनी चाहिए। ब्रेकिंग चेंज को आमतौर पर कुछ ऐसा माना जाता है जो डाउनस्ट्रीम क्रेट्स को तोड़ सकता है (कोड पुस्तकालय पर निर्भर करता है)।लाइब्रेरी क्रेट में ब्रेकिंग चेंज को वास्तव में क्या माना जाता है?
हालांकि, जंग में पूरी तरह से डाउनस्ट्रीम क्रेट को तोड़ने की क्षमता है। उदाहरण के लिए, बदलना (को में जोड़कर) सार्वजनिक प्रतीकों का सेट संभवतः एक तोड़ने वाला परिवर्तन है, क्योंकि डाउनस्ट्रीम क्रेट्स ग्लोब-आयात (use foo::*;
) का उपयोग कर सकते हैं ताकि हमारी लाइब्रेरी के प्रतीकों को उनके नामस्थान में खींच सकें। इस प्रकार, प्रतीकों को जोड़ने से निर्भर क्रेट भी टूट सकते हैं; this example देखें।
इसी तरह, के सेट को बदलने (संस्करण जोड़ने या बदलने) हमारे निर्भरता डाउनस्ट्रीम बिल्ड को तोड़ सकती है। आप यह भी कल्पना कर सकते हैं कि डाउनस्ट्रीम क्रेट हमारे सार्वजनिक प्रकारों में से किसी एक के विशिष्ट आकार पर निर्भर करता है। यह शायद ही कभी, उपयोगी है; मैं बस दिखाना चाहता हूं: सब कुछ तोड़ने वाला परिवर्तन हो सकता है, अगर डाउनस्ट्रीम क्रेट केवल इतना कठिन प्रयास करता है।
क्या इस बारे में कोई दिशानिर्देश है? क्या एक ब्रेकिंग बदलाव और वास्तव में क्या माना जाता है (क्योंकि इसे "उपयोगकर्ता की गलती" माना जाता है)?
"हमारी निर्भरताओं के सेट को बदलकर" क्या आप निर्भरता को जोड़ने/हटाने, निर्भरता के संस्करण को बदलने, या इनमें से कोई भी मतलब है? (व्यक्तिगत रूप से मैं इस बात पर शासन करता हूं कि ग्लोब आयात का उपयोग करना * स्लूड मॉड्यूल के लिए * छोड़कर बुरा स्वाद है, और इसलिए मॉड्यूल को केवल प्रतीकों को जोड़ने के बारे में चिंता करनी चाहिए)। –
केवल तभी जब आपका सार्वजनिक एपीआई रेट्रो संगत नहीं है। – Stargateur
मुझे नहीं लगता कि यदि कोड संकलित करने में विफल रहता है तो आप संस्करण को बंपिंग पर विचार करेंगे (जैसे आपके उदाहरण में); सेमेवर यहां लागू प्रतीत नहीं होता है। – ljedrz