In addition to what Henner says, we felt that it wasn't worthwhile to
implement packed encoding for strings or sub-messages because the savings
would be very small.  The packed encoding only saves one or two bytes per
element.

On Sun, Jan 17, 2010 at 7:30 PM, Henner Zeller <henner.zel...@googlemail.com
> wrote:

> On Sun, Jan 17, 2010 at 18:59, Atry <pop.a...@gmail.com> wrote:
> > When I set [packed = true] on a nested message field, I receive this
> error:
> >
> >> [packed = true] can only be specified for repeated primitive fields.
> >
> > I wonder why it is disallowed.
>
> The reason is to be able to automatically distinguish fields that have
> been 'upgraded' from previously non-packed to packed.
> This detection can be done because the type on the wire changes for
> primitive types but it would not change for non-primitive types.
>
> An example: a non-packed repeated field for a primitive type would be
> on the wire something like <tag, int-type> <value> <tag, int-type>
> <value> ...
> That would change for packed to something like <tag,
> length-delimited-type> <length> [<value> <value> <value> ...]
>
> While if it was a length delimited field in the first place, say a
> string or a message, that type on the wire <length-delimited> would
> not change, so it is impossible to distinguish just from the raw byte
> sequence if this is a length non-packed or a packed repeated field.
> Dropping the feature for length delimited fields (for which there is
> not much saving to be expected anyway) allows for a safe upgrade path.
>
> > The output for packed nested field list as
> > the below:
> >
> >> The field number and wire type LENGTH_DELIMITED.
> >> Length of all elements.
> >> Length of the first element.
> >> Content of the first element.
> >> Length of the second element.
> >> Content of the second element.
> >>
> >> ...
> >>
> >> Length of the nth element.
> >> Content of the nth element.
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Protocol Buffers" group.
> > To post to this group, send email to proto...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@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 proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@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 proto...@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.

Reply via email to