In one place in production code, we used ToASCII and ParseASCII APIs
to encode and decode a protocol message.

The previous implementer had a comment on the usage of ASCII:

// The protocol buffer is converted into an
// ascii version so that a big endian transmitter can talk to a little
// endian receiver and vice versa. This will change once the protocol
// buffer implementation is ported to work with a neutral wire format.

First question: Does the protocol buffer implementation support
neutral format now? In other words, does two machines with different
endians talk to each other (encode and decode) via protocol buffers.

I added couple of new optional field to the old protocol buffers. I'm
seeing a problem with backward compatibility.  That is old code is
complaining that the new fields are unrecognized:

09-21-2008 06:25:12 XX ygs04f1s2i30 user.err lcm[846]: tagmapper-
ascii.cc:388] Did not find tag type in message type IfmNDMessage
09-21-2008 06:25:12 XX ygs04f1s2i30 user.err lcm[846]: tagmapper-
ascii.cc:254] input error at line: 7 column: 1: ParseSlot(group_name)
failed

Here is what I found after close reading:
https://www.corp.google.com/eng/designdocs/infrastructure/protocol-buffer.html

Extending a Protocol
...
Also, make any new elements and groups be optional or repeated, so
that messages generated by old code can be parsed by new code. As
noted above, the old code will ignore any unknown elements in the
message.
...

ASCII Format
...
Support is provided for converting from ASCII to binary with the
ParseASCII method. As this support is slow and does not allow
evolution of protocol types its use is discouraged for production
services.
...

Second question: What does it mean "does not allow evolution of
protocol types" in the above doc? Does it mean ToASCII and ParseASCII
methods are not backward compatible?

Third question: How should I correct this now? The protocol message to
which I added optional fields (call it FooMessage) is embedded inside
other message (call it BarMessage) as a required field of type string.
Because it is a string, the previous author used ToASCII and
ParseASCII. Now I can't change this string to FooMessage because it is
a required field in production.
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to