My understanding is that if a primitive field is empty in a v3 message then 
it will give 0 which is indistinguishable from a field that is actually 0. 
 From what I have read is this is done to enable support of a wide range of 
languages, but how is this a well reasoned solution to this problem?  The 
response to me might be "well just explicitly include a 'has_field' boolean 
to indicate the presence of a field", but I have messages with many 
optional fields and adding a "has_xxx" field for each makes the message 
definition so ugly that I feel overcome by waves of nausea.  What initially 
attracted me to protocol buffers is the ability to define messages in a 
single place rather than using say JSON where the protocol can easily end 
up being distributed over multiple source files.

My solution for this big problem is an ugly hack but better than any other 
ugly hack:  for primitive fields code the value as (val*2) | 1.  This 
guarantees all present fields are non-zero so empty fields can be detected. 
 I think a better solution would be to, at least, have an API that I can 
use to determine if a field is present or not.  Since the v3 work is still 
in alpha, my hope is that someone comes to their senses.

If not for the much better Ruby performance with v3 I would stick with v2 
but the improvement is undeniable so v3 with ugly hack it is for now.

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to