2011-09-28 13 views
12

संभव डुप्लिकेट:
Boost Serialization Library upgradeक्या सी ++ बूस्ट बाइनरी सीरियलाइजेशन लाइब्रेरी पिछड़ा/फवर्ड संगत है?

मैं एक सी ++ आवेदन के लिए एक क्रमबद्धता समाधान खोजने के लिए कोशिश कर रहा हूँ। मैं वास्तव में बढ़ावा बाइनरी serialization का उपयोग करने में सक्षम होना पसंद करेंगे। यदि मैं बूस्ट बाइनरी सीरियलाइजेशन लाइब्रेरी के पुराने संस्करण का उपयोग करके किसी ऑब्जेक्ट को क्रमबद्ध करना था, तो क्या एक एप्लिकेशन जो बूस्ट लाइब्रेरी के नए संस्करण का उपयोग कर रहा है, हमेशा इसे पढ़ने में सक्षम होगा? इसके विपरीत के बारे में क्या? धारावाहिक पुस्तकालय पर पिछड़े/संगतता पर बूस्ट का दर्शन क्या है?

+2

यह एक डुप्लिकेट होगा, लेकिन इसका कोई संतोषजनक उत्तर नहीं है। – julkiewicz

+0

@julkiewicz हां, प्लस ओपी अभी तक मौजूदा प्रश्न पर बक्षीस देने की स्थिति में नहीं है। –

+0

उह, यदि कोई अच्छा डुप्लिकेट नहीं है तो यह क्यों बंद हो जाता है? –

उत्तर

10

वे हेडर में संस्करण को बढ़ाकर ऐसा करते हैं। तो हां, यह एक अर्थ में संगत है कि अगर आप 1.45.0 release notes इंगित करते हैं तो असंगत संस्करण के साथ क्रमबद्ध बाइनरी डेटा को पढ़ने का प्रयास करते हैं तो आपको एक सुखद विफलता मिलेगी। इसके अलावा 1.42 और 1.43 में बग हैं जो इसे तोड़ते हैं!

संस्करण 1.42 और 1.43 के तहत बनाए गए मूल बाइनरी अभिलेखागार गंभीर समस्या से पीड़ित हैं। ऐसा लगता है कि वे इस नवीनतम संस्करण द्वारा पठनीय नहीं होंगे। इस तथ्य के कारण 1.42 ने कुछ प्रकार के बाइनरी प्रारूप में कुछ बदलाव किए। आम तौर पर इसे संग्रह शीर्षलेख में लिखे गए लाइब्रेरी संस्करण संख्या का पता लगाकर संबोधित किया जा सकता है। दुर्भाग्यवश, यह लाइब्रेरी संस्करण संख्या 1.42 पर बढ़ी नहीं थी जैसा कि यह होना चाहिए था। तो अब हमारे पास एक ही लाइब्रेरी संस्करण संख्या के साथ दो अलग-अलग बाइनरी संग्रह संस्करण हैं।

मैं व्यक्तिगत रूप से Google Protocol Buffers में अधिक विश्वास रखते हैं होता है, यह explicitly maintains backwards compatibility:

आप पीछे की ओर-संगतता को तोड़ने के बिना अपने संदेश प्रारूपों के लिए नए क्षेत्रों को जोड़ सकते हैं; पुरानी बाइनरी बस पार्सिंग करते समय नए क्षेत्र को अनदेखा करते हैं।

हालांकि इसे बिल्ड सिस्टम पक्ष पर थोड़ा अधिक प्रयास की आवश्यकता है क्योंकि इसमें ऑटो-जेनरेट कोड का उपयोग करना शामिल है।

+0

आपकी राय के लिए +1: पी –

+0

Boost.serialization आपके डेटा को भी संस्करणित करने की अनुमति देता है, हालांकि (हालांकि स्वीकार्य रूप से यह थोड़ा कम "जादुई" है); हालांकि boost.serialization के विभिन्न संस्करण _same_ वर्ग परिभाषा के लिए अलग-अलग वायर प्रारूप का उपयोग कर सकते हैं, प्रोटोबफ वायर प्रारूप प्रकाशित होता है और यह प्रकट नहीं होता है। – bacar

+0

@Alex B, क्या यह GPB का उपयोग दस्तावेज़ प्रारूप के रूप में करने के लिए किया जाएगा जहां कुल ऑब्जेक्ट आकार 30 एमबी से 1 जीबी के बीच है? –

संबंधित मुद्दे