Zero is reserved for historical reasons; it used to be used for propagating error codes.
The wire format was designed with extensibility in mind; while in many applications unknown fields won't be encountered, this support is critical in many internal applications. Note that simply adding a zero tag would cause the parser (CodedInputStream) to stop reading bytes, but would also make ConsumedEntireMessage() false. This would make most of the higher level message-parsing routines fail. On Fri, Jul 8, 2011 at 3:43 AM, nicolas hofmann <hofmann....@gmail.com>wrote: > Thank for your help but I don't think you understood my problem. I > will give more detail. > > > I'm trying to make communicate two process using protocol buffers in > pipes (the group thing won’t work). For efficiency purpose, they will > keep their connection as long as they are alive but the messages have > to be processed as soon as possible. The easiest known way to delimit > the messages is described in the techniques section of the > documentation but I’m uncomfortable with the fact of having to write > and compute the total length because it seem useless if you never skip > entire messages, wish is my case. This argument also work for embedded > messages if none of them are unexpected, wish is also my case. The end > marker technique avoids the length calculation without making it > impossible to skip your message/embedded message if you really need > to. > > Moreover, if you use static format for your size field, the whole > thing will fail miserably if your size field is too small or be > inefficient if your messages are small and you choose a too big size > field size. The varint format is a solution but the null tag would in > any way be more efficient since it always only take one byte. > > I'm just asking if having the possibility to make the protocol buffer > deal with a null field number the same way it does with the end of > stream instead of throwing an exemption and do something similar to > this with emended messages is a good idea. Doing this efficiently > would require to integrate it inside the generated code... with all > the problem that it involve... That's why i will probably not have the > time to implement that the whole thing with elegancy anyway and > therefore not plan to do so. So my question is purely theoretical. > > > > On 7 juil, 20:07, Marc Gravell <marc.grav...@gmail.com> wrote: > > I don't pretend to know the original thinking, but it would be very hard > to add such now without breaking existing clients. However, note that if you > *really* don't want to have to get the lengths, you could encode your data > inside a "group", since this has a terminator rather than a length prefix. > Treat the data as a "repeated" set of the group, and job done. > > > > Of course, writing the length isn't usually a massive task either, but > *not* writing it is easier :p > > > > Caveat: technically groups are semi-deprecated, giving preference to > length-prefixed messages. I believe that part of the reasoning here is the > higher cost of reading *unexpected* groups since you must parse the stream > rather than just copy (or skip) the next [n] bytes, but in my *own* use of > protobuf this is rarely an issue: in the majority of cases all my clients > know about the fields. There is also a difference in the size, but > "difference" is the key term here - neither approach is always longer or > always shorter; any comparison depends on both the field number and the size > of the data. > > > > I openly confess to having a strong like for "groups" - they do make the > encoding process simpler :p > > > > Marc > > > > On 7 Jul 2011, at 14:18, nicolas hofmann <hofmann....@gmail.com> wrote: > > > > > > > > > > > > > > > > > My question is simple but i didn't found the answer anywhere. I was > > > wondering why the tag number range started at one and not zero. > > > > > I was looking for a way to stream multiple messages without having to > > > compute their sizes and realized that just add a zero tag number at > > > the end could be a good way to mean the end of the current message > > > since it's illegal. I searched here and in the > > > documentation(especially in the encoding section) but saw no good > > > reason to this limitation. > > > > > It look so simple i think I'm probably missing something but, by > > > definition, i don't know what. > > > > > Thanks,... > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "Protocol Buffers" group. > > > To post to this group, send email to protobuf@googlegroups.com. > > > To unsubscribe from this group, send email to > protobuf+unsubscr...@googlegroups.com. > > > For more options, visit this group athttp:// > groups.google.com/group/protobuf?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To post to this group, send email to protobuf@googlegroups.com. > To unsubscribe from this group, send email to > protobuf+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/protobuf?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to protobuf@googlegroups.com. To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.