I too tend to make fields optional unless I am really convinced that the field would live for eons. I agree with Google's philosophy in that regard.
On Aug 6, 2012, at 3:39 PM, Chris Trezzo wrote: > Hi All, > > I was looking through the .proto files and noticed there are a lot of > fields that are marked as required. I am by no means a protobuf expert, but > I was wondering what advantage do we actually get in making fields required? > > I understand that if we don't use the required keyword we would have to > implement custom application logic, but the flexibility we gain from having > all the fields optional seems to outweigh that work. In addition, we will > already have to add logic to HBase to handle version compatibility, so it > seems natural to implement the required logic as part of that layer. This > would allow us to change or delete any message field and maintain wire > compatibility. > > Quote from the protobuf language guide ( > https://developers.google.com/protocol-buffers/docs/proto): > > "*Required Is Forever* You should be very careful about marking fields as > required. If at some point you wish to stop writing or sending a required > field, it will be problematic to change the field to an optional field – > old readers will consider messages without this field to be incomplete and > may reject or drop them unintentionally. You should consider writing > application-specific custom validation routines for your buffers instead. > Some engineers at Google have come to the conclusion that using > requireddoes more harm than good; they prefer to use only > optional and repeated. However, this view is not universal." > > Thoughts? > > Thanks, > Chris Trezzo