प्रोटोबॉफ़ के सिंटैक्स 3 ने सभी फ़ील्ड्स को कीवर्ड छोड़ने requiredऔर optionalपिछले प्रोटॉ 2 सिंटैक्स से वैकल्पिक बनाया । डेवलपर्स की कुछ टिप्पणियों को पढ़ने से ऐसा लगता है कि यह आगे / पिछड़े द्विआधारी संगतता को बढ़ाने के लिए किया गया था।
लेकिन मेरे लिए, कि पैकेज के नामों को केवल संस्करण के द्वारा लागू किया जा सकता है, कहते हैं com.example.messages.v1और फिर ग्राहकों को उनके द्वारा समझे जाने वाले डीसेरिएलाइज़र को लागू करने देते हैं। उसी समय यह एक प्रकार के रूप में बताए गए कुछ अनुबंधों को हटा देता है जो सॉफ्टवेयर इंजीनियरिंग दृष्टिकोण से उपयोगी होते हैं। उदाहरण के लिए अगर मेरे पास है
message Location {
double latitude = 1;
double longitude = 2;
}
प्रोटो 3 में एक आधा समर्थित बनाना संभव है, लेकिन Locationएक आवश्यक फ़ील्ड प्रदान नहीं करके पूरी तरह से वैध है।
क्या ग्राहकों के बीच डेटा के आदान-प्रदान के लिए स्कीमा आधारित क्रमांकन प्रारूप बनाते समय एक बड़ी कमी नहीं है? क्या प्रत्येक आवश्यक जाँच के लिए अतिरिक्त सत्यापन कोड को स्थानांतरित करना बुरा नहीं है कि सभी आवश्यक क्षेत्रों में मान्य मूल्य हैं?